国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Heim WeChat-Applet WeChat-Entwicklung Endlich wurde die Sache gekl?rt, indem ich die Drittanbieterplattform WeChat nutzte, um Miniprogramm-Gesch?fte zu autorisieren

Endlich wurde die Sache gekl?rt, indem ich die Drittanbieterplattform WeChat nutzte, um Miniprogramm-Gesch?fte zu autorisieren

Jul 25, 2018 pm 02:16 PM
php Wechat Wechat -Applet

Dieser Artikel wurde von mir unter Verwendung der Drittanbieterplattform WeChat geschrieben, um Miniprogrammgesch?fte zu entwickeln und zu implementieren. Der Code ist sehr vollst?ndig und jeder Schritt wird zu Ihrer Referenz im Detail vorgestellt.

Schritt eins: Beantragen Sie ein offenes WeChat-Plattformkonto und erstellen Sie eine Drittanbieterplattform

Endlich wurde die Sache gekl?rt, indem ich die Drittanbieterplattform WeChat nutzte, um Miniprogramm-Gesch?fte zu autorisieren

Endlich wurde die Sache gekl?rt, indem ich die Drittanbieterplattform WeChat nutzte, um Miniprogramm-Gesch?fte zu autorisieren

Endlich wurde die Sache gekl?rt, indem ich die Drittanbieterplattform WeChat nutzte, um Miniprogramm-Gesch?fte zu autorisieren

Endlich wurde die Sache gekl?rt, indem ich die Drittanbieterplattform WeChat nutzte, um Miniprogramm-Gesch?fte zu autorisieren

Schritt 2: Autorisieren Sie das offizielle Konto/Miniprogramm für eine Drittanbieterplattform

<?php
/*
*    微信第三方平臺授權(quán)流程
*/
namespace app\home\controller;
class Weixin extends Common
{
    private $appid = &#39;wx3e******165c&#39;;            //第三方平臺應(yīng)用appid
    private $appsecret = &#39;13e**********d039&#39;;     //第三方平臺應(yīng)用appsecret
    private $token = &#39;ePF58******Q2Ae&#39;;           //第三方平臺應(yīng)用token(消息校驗Token)
    private $encodingAesKey = &#39;bzH***FCamD&#39;;      //第三方平臺應(yīng)用Key(消息加解密Key)
    private $component_ticket= &#39;ticket@**xv-g&#39;;   //微信后臺推送的ticket,用于獲取第三方平臺接口調(diào)用憑據(jù)
    
    /*
    * 掃碼授權(quán),注意此URL必須放置在頁面當(dāng)中用戶點擊進(jìn)行跳轉(zhuǎn),不能通過程序跳轉(zhuǎn),否則將出現(xiàn)“請確認(rèn)授權(quán)入口頁所在域名,與授權(quán)后回調(diào)頁所在域名相同....”錯誤
    * @params string $redirect_uri : 掃碼成功后的回調(diào)地址
    * @params int $auth_type : 授權(quán)類型,1公眾號,2小程序,3公眾號/小程序同時展現(xiàn)。不傳參數(shù)默認(rèn)都展示    
    */
    public function startAuth($redirect_uri,$auth_type = 3)
    {
        $url = "https://mp.weixin.qq.com/cgi-bin/componentloginpage?component_appid=".$this->appid."&pre_auth_code=".$this->get_pre_auth_code()."&redirect_uri=".urlencode($redirect_uri)."&auth_type=".$auth_type;
        return $url;
    }
    
    /*
    * 獲取第三方平臺access_token
    * 注意,此值應(yīng)保存,代碼這里沒保存
    */
    private function get_component_access_token()
    {
        $url = "https://api.weixin.qq.com/cgi-bin/component/api_component_token";
        $data = &#39;{
            "component_appid":"&#39;.$this->appid.&#39;" ,
            "component_appsecret": "&#39;.$this->appsecret.&#39;",
            "component_verify_ticket": "&#39;.$this->component_ticket.&#39;"
        }&#39;;
        $ret = json_decode($this->https_post($url,$data));
        if($ret->errcode == 0) {
            return $ret->component_access_token;
        } else {
            return $ret->errcode;
        }
    }
    /*
    *  第三方平臺方獲取預(yù)授權(quán)碼pre_auth_code
    */
    private function get_pre_auth_code()
    {
        $url = "https://api.weixin.qq.com/cgi-bin/component/api_create_preauthcode?component_access_token=".$this->get_component_access_token();
        $data = &#39;{"component_appid":"&#39;.$this->appid.&#39;"}&#39;;
        $ret = json_decode($this->https_post($url,$data));
        if($ret->errcode == 0) {
            return $ret->pre_auth_code;
        } else {
            return $ret->errcode;
        }
    }
    
    /*
    * 發(fā)起POST網(wǎng)絡(luò)提交
    * @params string $url : 網(wǎng)絡(luò)地址
    * @params json $data : 發(fā)送的json格式數(shù)據(jù)
    */
    private function https_post($url,$data)
    {
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        if (!empty($data)){
            curl_setopt($curl, CURLOPT_POST, 1);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        }
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        $output = curl_exec($curl);
        curl_close($curl);
        return $output;
    }
     /*
    * 發(fā)起GET網(wǎng)絡(luò)提交
    * @params string $url : 網(wǎng)絡(luò)地址
    */
    private function https_get($url)
    {
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); 
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); 
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); 
        curl_setopt($curl, CURLOPT_HEADER, FALSE) ; 
        curl_setopt($curl, CURLOPT_TIMEOUT,60);
        if (curl_errno($curl)) {
            return &#39;Errno&#39;.curl_error($curl);
        }
        else{$result=curl_exec($curl);}
        curl_close($curl);
        return $result;
    }
}
<?php
/*
*    接收微信官方推送的ticket值以及取消授權(quán)等操作
*/
namespace app\home\controller;
use think\Db;
class Openoauth extends Common
{
    private $appid = &#39;wx3e******165c&#39;;            //第三方平臺應(yīng)用appid
    private $appsecret = &#39;13e**********d039&#39;;     //第三方平臺應(yīng)用appsecret
    private $token = &#39;ePF58******Q2Ae&#39;;           //第三方平臺應(yīng)用token(消息校驗Token)
    private $encodingAesKey = &#39;bzH***FCamD&#39;;      //第三方平臺應(yīng)用Key(消息加解密Key)
    private $component_ticket= &#39;ticket@**xv-g&#39;;   //微信后臺推送的ticket,用于獲取第三方平臺接口調(diào)用憑據(jù)
    /*
    *    接收微信官方推送的消息(每10分鐘1次)
    *    這里需要引入微信官方提供的加解密碼示例包
    *    官方文檔:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419318479&token=&lang=zh_CN
    *    示例包下載:https://wximg.gtimg.com/shake_tv/mpwiki/cryptoDemo.zip
    */
    public function index()
    {
        $encryptMsg = file_get_contents("php://input");
        $xml_tree = new \DOMDocument();
        $xml_tree->loadXML($encryptMsg);
        $xml_array = $xml_tree->getElementsByTagName("Encrypt");
        $encrypt = $xml_array->item(0)->nodeValue;
        require_once(&#39;wxBizMsgCrypt.php&#39;);
        $Prpcrypt = new \Prpcrypt($this->encodingAesKey);
        $postData = $Prpcrypt->decrypt($encrypt, $this->appid);
        if ($postData[0] != 0) {
            return $postData[0];
        } else {
            $msg = $postData[1];
            $xml = new \DOMDocument();
            $xml->loadXML($msg);
            $array_a = $xml->getElementsByTagName("InfoType");
            $infoType = $array_a->item(0)->nodeValue;
            if ($infoType == "unauthorized") {
                //取消公眾號/小程序授權(quán)
                $array_b = $xml->getElementsByTagName("AuthorizerAppid");
                $AuthorizerAppid = $array_b->item(0)->nodeValue;    //公眾號/小程序appid
                $where = array("type" => 1, "appid" => $AuthorizerAppid);
                $save = array("authorizer_access_token" => "", "authorizer_refresh_token" => "", "authorizer_expires" => 0);
                Db::name("wxuser")->where($where)->update($save);   //公眾號取消授權(quán)
                Db::name("wxminiprograms")->where(&#39;authorizer_appid&#39;,$AuthorizerAppid)->update($save);   //小程序取消授權(quán)
            } else if ($infoType == "component_verify_ticket") {
                //微信官方推送的ticket值
                $array_e = $xml->getElementsByTagName("ComponentVerifyTicket");
                $component_verify_ticket = $array_e->item(0)->nodeValue;
                if (Db::name("weixin_account")->where(array("type" => 1))->update(array("component_verify_ticket" => $component_verify_ticket, "date_time" => time()))) {
                    $this->updateAccessToken($component_verify_ticket);
                    echo "success";
                }
            }
        }
    }
    
    /*
     * 更新component_access_token
     * @params string $component_verify_ticket
     * */
    private function updateAccessToken($component_verify_ticket)
    {
        $weixin_account = Db::name(&#39;weixin_account&#39;)->where([&#39;type&#39;=>1])->field(&#39;id,appId,appSecret,component_access_token,token_expires&#39;)->find();
        if($weixin_account[&#39;token_expires&#39;] <= time() ) {
            $apiUrl = &#39;https://api.weixin.qq.com/cgi-bin/component/api_component_token&#39;;
            $data = &#39;{"component_appid":"&#39;.$weixin_account[&#39;appId&#39;].&#39;" ,"component_appsecret": "&#39;.$weixin_account[&#39;appSecret&#39;].&#39;","component_verify_ticket": "&#39;.$component_verify_ticket.&#39;"}&#39;;
            $json = json_decode(_request($apiUrl,$data));
            if(isset($json->component_access_token)) {
                Db::name(&#39;weixin_account&#39;)->where([&#39;id&#39;=>$weixin_account[&#39;id&#39;]])->update([&#39;component_access_token&#39;=>$json->component_access_token,&#39;token_expires&#39;=>time()+7200]);
            }
        }
    }
}
<?php
/*
*    代小程序?qū)崿F(xiàn)業(yè)務(wù)
*/
namespace app\home\model;
use think\Model;
use think\Db;
use think\Cache;
class Miniprogram extends Model
{
    private $thirdAppId;        //開放平臺appid
    private $encodingAesKey;    //開放平臺encodingAesKey
    private $thirdToken;        //開放平臺token
    private $thirdAccessToken;  //開放平臺access_token

    private $authorizer_appid;
    private  $authorizer_access_token;
    private  $authorizer_refresh_token;

    public function __construct($appid)
    {
        $weixin_account = Db::name(&#39;weixin_account&#39;)->where([&#39;type&#39; => 1])->field(&#39;token,encodingAesKey,appId,component_access_token&#39;)->find();
        if ($weixin_account) {
            $this->thirdAppId = $weixin_account[&#39;appId&#39;];
            $this->encodingAesKey = $weixin_account[&#39;encodingAesKey&#39;];
            $this->thirdToken = $weixin_account[&#39;token&#39;];
            $this->thirdAccessToken = $weixin_account[&#39;component_access_token&#39;];

            $miniprogram = Db::name(&#39;wxminiprograms&#39;)->where(&#39;authorizer_appid&#39;,$appid)
                ->field(&#39;authorizer_access_token,authorizer_refresh_token,authorizer_expires&#39;)->find();
            if($miniprogram){
                $this->authorizer_appid = $appid;
                if(time() > $miniprogram[&#39;authorizer_expires&#39;]){
                    $miniapp = $this->update_authorizer_access_token($appid,$miniprogram[&#39;authorizer_refresh_token&#39;]);
                    if($miniapp) {
                        $this->authorizer_access_token = $miniapp->authorizer_access_token;
                        $this->authorizer_refresh_token = $miniapp->authorizer_refresh_token;
                    } else {
                        $this->errorLog("更新小程序access_token失敗,appid:".$this->authorizer_appid,&#39;&#39;);
                        exit;
                    }
                } else {
                    $this->authorizer_access_token = $miniprogram[&#39;authorizer_access_token&#39;];
                    $this->authorizer_refresh_token = $miniprogram[&#39;authorizer_refresh_token&#39;];
                }

            } else {
                $this->errorLog("小程序不存在,appid:".$this->authorizer_appid,&#39;&#39;);
                exit;
            }
        } else {
            $this->errorLog("請增加微信第三方公眾號平臺賬戶信息",&#39;&#39;);
            exit;
        }
    }

    /*
     * 設(shè)置小程序服務(wù)器地址,無需加https前綴,但域名必須可以通過https訪問
     * @params string / array $domains : 域名地址。只接收一維數(shù)組。
     * */
    public  function setServerDomain($domain = &#39;test.moh.cc&#39;)
    {
        $url = "https://api.weixin.qq.com/wxa/modify_domain?access_token=".$this->authorizer_access_token;
        if(is_array($domain)) {
            $https = &#39;&#39;; $wss = &#39;&#39;;
            foreach ($domain as $key => $value) {
                $https .= &#39;"https://&#39;.$value.&#39;",&#39;;
                $wss .= &#39;"wss://&#39;.$value.&#39;",&#39;;
            }
            $https = rtrim($https,&#39;,&#39;);
            $wss = rtrim($wss,&#39;,&#39;);
            $data = &#39;{
                "action":"add",
                "requestdomain":[&#39;.$https.&#39;],
                "wsrequestdomain":[&#39;.$wss.&#39;],
                "uploaddomain":[&#39;.$https.&#39;],
                "downloaddomain":[&#39;.$https.&#39;]
            }&#39;;
        } else {
            $data = &#39;{
                "action":"add",
                "requestdomain":"https://&#39;.$domain.&#39;",
                "wsrequestdomain":"wss://&#39;.$domain.&#39;",
                "uploaddomain":"https://&#39;.$domain.&#39;",
                "downloaddomain":"https://&#39;.$domain.&#39;"
            }&#39;;
        }
        $ret = json_decode(https_post($url,$data));
        if($ret->errcode == 0) {
            return true;
        } else {
            $this->errorLog("設(shè)置小程序服務(wù)器地址失敗,appid:".$this->authorizer_appid,$ret);
            return false;
        }
    }
    /*
     * 設(shè)置小程序業(yè)務(wù)域名,無需加https前綴,但域名必須可以通過https訪問
     * @params string / array $domains : 域名地址。只接收一維數(shù)組。
     * */
    public function setBusinessDomain($domain = &#39;test.moh.cc&#39;)
    {
        $url = "https://api.weixin.qq.com/wxa/setwebviewdomain?access_token=".$this->authorizer_access_token;
        if(is_array($domain)) {
            $https = &#39;&#39;;
            foreach ($domain as $key => $value) {
                $https .= &#39;"https://&#39;.$value.&#39;",&#39;;
            }
            $https = rtrim($https,&#39;,&#39;);
            $data = &#39;{
                "action":"add",
                "webviewdomain":[&#39;.$https.&#39;]
            }&#39;;
        } else {
            $data = &#39;{
                "action":"add",
                "webviewdomain":"https://&#39;.$domain.&#39;"
            }&#39;;
        }

        $ret = json_decode(https_post($url,$data));
        if($ret->errcode == 0) {
            return true;
        } else {
            $this->errorLog("設(shè)置小程序業(yè)務(wù)域名失敗,appid:".$this->authorizer_appid,$ret);
            return false;
        }
    }
    /*
     * 成員管理,綁定小程序體驗者
     * @params string $wechatid : 體驗者的微信號
     * */
    public function bindMember($wechatid)
    {
        $url = "https://api.weixin.qq.com/wxa/bind_tester?access_token=".$this->authorizer_access_token;
        $data = &#39;{"wechatid":"&#39;.$wechatid.&#39;"}&#39;;
        $ret = json_decode(https_post($url,$data));
        if($ret->errcode == 0) {
            return true;
        } else {
            $this->errorLog("綁定小程序體驗者操作失敗,appid:".$this->authorizer_appid,$ret);
            return false;
        }
    }
    /*
     * 成員管理,解綁定小程序體驗者
     * @params string $wechatid : 體驗者的微信號
     * */
    public function unBindMember($wechatid)
    {
        $url = "https://api.weixin.qq.com/wxa/unbind_tester?access_token=".$this->authorizer_access_token;
        $data = &#39;{"wechatid":"&#39;.$wechatid.&#39;"}&#39;;
        $ret = json_decode(https_post($url,$data));
        if($ret->errcode == 0) {
            return true;
        } else {
            $this->errorLog("解綁定小程序體驗者操作失敗,appid:".$this->authorizer_appid,$ret);
            return false;
        }
    }
    /*
    * 成員管理,獲取小程序體驗者列表
    * */
    public function listMember()
    {
        $url = "https://api.weixin.qq.com/wxa/memberauth?access_token=".$this->authorizer_access_token;
        $data = &#39;{"action":"get_experiencer"}&#39;;
        $ret = json_decode(https_post($url,$data));
        if($ret->errcode == 0) {
            return $ret->members;
        } else {
            $this->errorLog("獲取小程序體驗者列表操作失敗,appid:".$this->authorizer_appid,$ret);
            return false;
        }
    }
    /*
     * 為授權(quán)的小程序帳號上傳小程序代碼
     * @params int $template_id : 模板ID
     * @params json $ext_json : 小程序配置文件,json格式
     * @params string $user_version : 代碼版本號
     * @params string $user_desc : 代碼描述
     * */
    public function uploadCode($template_id = 1, $user_version = &#39;v1.0.0&#39;, $user_desc = "魔盒CMS小程序模板庫")
    {
        $ext_json = json_encode(&#39;{"extEnable": true,"extAppid": "wx572****bfb","ext":{"appid": "&#39;.$this->authorizer_appid.&#39;"}}&#39;);
        $url = "https://api.weixin.qq.com/wxa/commit?access_token=".$this->authorizer_access_token;
        $data = &#39;{"template_id":"&#39;.$template_id.&#39;","ext_json":&#39;.$ext_json.&#39;,"user_version":"&#39;.$user_version.&#39;","user_desc":"&#39;.$user_desc.&#39;"}&#39;;
        $ret = json_decode(https_post($url,$data));
        if($ret->errcode == 0) {
            return true;
        } else {
            $this->errorLog("為授權(quán)的小程序帳號上傳小程序代碼操作失敗,appid:".$this->authorizer_appid,$ret);
            return false;
        }
    }
    /*
     * 獲取體驗小程序的體驗二維碼
     * @params string $path :   指定體驗版二維碼跳轉(zhuǎn)到某個具體頁面
     * */
    public function getExpVersion($path = &#39;&#39;)
    {
        if($path){
            $url = "https://api.weixin.qq.com/wxa/get_qrcode?access_token=".$this->authorizer_access_token."&path=".urlencode($path);
        } else {
            $url = "https://api.weixin.qq.com/wxa/get_qrcode?access_token=".$this->authorizer_access_token;
        }
        $ret = json_decode(https_get($url));
        if($ret->errcode) {
            $this->errorLog("獲取體驗小程序的體驗二維碼操作失敗,appid:".$this->authorizer_appid,$ret);
            return false;
        } else {
            return $url;
        }
    }
    /*
     * 提交審核
     * @params string $tag : 小程序標(biāo)簽,多個標(biāo)簽以空格分開
     * @params strint $title : 小程序頁面標(biāo)題,長度不超過32
     * */
    public function submitReview($tag = "魔盒CMS 微信投票 微網(wǎng)站 微信商城" ,$title = "魔盒CMS微信公眾號營銷小程序開發(fā)")
    {
        $first_class = &#39;&#39;;$second_class = &#39;&#39;;$first_id = 0;$second_id = 0;
        $address = "pages/index/index";
        $category = $this->getCategory();
        if(!empty($category)) {
            $first_class = $category[0]->first_class ? $category[0]->first_class : &#39;&#39; ;
            $second_class = $category[0]->second_class ? $category[0]->second_class : &#39;&#39;;
            $first_id = $category[0]->first_id ? $category[0]->first_id : 0;
            $second_id = $category[0]->second_id ? $category[0]->second_id : 0;
        }
        $getpage = $this->getPage();
        if(!empty($getpage) && isset($getpage[0])) {
            $address = $getpage[0];
        }
        $url = "https://api.weixin.qq.com/wxa/submit_audit?access_token=".$this->authorizer_access_token;
        $data = &#39;{
                "item_list":[{
                    "address":"&#39;.$address.&#39;",
                    "tag":"&#39;.$tag.&#39;",
                    "title":"&#39;.$title.&#39;",
                    "first_class":"&#39;.$first_class.&#39;",
                    "second_class":"&#39;.$second_class.&#39;",
                    "first_id":"&#39;.$first_id.&#39;",
                    "second_id":"&#39;.$second_id.&#39;"
                }]
            }&#39;;
        $ret = json_decode(https_post($url,$data));
        if($ret->errcode == 0) {
            Db::name(&#39;wxminiprogram_audit&#39;)->insert([
                &#39;appid&#39;=>$this->authorizer_appid,
                &#39;auditid&#39;=>$ret->auditid,
                &#39;create_time&#39;=>date(&#39;Y-m-d H:i:s&#39;)
            ]);
            return true;
        } else {
            $this->errorLog("小程序提交審核操作失敗,appid:".$this->authorizer_appid,$ret);
            return false;
        }
    }
    /*
     * 小程序?qū)徍顺坊?     * 單個帳號每天審核撤回次數(shù)最多不超過1次,一個月不超過10次。
     * */
    public function unDoCodeAudit()
    {
        $url = "https://api.weixin.qq.com/wxa/undocodeaudit?access_token=".$this->authorizer_access_token;
        $ret = json_decode(https_get($url));
        if($ret->errcode == 0) {
            return true;
        } else {
            $this->errorLog("小程序?qū)徍顺坊夭僮魇?,appid:".$this->authorizer_appid,$ret);
            return false;
        }
    }
    /*
     * 查詢指定版本的審核狀態(tài)
     * @params string $auditid : 提交審核時獲得的審核id
     * */
    public function getAuditStatus($auditid)
    {
        $url = "https://api.weixin.qq.com/wxa/get_auditstatus?access_token=".$this->authorizer_access_token;
        $data = &#39;{"auditid":"&#39;.$auditid.&#39;"}&#39;;
        $ret = json_decode(https_post($url,$data));
        if($ret->errcode == 0) {
            $reason = $ret->reason ? $ret->reason : &#39;&#39;;
            Db::name(&#39;wxminiprogram_audit&#39;)->where([&#39;appid&#39;=>$this->authorizer_appid,&#39;auditid&#39;=>$auditid])->update([
                &#39;status&#39;=>$ret->status,
                &#39;reason&#39;=>$reason
            ]);
            return true;
        } else {
            $this->errorLog("查詢指定版本的審核狀態(tài)操作失敗,appid:".$this->authorizer_appid,$ret);
            return false;
        }
    }
    /*
     * 查詢最新一次提交的審核狀態(tài)
     * */
    public function getLastAudit()
    {
        $url = "https://api.weixin.qq.com/wxa/get_latest_auditstatus?access_token=".$this->authorizer_access_token;
        $ret = json_decode(https_get($url));
        if($ret->errcode == 0) {
            $reason = $ret->reason ? $ret->reason : &#39;&#39;;
            Db::name(&#39;wxminiprogram_audit&#39;)->where([&#39;appid&#39;=>$this->authorizer_appid,&#39;auditid&#39;=>$ret->auditid])->update([
                &#39;status&#39;=>$ret->status,
                &#39;reason&#39;=>$reason
            ]);
            return $ret->auditid;
        } else {
            $this->errorLog("查詢最新一次提交的審核狀態(tài)操作失敗,appid:".$this->authorizer_appid,$ret);
            return false;
        }
    }
    /*
     * 發(fā)布已通過審核的小程序
     * */
    public function release()
    {
        $url = "https://api.weixin.qq.com/wxa/release?access_token=".$this->authorizer_access_token;
        $data = &#39;{}&#39;;
        $ret = json_decode(https_post($url,$data));
        if($ret->errcode == 0) {
            return true;
        } else {
            $this->errorLog("發(fā)布已通過審核的小程序操作失敗,appid:".$this->authorizer_appid,$ret);
            return $ret->errcode;
        }
    }
    /*
     * 獲取授權(quán)小程序帳號的可選類目
     * */
    private function getCategory()
    {
        $url = "https://api.weixin.qq.com/wxa/get_category?access_token=".$this->authorizer_access_token;
        $ret = json_decode(https_get($url));
        if($ret->errcode == 0) {
            return $ret->category_list;
        } else {
            $this->errorLog("獲取授權(quán)小程序帳號的可選類目操作失敗,appid:".$this->authorizer_appid,$ret);
            return false;
        }
    }
    /*
     * 獲取小程序的第三方提交代碼的頁面配置
     * */
    private function getPage()
    {
        $url = "https://api.weixin.qq.com/wxa/get_page?access_token=".$this->authorizer_access_token;
        $ret = json_decode(https_get($url));
        if($ret->errcode == 0) {
            return $ret->page_list;
        } else {
            $this->errorLog("獲取小程序的第三方提交代碼的頁面配置失敗,appid:".$this->authorizer_appid,$ret);
            return false;
        }
    }
    /*
    * 更新授權(quán)小程序的authorizer_access_token
    * @params string $appid : 小程序appid
    * @params string $refresh_token : 小程序authorizer_refresh_token
    * */
    private function update_authorizer_access_token($appid,$refresh_token)
    {
        $url = &#39;https://api.weixin.qq.com/cgi-bin/component/api_authorizer_token?component_access_token=&#39; . $this->thirdAccessToken;
        $data = &#39;{"component_appid":"&#39; . $this->thirdAppId . &#39;","authorizer_appid":"&#39; . $appid . &#39;","authorizer_refresh_token":"&#39; . $refresh_token . &#39;"}&#39;;
        $ret = json_decode(https_post($url, $data));
        if (isset($ret->authorizer_access_token)) {
            Db::name(&#39;wxminiprograms&#39;)->where([&#39;authorizer_appid&#39; => $appid])->update([&#39;authorizer_access_token&#39; => $ret->authorizer_access_token, &#39;authorizer_expires&#39; => (time() + 7200), &#39;authorizer_refresh_token&#39; => $ret->authorizer_refresh_token]);
            return $ret;
        } else {
            $this->errorLog("更新授權(quán)小程序的authorizer_access_token操作失敗,appid:".$appid,$ret);
            return null;
        }
    }

    private function errorLog($msg,$ret)
    {
        file_put_contents(ROOT_PATH . &#39;runtime/error/miniprogram.log&#39;, "[" . date(&#39;Y-m-d H:i:s&#39;) . "] ".$msg."," .json_encode($ret).PHP_EOL, FILE_APPEND);
    }
}
<?php
//代小程序?qū)崿F(xiàn)業(yè)務(wù)示例包
namespace app\user\controller;
use app\home\model\Miniprogram;
use think\Db;
class Wxminiprogram extends Pub
{
    public $appid = &#39;wx57****1bfb&#39;;    //需要實現(xiàn)業(yè)務(wù)小程序appid
    public function index()
    {
        return view();
    }
    public function doAction()
    {
        if(request()->isPost()) {
            $action = input(&#39;action&#39;);
            $mini = new Miniprogram($this->appid);
            if($action == &#39;auth&#39;) {
                //小程序授權(quán)
                echo &#39;<script>alert("已授權(quán)");history.back();</script>&#39;;
            } elseif($action == &#39;setServerDomain&#39;) {
                //設(shè)置小程序服務(wù)器域名地址
                if($mini->setServerDomain()){
                    echo &#39;<script>alert("設(shè)置小程序服務(wù)器域名操作成功");history.back();</script>&#39;;
                } else {
                    echo &#39;<script>alert("設(shè)置小程序服務(wù)器域名操作失敗或已設(shè)置,請查看日志");history.back();</script>&#39;;
                }
            }  elseif($action == &#39;setBusinessDomain&#39;) {
                //設(shè)置業(yè)務(wù)域名
                if($mini->setBusinessDomain()){
                    echo &#39;<script>alert("設(shè)置小程序業(yè)務(wù)域名操作成功");history.back();</script>&#39;;
                } else {
                    echo &#39;<script>alert("設(shè)置小程序業(yè)務(wù)域名操作失敗或已設(shè)置,請查看日志");history.back();</script>&#39;;
                }
            }  elseif($action == &#39;bind&#39;) {
                //綁定小程序體驗者
                $wechatid = input(&#39;wechatid&#39;);
                if($wechatid) {
                    if($mini->bindMember($wechatid)){
                        echo &#39;<script>alert("綁定小程序體驗者操作成功");history.back();</script>&#39;;
                    } else {
                        echo &#39;<script>alert("綁定小程序體驗者操作失敗,請查看日志");history.back();</script>&#39;;
                    }
                } else {
                    echo &#39;<script>alert("請輸入微信號");history.back();</script>&#39;;
                }

            }  elseif($action == &#39;uploadCode&#39;) {
                //上傳小程序代碼
                if($mini->uploadCode(2)){
                    echo &#39;<script>alert("上傳小程序代碼操作成功");history.back();</script>&#39;;
                } else {
                    echo &#39;<script>alert("上傳小程序代碼操作失敗,請查看日志");history.back();</script>&#39;;
                }
            }  elseif($action == &#39;getExpVersion&#39;) {
                //獲取體驗小程序的體驗二維碼
                $qrcode = $mini->getExpVersion();
                if($qrcode){
                    echo &#39;<script>window.location.href="&#39;.$qrcode.&#39;";</script>&#39;;
                } else {
                    echo &#39;<script>alert("獲取體驗小程序的體驗二維碼操作失敗");history.back();</script>&#39;;
                }
            } elseif($action == &#39;review&#39;) {
                //提交審核
                $auditid = Db::name(&#39;wxminiprogram_audit&#39;)->where([&#39;appid&#39;=>$this->appid,&#39;status&#39;=>[&#39;neq&#39;,0]])->order(&#39;create_time&#39;,&#39;desc&#39;)->value(&#39;auditid&#39;);
                if($auditid){
                    echo &#39;<script>alert("有待處理的版本,請先處理該版本相關(guān)事項再提交新的審核。審核ID:&#39;.$auditid.&#39;");history.back();</script>&#39;;
                } else {
                    if($mini->submitReview()){
                        echo &#39;<script>alert("小程序提交審核操作成功");history.back();</script>&#39;;
                    } else {
                        echo &#39;<script>alert("小程序提交審核操作失敗,請查看日志");history.back();</script>&#39;;
                    }
                }
            } elseif($action == &#39;getAudit&#39;) {
                //查詢指定版本的審核狀態(tài)
                $auditid = input(&#39;auditid&#39;);
                if($auditid) {
                    if($mini->getAuditStatus($auditid)){
                        $audit = Db::name(&#39;wxminiprogram_audit&#39;)->where([&#39;appid&#39;=>$this->appid,&#39;auditid&#39;=>$auditid])->field(&#39;status,reason&#39;)->find();
                        if($audit[&#39;status&#39;] == 0) {
                            echo &#39;<script>alert("該版本審核已通過");history.back();</script>&#39;;
                        } elseif($audit[&#39;status&#39;] == 1) {
                            echo &#39;<script>alert("該版本審核失敗,原因:&#39;.$audit[&#39;reason&#39;].&#39;");history.back();</script>&#39;;
                        } elseif($audit[&#39;status&#39;] == 2) {
                            echo &#39;<script>alert("該版本小程序正在審核中......");history.back();</script>&#39;;
                        } else {
                            echo &#39;<script>alert("未知狀態(tài)......");history.back();</script>&#39;;
                        }
                    } else {
                        echo &#39;<script>alert("查詢指定版本的審核狀態(tài)操作失敗,請查看日志");history.back();</script>&#39;;
                    }
                } else {
                    echo &#39;<script>alert("請輸入要查詢的審核ID");history.back();</script>&#39;;
                }
            } elseif($action == &#39;lastAudit&#39;) {
                //查詢最新一次提交的審核狀態(tài)
                $auditid = $mini->getLastAudit();
                if($auditid){
                    $audit = Db::name(&#39;wxminiprogram_audit&#39;)->where([&#39;appid&#39;=>$this->appid,&#39;auditid&#39;=>$auditid])->field(&#39;status,reason&#39;)->find();
                    if($audit[&#39;status&#39;] == 0) {
                        echo &#39;<script>alert("審核已通過");history.back();</script>&#39;;
                    } elseif($audit[&#39;status&#39;] == 1) {
                        echo &#39;<script>alert("審核失敗,原因:&#39;.$audit[&#39;reason&#39;].&#39;");history.back();</script>&#39;;
                    } elseif($audit[&#39;status&#39;] == 2) {
                        echo &#39;<script>alert("小程序正在審核中......");history.back();</script>&#39;;
                    } else {
                        echo &#39;<script>alert("未知狀態(tài)......");history.back();</script>&#39;;
                    }
                }else {
                    echo &#39;<script>alert("查詢最新一次提交的審核狀態(tài)操作失敗,請查看日志");history.back();</script>&#39;;
                }
            } elseif($action == &#39;release&#39;) {
                //發(fā)布已通過審核的小程序
                $auditid = Db::name(&#39;wxminiprogram_audit&#39;)->where([&#39;appid&#39;=>$this->appid,&#39;status&#39;=>[&#39;neq&#39;,0]])->order(&#39;create_time&#39;,&#39;desc&#39;)->value(&#39;auditid&#39;);
                if($auditid){
                    echo &#39;<script>alert("有待處理的版本,請先處理該版本相關(guān)事項再發(fā)布版本。審核ID:&#39;.$auditid.&#39;");history.back();</script>&#39;;
                } else {
                    $errcode = $mini->release();
                    if($errcode){
                        echo &#39;<script>alert("已發(fā)版");history.back();</script>&#39;;
                    } else {
                        echo &#39;<script>alert("發(fā)版失敗,錯誤代碼:&#39;.$errcode.&#39;");history.back();</script>&#39;;
                    }
                }
            }
        }
    }
}

wxminiprograms-Datentabelle, in der die grundlegenden Informationen autorisierter Miniprogramme und autorisierungsbezogener Informationen (authorizer_access_token/authorizer_refresh_token) gespeichert werden -Programme werden im Wesentlichen durch diese beiden Werte realisiert??

-- Adminer 4.6.2 MySQL dump

SET NAMES utf8;
SET time_zone = &#39;+00:00&#39;;
SET foreign_key_checks = 0;
SET sql_mode = &#39;NO_AUTO_VALUE_ON_ZERO&#39;;

DROP TABLE IF EXISTS `wxminiprograms`;
CREATE TABLE `wxminiprograms` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT &#39;ID&#39;,
  `uid` int(10) unsigned NOT NULL COMMENT &#39;用戶ID&#39;,
  `nick_name` varchar(45) DEFAULT NULL COMMENT &#39;微信小程序名稱&#39;,
  `alias` varchar(45) DEFAULT NULL COMMENT &#39;別名&#39;,
  `token` varchar(45) DEFAULT NULL COMMENT &#39;平臺生成的token值&#39;,
  `head_img` varchar(255) DEFAULT NULL COMMENT &#39;微信小程序頭像&#39;,
  `verify_type_info` tinyint(1) DEFAULT NULL COMMENT &#39;授權(quán)方認(rèn)證類型,-1代表未認(rèn)證,0代表微信認(rèn)證&#39;,
  `is_show` tinyint(1) DEFAULT &#39;0&#39; COMMENT &#39;是否顯示,0顯示,1隱藏&#39;,
  `user_name` varchar(45) DEFAULT NULL COMMENT &#39;原始ID&#39;,
  `qrcode_url` varchar(255) DEFAULT NULL COMMENT &#39;二維碼圖片的URL&#39;,
  `business_info` varchar(255) DEFAULT NULL COMMENT &#39;json格式。用以了解以下功能的開通狀況(0代表未開通,1代表已開通): open_store:是否開通微信門店功能 open_scan:是否開通微信掃商品功能 open_pay:是否開通微信支付功能 open_card:是否開通微信卡券功能 open_shake:是否開通微信搖一搖功能&#39;,
  `idc` int(10) unsigned DEFAULT NULL COMMENT &#39;idc&#39;,
  `principal_name` varchar(45) DEFAULT NULL COMMENT &#39;小程序的主體名稱&#39;,
  `signature` varchar(255) DEFAULT NULL COMMENT &#39;帳號介紹&#39;,
  `miniprograminfo` varchar(255) DEFAULT NULL COMMENT &#39;json格式。判斷是否為小程序類型授權(quán),包含network小程序已設(shè)置的各個服務(wù)器域名&#39;,
  `func_info` longtext COMMENT &#39;json格式。權(quán)限集列表,ID為17到19時分別代表: 17.帳號管理權(quán)限 18.開發(fā)管理權(quán)限 19.客服消息管理權(quán)限 請注意: 1)該字段的返回不會考慮小程序是否具備該權(quán)限集的權(quán)限(因為可能部分具備)。&#39;,
  `authorizer_appid` varchar(45) DEFAULT NULL COMMENT &#39;小程序appid&#39;,
  `authorizer_access_token` varchar(255) DEFAULT NULL COMMENT &#39;授權(quán)方接口調(diào)用憑據(jù)(在授權(quán)的公眾號或小程序具備API權(quán)限時,才有此返回值),也簡稱為令牌&#39;,
  `authorizer_expires` int(10) unsigned DEFAULT NULL COMMENT &#39;refresh有效期&#39;,
  `authorizer_refresh_token` varchar(255) DEFAULT NULL COMMENT &#39;接口調(diào)用憑據(jù)刷新令牌&#39;,
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT &#39;授權(quán)時間&#39;,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=&#39;微信小程序授權(quán)列表&#39;;


-- 2018-07-25 09:32:49

wxminiprogram_audit-Datentabelle, speichern Sie das zur überprüfung eingereichte kleine Programm

-- Adminer 4.6.2 MySQL dump

SET NAMES utf8;
SET time_zone = &#39;+00:00&#39;;
SET foreign_key_checks = 0;
SET sql_mode = &#39;NO_AUTO_VALUE_ON_ZERO&#39;;

DROP TABLE IF EXISTS `wxminiprogram_audit`;
CREATE TABLE `wxminiprogram_audit` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT &#39;ID&#39;,
  `appid` varchar(45) NOT NULL COMMENT &#39;小程序appid&#39;,
  `auditid` varchar(45) NOT NULL COMMENT &#39;審核編號&#39;,
  `status` tinyint(1) unsigned NOT NULL DEFAULT &#39;3&#39; COMMENT &#39;審核狀態(tài),其中0為審核成功,1為審核失敗,2為審核中,3已提交審核&#39;,
  `reason` varchar(255) DEFAULT NULL COMMENT &#39;當(dāng)status=1,審核被拒絕時,返回的拒絕原因&#39;,
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT &#39;提交審核時間&#39;,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=&#39;微信小程序提交審核的小程序&#39;;


-- 2018-07-25 09:35:07

Endlich wurde die Sache gekl?rt, indem ich die Drittanbieterplattform WeChat nutzte, um Miniprogramm-Gesch?fte zu autorisieren

Endlich wurde die Sache gekl?rt, indem ich die Drittanbieterplattform WeChat nutzte, um Miniprogramm-Gesch?fte zu autorisierenx

Verwandte Empfehlungen:

Video-Tutorial zur Entwicklung der WeChat-Plattform für ?ffentliche Konten

Dokumentation für Entwickler der ?ffentlichen WeChat-Plattform

Video-Tutorial zur Entwicklung der ?ffentlichen WeChat-Plattform von PHP

Das obige ist der detaillierte Inhalt vonEndlich wurde die Sache gekl?rt, indem ich die Drittanbieterplattform WeChat nutzte, um Miniprogramm-Gesch?fte zu autorisieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erkl?rung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Hei?e KI -Werkzeuge

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?e Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Hei?e Themen

PHP-Tutorial
1502
276
Jenseits des Lampenstacks: Rolle von PHP in der modernen Enterprise -Architektur Jenseits des Lampenstacks: Rolle von PHP in der modernen Enterprise -Architektur Jul 27, 2025 am 04:31 AM

PhpisstillrelevantinMoDernEnterpriseEnvironments.1.ModerPhp (7.xand8.x) Angebote, strenge, jitkompilation und moderne Syntax, machte ma?geschneiderte Foreiglableforlarge-ScaleApplikationen

Objektrelationszuordnung (ORM) Leistungsstimmen in PHP Objektrelationszuordnung (ORM) Leistungsstimmen in PHP Jul 29, 2025 am 05:00 AM

Vermeiden Sie N 1 Abfrageprobleme, reduzieren Sie die Anzahl der Datenbankabfragen, indem Sie die zugeh?rigen Daten im Voraus laden. 2. W?hlen Sie nur die erforderlichen Felder aus, um das Laden vollst?ndiger Entit?ten zu vermeiden, um Speicher und Bandbreite zu sparen. 3.. Verwenden Sie Cache-Strategien vernünftigerweise, z. 4. Optimieren Sie den Lebenszyklus der Entit?t und rufen Sie Clear () regelm??ig an, um den Speicher freizugeben, um den Speicherüberlauf zu verhindern. 5. Stellen Sie sicher, dass der Datenbankindex die generierten SQL -Anweisungen existiert und analysiert, um ineffiziente Abfragen zu vermeiden. 6. Deaktivieren Sie die automatische ?nderungsverfolgung in Szenarien, in denen ?nderungen nicht erforderlich sind, und verwenden Sie Arrays oder Leichtgewichtsmodi, um die Leistung zu verbessern. Die korrekte Verwendung von ORM erfordert die Kombination der SQL -überwachung, -gespeicherung, der Stapelverarbeitung und der geeigneten Optimierung, um die Anwendungsleistung zu gew?hrleisten und gleichzeitig die Entwicklungseffizienz beizubehalten.

Aufbau belastbarer Mikrodienste mit PHP und Rabbitmq Aufbau belastbarer Mikrodienste mit PHP und Rabbitmq Jul 27, 2025 am 04:32 AM

Um einen flexiblen PHP -Microservice zu erstellen, müssen Sie Rabbitmq verwenden, um eine asynchrone Kommunikation zu erreichen. 1. Decken Sie den Dienst über Nachrichtenwarteschlangen ab, um Kaskadenfehler zu vermeiden. 2. Konfigurieren Sie persistente Warteschlangen, anhaltende Nachrichten, Freigabebest?tigung und manuelles ACK, um die Zuverl?ssigkeit zu gew?hrleisten. 3.. Verwenden Sie exponentielle Backoff -Wiederholung, TTL und Dead Letter -Warteschlangenverarbeitungsfehler; 4. Verwenden Sie Tools wie Supervisford, um Verbraucherprozesse zu schützen und Herzschlagmechanismen zu erm?glichen, um die Gesundheit der Service zu gew?hrleisten. und letztendlich die F?higkeit des Systems erkennen, kontinuierlich in Fehlern zu arbeiten.

Erstellen von produktionsbereiten Docker-Umgebungen für PHP Erstellen von produktionsbereiten Docker-Umgebungen für PHP Jul 27, 2025 am 04:32 AM

Die Verwendung des richtigen PHP-Basisbildes und die Konfiguration einer sicheren, leistungsoptimierten Docker-Umgebung ist der Schlüssel zum Erreichen der Produktion. 1. W?hlen Sie PHP: 8,3-FPM-Alpine als Grundbild, um die Angriffsfl?che zu reduzieren und die Leistung zu verbessern. 2. Deaktivieren Sie gef?hrliche Funktionen über benutzerdefinierte Php.ini, deaktivieren Sie die Fehleranzeige und aktivieren Sie Opcache und JIT, um die Sicherheit und Leistung zu verbessern. 3.. Verwenden Sie Nginx als Reverse Proxy, um den Zugriff auf sensible Dateien einzuschr?nken und die PHP-Anforderungen korrekt an PHP-FPM weiterzuleiten. 4. Verwenden Sie mehrstufige Optimierungsbilder, um Entwicklungsabh?ngigkeiten zu entfernen, und richten Sie nicht Root-Benutzer auf, um Container auszuführen. 5. optionaler Aufsichtsbeh?rde zum Verwalten mehrerer Prozesse wie Cron; 6. überprüfen

Python Run Shell -Befehlsbeispiel Python Run Shell -Befehlsbeispiel Jul 26, 2025 am 07:50 AM

Verwenden Sie Subprozess.run (), um die Befehle von Shell sicher auszuführen und die Ausgabe zu erfassen. Es wird empfohlen, Parameter in Listen zu übergeben, um Einspritzrisiken zu vermeiden. 2. Wenn die Shell -Eigenschaften erforderlich sind, k?nnen Sie Shell = True einstellen, aber achten Sie auf die Befehlsinjektion. 3. verwenden subprocess.popen, um die Echtzeit-Ausgangsverarbeitung zu realisieren. 4. Setzen Sie check = true, um Ausnahmen zu werfen, wenn der Befehl fehlschl?gt. 5. Sie k?nnen direkt Ketten anrufen, um die Ausgabe in einem einfachen Szenario zu erhalten. Sie sollten Subprozess vorrangig machen. Die obigen Methoden überschreiben die Kernverwendung der Ausführung von Shell -Befehlen in Python.

VSCODE Settings.json Standort VSCODE Settings.json Standort Aug 01, 2025 am 06:12 AM

Die Datei "Settings.JSON" befindet sich auf dem Pfad auf Benutzerebene oder Arbeitsbereichsebene und wird verwendet, um die VSCODE-Einstellungen anzupassen. 1. Benutzer-Level-Pfad: Windows ist C: \ Benutzer \\ AppData \ Roaming \ Code \ User \ Settings.json, MacOS is /users//library/applicationsupport/code/user/settings.json, Linux is /home/.config/code/usser/setings.json; 2. Pfad auf Arbeitsbereichsebene: .VSCODE/Einstellungen im Projekt Root Directory

Die serverlose Revolution: Bereitstellung skalierbarer PHP -Anwendungen mit BREF Die serverlose Revolution: Bereitstellung skalierbarer PHP -Anwendungen mit BREF Jul 28, 2025 am 04:39 AM

Mit Bref erm?glicht es PHP-Entwicklern, skalierbare, kostengünstige Anwendungen zu erstellen, ohne Server zu verwalten. 1.Bref bringt Php nach AWSLambda, indem er eine optimierte PHP -Laufzeitschicht bereitstellt, Php8.3 und andere Versionen unterstützt und sich nahtlos in Frameworks wie Laravel und Symfony integriert. 2.. 3. Führen Sie den Befehl ServerlessDeploy aus, um die Bereitstellung abzuschlie?en, apiCateway automatisch zu konfigurieren und Zugriffs -URLs zu generieren. 4. Für Lambda -Beschr?nkungen bietet BREF L?sungen.

Ein tiefes Eintauchen in den Mechanismus für interne Müllsammlung von PHP Ein tiefes Eintauchen in den Mechanismus für interne Müllsammlung von PHP Jul 28, 2025 am 04:44 AM

Der Müllsammlung von PHP basiert auf der Referenzz?hlung, aber kreisf?rmige Referenzen müssen von einem periodischen kreisf?rmigen Müllsammler verarbeitet werden. 1. Die Referenzzahl gibt den Speicher sofort frei, wenn keine Referenz auf die Variable vorhanden ist. 2. Referenzreferenz bewirkt, dass Speicher nicht automatisch freigegeben werden kann, und es h?ngt davon ab, dass GC ihn erfasst und reinigt. 3.. GC wird ausgel?st, wenn das "m?gliche Wurzel" den Schwellenwert erreicht oder manuell gc_collect_cycles () aufruft; 4. Langzeit laufende PHP-Anwendungen sollten gc_status () überwachen und rechtzeitig gc_collect () aufrufen, um Speicherleckage zu vermeiden. 5. Zu den Best Practices geh?rt die Vermeidung von kreisf?rmigen Referenzen, die Verwendung von gc_disable () zur Optimierung der Leistungsschlüsselbereiche und Dereference -Objekte über die Clear () -Methode des ORM.

See all articles