PHP前端开发

终于整理出来了,用微信第三方平台授权小程序业务

百变鹏仔 9小时前 #前端问答
文章标签 第三方

本文章是自己编写的,用微信第三方平台开发实现小程序业务,代码很全,每一步都有详细介绍,供大家学习参考。

第一步:申请微信开放平台帐号并创建第三方平台

第二步:公众号/小程序授权给第三方平台

<?php /**    微信第三方平台授权流程*/namespace apphomecontroller;class Weixin extends Common{    private $appid = &#39;wx3e******165c&#39;;            //第三方平台应用appid    private $appsecret = &#39;13e**********d039&#39;;     //第三方平台应用appsecret    private $token = &#39;ePF58******Q2Ae&#39;;           //第三方平台应用token(消息校验Token)    private $encodingAesKey = &#39;bzH***FCamD&#39;;      //第三方平台应用Key(消息加解密Key)    private $component_ticket= &#39;ticket@**xv-g&#39;;   //微信后台推送的ticket,用于获取第三方平台接口调用凭据        /*    * 扫码授权,注意此URL必须放置在页面当中用户点击进行跳转,不能通过程序跳转,否则将出现“请确认授权入口页所在域名,与授权后回调页所在域名相同....”错误    * @params string $redirect_uri : 扫码成功后的回调地址    * @params int $auth_type : 授权类型,1公众号,2小程序,3公众号/小程序同时展现。不传参数默认都展示        */    public function startAuth($redirect_uri,$auth_type = 3)    {        $url = "https://mp.weixin.qq.com/cgi-bin/componentloginpage?component_appid=".$this->appid."&amp;pre_auth_code=".$this-&gt;get_pre_auth_code()."&amp;redirect_uri=".urlencode($redirect_uri)."&amp;auth_type=".$auth_type;        return $url;    }        /*    * 获取第三方平台access_token    * 注意,此值应保存,代码这里没保存    */    private function get_component_access_token()    {        $url = "https://api.weixin.qq.com/cgi-bin/component/api_component_token";        $data = '{            "component_appid":"'.$this-&gt;appid.'" ,            "component_appsecret": "'.$this-&gt;appsecret.'",            "component_verify_ticket": "'.$this-&gt;component_ticket.'"        }';        $ret = json_decode($this-&gt;https_post($url,$data));        if($ret-&gt;errcode == 0) {            return $ret-&gt;component_access_token;        } else {            return $ret-&gt;errcode;        }    }    /*    *  第三方平台方获取预授权码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-&gt;get_component_access_token();        $data = '{"component_appid":"'.$this-&gt;appid.'"}';        $ret = json_decode($this-&gt;https_post($url,$data));        if($ret-&gt;errcode == 0) {            return $ret-&gt;pre_auth_code;        } else {            return $ret-&gt;errcode;        }    }        /*    * 发起POST网络提交    * @params string $url : 网络地址    * @params json $data : 发送的json格式数据    */    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;    }     /*    * 发起GET网络提交    * @params string $url : 网络地址    */    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 'Errno'.curl_error($curl);        }        else{$result=curl_exec($curl);}        curl_close($curl);        return $result;    }}
<?php /**    接收微信官方推送的ticket值以及取消授权等操作*/namespace apphomecontroller;use thinkDb;class Openoauth extends Common{    private $appid = &#39;wx3e******165c&#39;;            //第三方平台应用appid    private $appsecret = &#39;13e**********d039&#39;;     //第三方平台应用appsecret    private $token = &#39;ePF58******Q2Ae&#39;;           //第三方平台应用token(消息校验Token)    private $encodingAesKey = &#39;bzH***FCamD&#39;;      //第三方平台应用Key(消息加解密Key)    private $component_ticket= &#39;ticket@**xv-g&#39;;   //微信后台推送的ticket,用于获取第三方平台接口调用凭据    /*    *    接收微信官方推送的消息(每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-&gt;getElementsByTagName("Encrypt");        $encrypt = $xml_array-&gt;item(0)-&gt;nodeValue;        require_once('wxBizMsgCrypt.php');        $Prpcrypt = new Prpcrypt($this-&gt;encodingAesKey);        $postData = $Prpcrypt-&gt;decrypt($encrypt, $this-&gt;appid);        if ($postData[0] != 0) {            return $postData[0];        } else {            $msg = $postData[1];            $xml = new DOMDocument();            $xml-&gt;loadXML($msg);            $array_a = $xml-&gt;getElementsByTagName("InfoType");            $infoType = $array_a-&gt;item(0)-&gt;nodeValue;            if ($infoType == "unauthorized") {                //取消公众号/小程序授权                $array_b = $xml-&gt;getElementsByTagName("AuthorizerAppid");                $AuthorizerAppid = $array_b-&gt;item(0)-&gt;nodeValue;    //公众号/小程序appid                $where = array("type" =&gt; 1, "appid" =&gt; $AuthorizerAppid);                $save = array("authorizer_access_token" =&gt; "", "authorizer_refresh_token" =&gt; "", "authorizer_expires" =&gt; 0);                Db::name("wxuser")-&gt;where($where)-&gt;update($save);   //公众号取消授权                Db::name("wxminiprograms")-&gt;where('authorizer_appid',$AuthorizerAppid)-&gt;update($save);   //小程序取消授权            } else if ($infoType == "component_verify_ticket") {                //微信官方推送的ticket值                $array_e = $xml-&gt;getElementsByTagName("ComponentVerifyTicket");                $component_verify_ticket = $array_e-&gt;item(0)-&gt;nodeValue;                if (Db::name("weixin_account")-&gt;where(array("type" =&gt; 1))-&gt;update(array("component_verify_ticket" =&gt; $component_verify_ticket, "date_time" =&gt; time()))) {                    $this-&gt;updateAccessToken($component_verify_ticket);                    echo "success";                }            }        }    }        /*     * 更新component_access_token     * @params string $component_verify_ticket     * */    private function updateAccessToken($component_verify_ticket)    {        $weixin_account = Db::name('weixin_account')-&gt;where(['type'=&gt;1])-&gt;field('id,appId,appSecret,component_access_token,token_expires')-&gt;find();        if($weixin_account['token_expires'] component_access_token)) {                Db::name('weixin_account')-&gt;where(['id'=&gt;$weixin_account['id']])-&gt;update(['component_access_token'=&gt;$json-&gt;component_access_token,'token_expires'=&gt;time()+7200]);            }        }    }}
<?php /**    代小程序实现业务*/namespace apphomemodel;use thinkModel;use thinkDb;use thinkCache;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(['type' =&gt; 1])-&gt;field('token,encodingAesKey,appId,component_access_token')-&gt;find();        if ($weixin_account) {            $this-&gt;thirdAppId = $weixin_account['appId'];            $this-&gt;encodingAesKey = $weixin_account['encodingAesKey'];            $this-&gt;thirdToken = $weixin_account['token'];            $this-&gt;thirdAccessToken = $weixin_account['component_access_token'];            $miniprogram = Db::name('wxminiprograms')-&gt;where('authorizer_appid',$appid)                -&gt;field('authorizer_access_token,authorizer_refresh_token,authorizer_expires')-&gt;find();            if($miniprogram){                $this-&gt;authorizer_appid = $appid;                if(time() &gt; $miniprogram['authorizer_expires']){                    $miniapp = $this-&gt;update_authorizer_access_token($appid,$miniprogram['authorizer_refresh_token']);                    if($miniapp) {                        $this-&gt;authorizer_access_token = $miniapp-&gt;authorizer_access_token;                        $this-&gt;authorizer_refresh_token = $miniapp-&gt;authorizer_refresh_token;                    } else {                        $this-&gt;errorLog("更新小程序access_token失败,appid:".$this-&gt;authorizer_appid,'');                        exit;                    }                } else {                    $this-&gt;authorizer_access_token = $miniprogram['authorizer_access_token'];                    $this-&gt;authorizer_refresh_token = $miniprogram['authorizer_refresh_token'];                }            } else {                $this-&gt;errorLog("小程序不存在,appid:".$this-&gt;authorizer_appid,'');                exit;            }        } else {            $this-&gt;errorLog("请增加微信第三方公众号平台账户信息",'');            exit;        }    }    /*     * 设置小程序服务器地址,无需加https前缀,但域名必须可以通过https访问     * @params string / array $domains : 域名地址。只接收一维数组。     * */    public  function setServerDomain($domain = 'test.moh.cc')    {        $url = "https://api.weixin.qq.com/wxa/modify_domain?access_token=".$this-&gt;authorizer_access_token;        if(is_array($domain)) {            $https = ''; $wss = '';            foreach ($domain as $key =&gt; $value) {                $https .= '"https://'.$value.'",';                $wss .= '"wss://'.$value.'",';            }            $https = rtrim($https,',');            $wss = rtrim($wss,',');            $data = '{                "action":"add",                "requestdomain":['.$https.'],                "wsrequestdomain":['.$wss.'],                "uploaddomain":['.$https.'],                "downloaddomain":['.$https.']            }';        } else {            $data = '{                "action":"add",                "requestdomain":"https://'.$domain.'",                "wsrequestdomain":"wss://'.$domain.'",                "uploaddomain":"https://'.$domain.'",                "downloaddomain":"https://'.$domain.'"            }';        }        $ret = json_decode(https_post($url,$data));        if($ret-&gt;errcode == 0) {            return true;        } else {            $this-&gt;errorLog("设置小程序服务器地址失败,appid:".$this-&gt;authorizer_appid,$ret);            return false;        }    }    /*     * 设置小程序业务域名,无需加https前缀,但域名必须可以通过https访问     * @params string / array $domains : 域名地址。只接收一维数组。     * */    public function setBusinessDomain($domain = 'test.moh.cc')    {        $url = "https://api.weixin.qq.com/wxa/setwebviewdomain?access_token=".$this-&gt;authorizer_access_token;        if(is_array($domain)) {            $https = '';            foreach ($domain as $key =&gt; $value) {                $https .= '"https://'.$value.'",';            }            $https = rtrim($https,',');            $data = '{                "action":"add",                "webviewdomain":['.$https.']            }';        } else {            $data = '{                "action":"add",                "webviewdomain":"https://'.$domain.'"            }';        }        $ret = json_decode(https_post($url,$data));        if($ret-&gt;errcode == 0) {            return true;        } else {            $this-&gt;errorLog("设置小程序业务域名失败,appid:".$this-&gt;authorizer_appid,$ret);            return false;        }    }    /*     * 成员管理,绑定小程序体验者     * @params string $wechatid : 体验者的微信号     * */    public function bindMember($wechatid)    {        $url = "https://api.weixin.qq.com/wxa/bind_tester?access_token=".$this-&gt;authorizer_access_token;        $data = '{"wechatid":"'.$wechatid.'"}';        $ret = json_decode(https_post($url,$data));        if($ret-&gt;errcode == 0) {            return true;        } else {            $this-&gt;errorLog("绑定小程序体验者操作失败,appid:".$this-&gt;authorizer_appid,$ret);            return false;        }    }    /*     * 成员管理,解绑定小程序体验者     * @params string $wechatid : 体验者的微信号     * */    public function unBindMember($wechatid)    {        $url = "https://api.weixin.qq.com/wxa/unbind_tester?access_token=".$this-&gt;authorizer_access_token;        $data = '{"wechatid":"'.$wechatid.'"}';        $ret = json_decode(https_post($url,$data));        if($ret-&gt;errcode == 0) {            return true;        } else {            $this-&gt;errorLog("解绑定小程序体验者操作失败,appid:".$this-&gt;authorizer_appid,$ret);            return false;        }    }    /*    * 成员管理,获取小程序体验者列表    * */    public function listMember()    {        $url = "https://api.weixin.qq.com/wxa/memberauth?access_token=".$this-&gt;authorizer_access_token;        $data = '{"action":"get_experiencer"}';        $ret = json_decode(https_post($url,$data));        if($ret-&gt;errcode == 0) {            return $ret-&gt;members;        } else {            $this-&gt;errorLog("获取小程序体验者列表操作失败,appid:".$this-&gt;authorizer_appid,$ret);            return false;        }    }    /*     * 为授权的小程序帐号上传小程序代码     * @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 = 'v1.0.0', $user_desc = "魔盒CMS小程序模板库")    {        $ext_json = json_encode('{"extEnable": true,"extAppid": "wx572****bfb","ext":{"appid": "'.$this-&gt;authorizer_appid.'"}}');        $url = "https://api.weixin.qq.com/wxa/commit?access_token=".$this-&gt;authorizer_access_token;        $data = '{"template_id":"'.$template_id.'","ext_json":'.$ext_json.',"user_version":"'.$user_version.'","user_desc":"'.$user_desc.'"}';        $ret = json_decode(https_post($url,$data));        if($ret-&gt;errcode == 0) {            return true;        } else {            $this-&gt;errorLog("为授权的小程序帐号上传小程序代码操作失败,appid:".$this-&gt;authorizer_appid,$ret);            return false;        }    }    /*     * 获取体验小程序的体验二维码     * @params string $path :   指定体验版二维码跳转到某个具体页面     * */    public function getExpVersion($path = '')    {        if($path){            $url = "https://api.weixin.qq.com/wxa/get_qrcode?access_token=".$this-&gt;authorizer_access_token."&amp;path=".urlencode($path);        } else {            $url = "https://api.weixin.qq.com/wxa/get_qrcode?access_token=".$this-&gt;authorizer_access_token;        }        $ret = json_decode(https_get($url));        if($ret-&gt;errcode) {            $this-&gt;errorLog("获取体验小程序的体验二维码操作失败,appid:".$this-&gt;authorizer_appid,$ret);            return false;        } else {            return $url;        }    }    /*     * 提交审核     * @params string $tag : 小程序标签,多个标签以空格分开     * @params strint $title : 小程序页面标题,长度不超过32     * */    public function submitReview($tag = "魔盒CMS 微信投票 微网站 微信商城" ,$title = "魔盒CMS微信公众号营销小程序开发")    {        $first_class = '';$second_class = '';$first_id = 0;$second_id = 0;        $address = "pages/index/index";        $category = $this-&gt;getCategory();        if(!empty($category)) {            $first_class = $category[0]-&gt;first_class ? $category[0]-&gt;first_class : '' ;            $second_class = $category[0]-&gt;second_class ? $category[0]-&gt;second_class : '';            $first_id = $category[0]-&gt;first_id ? $category[0]-&gt;first_id : 0;            $second_id = $category[0]-&gt;second_id ? $category[0]-&gt;second_id : 0;        }        $getpage = $this-&gt;getPage();        if(!empty($getpage) &amp;&amp; isset($getpage[0])) {            $address = $getpage[0];        }        $url = "https://api.weixin.qq.com/wxa/submit_audit?access_token=".$this-&gt;authorizer_access_token;        $data = '{                "item_list":[{                    "address":"'.$address.'",                    "tag":"'.$tag.'",                    "title":"'.$title.'",                    "first_class":"'.$first_class.'",                    "second_class":"'.$second_class.'",                    "first_id":"'.$first_id.'",                    "second_id":"'.$second_id.'"                }]            }';        $ret = json_decode(https_post($url,$data));        if($ret-&gt;errcode == 0) {            Db::name('wxminiprogram_audit')-&gt;insert([                'appid'=&gt;$this-&gt;authorizer_appid,                'auditid'=&gt;$ret-&gt;auditid,                'create_time'=&gt;date('Y-m-d H:i:s')            ]);            return true;        } else {            $this-&gt;errorLog("小程序提交审核操作失败,appid:".$this-&gt;authorizer_appid,$ret);            return false;        }    }    /*     * 小程序审核撤回     * 单个帐号每天审核撤回次数最多不超过1次,一个月不超过10次。     * */    public function unDoCodeAudit()    {        $url = "https://api.weixin.qq.com/wxa/undocodeaudit?access_token=".$this-&gt;authorizer_access_token;        $ret = json_decode(https_get($url));        if($ret-&gt;errcode == 0) {            return true;        } else {            $this-&gt;errorLog("小程序审核撤回操作失败,appid:".$this-&gt;authorizer_appid,$ret);            return false;        }    }    /*     * 查询指定版本的审核状态     * @params string $auditid : 提交审核时获得的审核id     * */    public function getAuditStatus($auditid)    {        $url = "https://api.weixin.qq.com/wxa/get_auditstatus?access_token=".$this-&gt;authorizer_access_token;        $data = '{"auditid":"'.$auditid.'"}';        $ret = json_decode(https_post($url,$data));        if($ret-&gt;errcode == 0) {            $reason = $ret-&gt;reason ? $ret-&gt;reason : '';            Db::name('wxminiprogram_audit')-&gt;where(['appid'=&gt;$this-&gt;authorizer_appid,'auditid'=&gt;$auditid])-&gt;update([                'status'=&gt;$ret-&gt;status,                'reason'=&gt;$reason            ]);            return true;        } else {            $this-&gt;errorLog("查询指定版本的审核状态操作失败,appid:".$this-&gt;authorizer_appid,$ret);            return false;        }    }    /*     * 查询最新一次提交的审核状态     * */    public function getLastAudit()    {        $url = "https://api.weixin.qq.com/wxa/get_latest_auditstatus?access_token=".$this-&gt;authorizer_access_token;        $ret = json_decode(https_get($url));        if($ret-&gt;errcode == 0) {            $reason = $ret-&gt;reason ? $ret-&gt;reason : '';            Db::name('wxminiprogram_audit')-&gt;where(['appid'=&gt;$this-&gt;authorizer_appid,'auditid'=&gt;$ret-&gt;auditid])-&gt;update([                'status'=&gt;$ret-&gt;status,                'reason'=&gt;$reason            ]);            return $ret-&gt;auditid;        } else {            $this-&gt;errorLog("查询最新一次提交的审核状态操作失败,appid:".$this-&gt;authorizer_appid,$ret);            return false;        }    }    /*     * 发布已通过审核的小程序     * */    public function release()    {        $url = "https://api.weixin.qq.com/wxa/release?access_token=".$this-&gt;authorizer_access_token;        $data = '{}';        $ret = json_decode(https_post($url,$data));        if($ret-&gt;errcode == 0) {            return true;        } else {            $this-&gt;errorLog("发布已通过审核的小程序操作失败,appid:".$this-&gt;authorizer_appid,$ret);            return $ret-&gt;errcode;        }    }    /*     * 获取授权小程序帐号的可选类目     * */    private function getCategory()    {        $url = "https://api.weixin.qq.com/wxa/get_category?access_token=".$this-&gt;authorizer_access_token;        $ret = json_decode(https_get($url));        if($ret-&gt;errcode == 0) {            return $ret-&gt;category_list;        } else {            $this-&gt;errorLog("获取授权小程序帐号的可选类目操作失败,appid:".$this-&gt;authorizer_appid,$ret);            return false;        }    }    /*     * 获取小程序的第三方提交代码的页面配置     * */    private function getPage()    {        $url = "https://api.weixin.qq.com/wxa/get_page?access_token=".$this-&gt;authorizer_access_token;        $ret = json_decode(https_get($url));        if($ret-&gt;errcode == 0) {            return $ret-&gt;page_list;        } else {            $this-&gt;errorLog("获取小程序的第三方提交代码的页面配置失败,appid:".$this-&gt;authorizer_appid,$ret);            return false;        }    }    /*    * 更新授权小程序的authorizer_access_token    * @params string $appid : 小程序appid    * @params string $refresh_token : 小程序authorizer_refresh_token    * */    private function update_authorizer_access_token($appid,$refresh_token)    {        $url = 'https://api.weixin.qq.com/cgi-bin/component/api_authorizer_token?component_access_token=' . $this-&gt;thirdAccessToken;        $data = '{"component_appid":"' . $this-&gt;thirdAppId . '","authorizer_appid":"' . $appid . '","authorizer_refresh_token":"' . $refresh_token . '"}';        $ret = json_decode(https_post($url, $data));        if (isset($ret-&gt;authorizer_access_token)) {            Db::name('wxminiprograms')-&gt;where(['authorizer_appid' =&gt; $appid])-&gt;update(['authorizer_access_token' =&gt; $ret-&gt;authorizer_access_token, 'authorizer_expires' =&gt; (time() + 7200), 'authorizer_refresh_token' =&gt; $ret-&gt;authorizer_refresh_token]);            return $ret;        } else {            $this-&gt;errorLog("更新授权小程序的authorizer_access_token操作失败,appid:".$appid,$ret);            return null;        }    }    private function errorLog($msg,$ret)    {        file_put_contents(ROOT_PATH . 'runtime/error/miniprogram.log', "[" . date('Y-m-d H:i:s') . "] ".$msg."," .json_encode($ret).PHP_EOL, FILE_APPEND);    }}
<?php //代小程序实现业务示例包namespace appusercontroller;use apphomemodelMiniprogram;use thinkDb;class Wxminiprogram extends Pub{    public $appid = &#39;wx57****1bfb&#39;;    //需要实现业务小程序appid    public function index()    {        return view();    }    public function doAction()    {        if(request()->isPost()) {            $action = input('action');            $mini = new Miniprogram($this-&gt;appid);            if($action == 'auth') {                //小程序授权                echo '<script>alert("已授权");history.back();</script>';            } elseif($action == 'setServerDomain') {                //设置小程序服务器域名地址                if($mini-&gt;setServerDomain()){                    echo '<script>alert("设置小程序服务器域名操作成功");history.back();</script>';                } else {                    echo '<script>alert("设置小程序服务器域名操作失败或已设置,请查看日志");history.back();</script>';                }            }  elseif($action == 'setBusinessDomain') {                //设置业务域名                if($mini-&gt;setBusinessDomain()){                    echo '<script>alert("设置小程序业务域名操作成功");history.back();</script>';                } else {                    echo '<script>alert("设置小程序业务域名操作失败或已设置,请查看日志");history.back();</script>';                }            }  elseif($action == 'bind') {                //绑定小程序体验者                $wechatid = input('wechatid');                if($wechatid) {                    if($mini-&gt;bindMember($wechatid)){                        echo '<script>alert("绑定小程序体验者操作成功");history.back();</script>';                    } else {                        echo '<script>alert("绑定小程序体验者操作失败,请查看日志");history.back();</script>';                    }                } else {                    echo '<script>alert("请输入微信号");history.back();</script>';                }            }  elseif($action == 'uploadCode') {                //上传小程序代码                if($mini-&gt;uploadCode(2)){                    echo '<script>alert("上传小程序代码操作成功");history.back();</script>';                } else {                    echo '<script>alert("上传小程序代码操作失败,请查看日志");history.back();</script>';                }            }  elseif($action == 'getExpVersion') {                //获取体验小程序的体验二维码                $qrcode = $mini-&gt;getExpVersion();                if($qrcode){                    echo '<script>window.location.href="&#39;.$qrcode.&#39;";</script>';                } else {                    echo '<script>alert("获取体验小程序的体验二维码操作失败");history.back();</script>';                }            } elseif($action == 'review') {                //提交审核                $auditid = Db::name('wxminiprogram_audit')-&gt;where(['appid'=&gt;$this-&gt;appid,'status'=&gt;['neq',0]])-&gt;order('create_time','desc')-&gt;value('auditid');                if($auditid){                    echo '<script>alert("有待处理的版本,请先处理该版本相关事项再提交新的审核。审核ID:&#39;.$auditid.&#39;");history.back();</script>';                } else {                    if($mini-&gt;submitReview()){                        echo '<script>alert("小程序提交审核操作成功");history.back();</script>';                    } else {                        echo '<script>alert("小程序提交审核操作失败,请查看日志");history.back();</script>';                    }                }            } elseif($action == 'getAudit') {                //查询指定版本的审核状态                $auditid = input('auditid');                if($auditid) {                    if($mini-&gt;getAuditStatus($auditid)){                        $audit = Db::name('wxminiprogram_audit')-&gt;where(['appid'=&gt;$this-&gt;appid,'auditid'=&gt;$auditid])-&gt;field('status,reason')-&gt;find();                        if($audit['status'] == 0) {                            echo '<script>alert("该版本审核已通过");history.back();</script>';                        } elseif($audit['status'] == 1) {                            echo '<script>alert("该版本审核失败,原因:&#39;.$audit[&#39;reason&#39;].&#39;");history.back();</script>';                        } elseif($audit['status'] == 2) {                            echo '<script>alert("该版本小程序正在审核中......");history.back();</script>';                        } else {                            echo '<script>alert("未知状态......");history.back();</script>';                        }                    } else {                        echo '<script>alert("查询指定版本的审核状态操作失败,请查看日志");history.back();</script>';                    }                } else {                    echo '<script>alert("请输入要查询的审核ID");history.back();</script>';                }            } elseif($action == 'lastAudit') {                //查询最新一次提交的审核状态                $auditid = $mini-&gt;getLastAudit();                if($auditid){                    $audit = Db::name('wxminiprogram_audit')-&gt;where(['appid'=&gt;$this-&gt;appid,'auditid'=&gt;$auditid])-&gt;field('status,reason')-&gt;find();                    if($audit['status'] == 0) {                        echo '<script>alert("审核已通过");history.back();</script>';                    } elseif($audit['status'] == 1) {                        echo '<script>alert("审核失败,原因:&#39;.$audit[&#39;reason&#39;].&#39;");history.back();</script>';                    } elseif($audit['status'] == 2) {                        echo '<script>alert("小程序正在审核中......");history.back();</script>';                    } else {                        echo '<script>alert("未知状态......");history.back();</script>';                    }                }else {                    echo '<script>alert("查询最新一次提交的审核状态操作失败,请查看日志");history.back();</script>';                }            } elseif($action == 'release') {                //发布已通过审核的小程序                $auditid = Db::name('wxminiprogram_audit')-&gt;where(['appid'=&gt;$this-&gt;appid,'status'=&gt;['neq',0]])-&gt;order('create_time','desc')-&gt;value('auditid');                if($auditid){                    echo '<script>alert("有待处理的版本,请先处理该版本相关事项再发布版本。审核ID:&#39;.$auditid.&#39;");history.back();</script>';                } else {                    $errcode = $mini-&gt;release();                    if($errcode){                        echo '<script>alert("已发版");history.back();</script>';                    } else {                        echo '<script>alert("发版失败,错误代码:&#39;.$errcode.&#39;");history.back();</script>';                    }                }            }        }    }}

wxminiprograms数据表,保存已授权小程序的基本信息及授权相关信息(authorizer_access_token/authorizer_refresh_token)这两个值很重要,代小程序实现业务基本上是通过这两个值来实现

-- Adminer 4.6.2 MySQL dumpSET NAMES utf8;SET time_zone = '+00:00';SET foreign_key_checks = 0;SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';DROP TABLE IF EXISTS `wxminiprograms`;CREATE TABLE `wxminiprograms` (  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',  `uid` int(10) unsigned NOT NULL COMMENT '用户ID',  `nick_name` varchar(45) DEFAULT NULL COMMENT '微信小程序名称',  `alias` varchar(45) DEFAULT NULL COMMENT '别名',  `token` varchar(45) DEFAULT NULL COMMENT '平台生成的token值',  `head_img` varchar(255) DEFAULT NULL COMMENT '微信小程序头像',  `verify_type_info` tinyint(1) DEFAULT NULL COMMENT '授权方认证类型,-1代表未认证,0代表微信认证',  `is_show` tinyint(1) DEFAULT '0' COMMENT '是否显示,0显示,1隐藏',  `user_name` varchar(45) DEFAULT NULL COMMENT '原始ID',  `qrcode_url` varchar(255) DEFAULT NULL COMMENT '二维码图片的URL',  `business_info` varchar(255) DEFAULT NULL COMMENT 'json格式。用以了解以下功能的开通状况(0代表未开通,1代表已开通): open_store:是否开通微信门店功能 open_scan:是否开通微信扫商品功能 open_pay:是否开通微信支付功能 open_card:是否开通微信卡券功能 open_shake:是否开通微信摇一摇功能',  `idc` int(10) unsigned DEFAULT NULL COMMENT 'idc',  `principal_name` varchar(45) DEFAULT NULL COMMENT '小程序的主体名称',  `signature` varchar(255) DEFAULT NULL COMMENT '帐号介绍',  `miniprograminfo` varchar(255) DEFAULT NULL COMMENT 'json格式。判断是否为小程序类型授权,包含network小程序已设置的各个服务器域名',  `func_info` longtext COMMENT 'json格式。权限集列表,ID为17到19时分别代表: 17.帐号管理权限 18.开发管理权限 19.客服消息管理权限 请注意: 1)该字段的返回不会考虑小程序是否具备该权限集的权限(因为可能部分具备)。',  `authorizer_appid` varchar(45) DEFAULT NULL COMMENT '小程序appid',  `authorizer_access_token` varchar(255) DEFAULT NULL COMMENT '授权方接口调用凭据(在授权的公众号或小程序具备API权限时,才有此返回值),也简称为令牌',  `authorizer_expires` int(10) unsigned DEFAULT NULL COMMENT 'refresh有效期',  `authorizer_refresh_token` varchar(255) DEFAULT NULL COMMENT '接口调用凭据刷新令牌',  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '授权时间',  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='微信小程序授权列表';-- 2018-07-25 09:32:49

wxminiprogram_audit数据表,保存提交审核的小程序

-- Adminer 4.6.2 MySQL dumpSET NAMES utf8;SET time_zone = '+00:00';SET foreign_key_checks = 0;SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';DROP TABLE IF EXISTS `wxminiprogram_audit`;CREATE TABLE `wxminiprogram_audit` (  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',  `appid` varchar(45) NOT NULL COMMENT '小程序appid',  `auditid` varchar(45) NOT NULL COMMENT '审核编号',  `status` tinyint(1) unsigned NOT NULL DEFAULT '3' COMMENT '审核状态,其中0为审核成功,1为审核失败,2为审核中,3已提交审核',  `reason` varchar(255) DEFAULT NULL COMMENT '当status=1,审核被拒绝时,返回的拒绝原因',  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '提交审核时间',  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='微信小程序提交审核的小程序';-- 2018-07-25 09:35:07

x