倾听风的作曲 發表於 2020-3-2 17:57:00

微信第三方平台开发之代小程序实现业务

<p>第一步:申请微信开放平台帐号并创建第三方平台</p>
<p><span class="img-wrap"><img title="clipboard.png" src="https://segmentfault.com/img/bVbcnen?w=1205&amp;h=934" alt="clipboard.png"></span></p>
<p><span class="img-wrap"><img title="clipboard.png" src="https://segmentfault.com/img/bVbcneK?w=1309&amp;h=762" alt="clipboard.png"></span></p>
<p><span class="img-wrap"><img title="clipboard.png" src="https://segmentfault.com/img/bVbcnhw?w=1092&amp;h=911" alt="clipboard.png"></span></p>
<p><span class="img-wrap"><img title="clipboard.png" src="https://segmentfault.com/img/bVbcnie?w=1121&amp;h=804" alt="clipboard.png"></span></p>
<p>第二步:公众号/小程序授权给第三方平台<br>官方文档:https://open.weixin.qq.com/cg...</p>
<pre class="hljs xml"><code><span class="hljs-meta">&lt;?php
<span class="hljs-comment">/*
*    微信第三方平台授权流程
*/
<span class="hljs-keyword">namespace <span class="hljs-title">app\<span class="hljs-title">home\<span class="hljs-title">controller;
<span class="hljs-class"><span class="hljs-keyword">class <span class="hljs-title">Weixin <span class="hljs-keyword">extends <span class="hljs-title">Common
{
    <span class="hljs-keyword">private $appid = <span class="hljs-string">'wx3e******165c';            <span class="hljs-comment">//第三方平台应用appid
    <span class="hljs-keyword">private $appsecret = <span class="hljs-string">'13e**********d039';   <span class="hljs-comment">//第三方平台应用appsecret
    <span class="hljs-keyword">private $token = <span class="hljs-string">'ePF58******Q2Ae';         <span class="hljs-comment">//第三方平台应用token(消息校验Token)
    <span class="hljs-keyword">private $encodingAesKey = <span class="hljs-string">'bzH***FCamD';      <span class="hljs-comment">//第三方平台应用Key(消息加解密Key)
    <span class="hljs-keyword">private $component_ticket= <span class="hljs-string">'ticket@**xv-g';   <span class="hljs-comment">//微信后台推送的ticket,用于获取第三方平台接口调用凭据
   
    <span class="hljs-comment">/*
    * 扫码授权,注意此URL必须放置在页面当中用户点击进行跳转,不能通过程序跳转,否则将出现“请确认授权入口页所在域名,与授权后回调页所在域名相同....”错误
    * <span class="hljs-doctag">@params string $redirect_uri : 扫码成功后的回调地址
    * <span class="hljs-doctag">@params int $auth_type : 授权类型,1公众号,2小程序,3公众号/小程序同时展现。不传参数默认都展示   
    */
    <span class="hljs-keyword">public <span class="hljs-function"><span class="hljs-keyword">function <span class="hljs-title">startAuth<span class="hljs-params">($redirect_uri,$auth_type = <span class="hljs-number">3)
    {
      $url = <span class="hljs-string">"https://mp.weixin.qq.com/cgi-bin/componentloginpage?component_appid=".<span class="hljs-keyword">$this-&gt;appid.<span class="hljs-string">"&amp;pre_auth_code=".<span class="hljs-keyword">$this-&gt;get_pre_auth_code().<span class="hljs-string">"&amp;redirect_uri=".urlencode($redirect_uri).<span class="hljs-string">"&amp;auth_type=".$auth_type;
      <span class="hljs-keyword">return $url;
    }
   
    <span class="hljs-comment">/*
    * 获取第三方平台access_token
    * 注意,此值应保存,代码这里没保存
    */
    <span class="hljs-keyword">private <span class="hljs-function"><span class="hljs-keyword">function <span class="hljs-title">get_component_access_token<span class="hljs-params">()
    {
      $url = <span class="hljs-string">"https://api.weixin.qq.com/cgi-bin/component/api_component_token";
      $data = <span class="hljs-string">'{
            "component_appid":"'.<span class="hljs-keyword">$this-&gt;appid.<span class="hljs-string">'" ,
            "component_appsecret": "'.<span class="hljs-keyword">$this-&gt;appsecret.<span class="hljs-string">'",
            "component_verify_ticket": "'.<span class="hljs-keyword">$this-&gt;component_ticket.<span class="hljs-string">'"
      }';
      $ret = json_decode(<span class="hljs-keyword">$this-&gt;https_post($url,$data));
      <span class="hljs-keyword">if($ret-&gt;errcode == <span class="hljs-number">0) {
            <span class="hljs-keyword">return $ret-&gt;component_access_token;
      } <span class="hljs-keyword">else {
            <span class="hljs-keyword">return $ret-&gt;errcode;
      }
    }
    <span class="hljs-comment">/*
    *第三方平台方获取预授权码pre_auth_code
    */
    <span class="hljs-keyword">private <span class="hljs-function"><span class="hljs-keyword">function <span class="hljs-title">get_pre_auth_code<span class="hljs-params">()
    {
      $url = <span class="hljs-string">"https://api.weixin.qq.com/cgi-bin/component/api_create_preauthcode?component_access_token=".<span class="hljs-keyword">$this-&gt;get_component_access_token();
      $data = <span class="hljs-string">'{"component_appid":"'.<span class="hljs-keyword">$this-&gt;appid.<span class="hljs-string">'"}';
      $ret = json_decode(<span class="hljs-keyword">$this-&gt;https_post($url,$data));
      <span class="hljs-keyword">if($ret-&gt;errcode == <span class="hljs-number">0) {
            <span class="hljs-keyword">return $ret-&gt;pre_auth_code;
      } <span class="hljs-keyword">else {
            <span class="hljs-keyword">return $ret-&gt;errcode;
      }
    }
   
    <span class="hljs-comment">/*
    * 发起POST网络提交
    * <span class="hljs-doctag">@params string $url : 网络地址
    * <span class="hljs-doctag">@params json $data : 发送的json格式数据
    */
    <span class="hljs-keyword">private <span class="hljs-function"><span class="hljs-keyword">function <span class="hljs-title">https_post<span class="hljs-params">($url,$data)
    {
      $curl = curl_init();
      curl_setopt($curl, CURLOPT_URL, $url);
      <span class="hljs-keyword">if (!<span class="hljs-keyword">empty($data)){
            curl_setopt($curl, CURLOPT_POST, <span class="hljs-number">1);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
      }
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, <span class="hljs-number">1);
      $output = curl_exec($curl);
      curl_close($curl);
      <span class="hljs-keyword">return $output;
    }
   <span class="hljs-comment">/*
    * 发起GET网络提交
    * <span class="hljs-doctag">@params string $url : 网络地址
    */
    <span class="hljs-keyword">private <span class="hljs-function"><span class="hljs-keyword">function <span class="hljs-title">https_get<span class="hljs-params">($url)
    {
      $curl = curl_init();
      curl_setopt($curl, CURLOPT_URL, $url);
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, <span class="hljs-keyword">TRUE);
      curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, <span class="hljs-keyword">FALSE);
      curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, <span class="hljs-keyword">FALSE);
      curl_setopt($curl, CURLOPT_HEADER, <span class="hljs-keyword">FALSE) ;
      curl_setopt($curl, CURLOPT_TIMEOUT,<span class="hljs-number">60);
      <span class="hljs-keyword">if (curl_errno($curl)) {
            <span class="hljs-keyword">return <span class="hljs-string">'Errno'.curl_error($curl);
      }
      <span class="hljs-keyword">else{$result=curl_exec($curl);}
      curl_close($curl);
      <span class="hljs-keyword">return $result;
    }
}</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<pre class="hljs xml"><code><span class="hljs-meta">&lt;?php
<span class="hljs-comment">/*
*    接收微信官方推送的ticket值以及取消授权等操作
*/
<span class="hljs-keyword">namespace <span class="hljs-title">app\<span class="hljs-title">home\<span class="hljs-title">controller;
<span class="hljs-keyword">use <span class="hljs-title">think\<span class="hljs-title">Db;
<span class="hljs-class"><span class="hljs-keyword">class <span class="hljs-title">Openoauth <span class="hljs-keyword">extends <span class="hljs-title">Common
{
    <span class="hljs-keyword">private $appid = <span class="hljs-string">'wx3e******165c';            <span class="hljs-comment">//第三方平台应用appid
    <span class="hljs-keyword">private $appsecret = <span class="hljs-string">'13e**********d039';   <span class="hljs-comment">//第三方平台应用appsecret
    <span class="hljs-keyword">private $token = <span class="hljs-string">'ePF58******Q2Ae';         <span class="hljs-comment">//第三方平台应用token(消息校验Token)
    <span class="hljs-keyword">private $encodingAesKey = <span class="hljs-string">'bzH***FCamD';      <span class="hljs-comment">//第三方平台应用Key(消息加解密Key)
    <span class="hljs-keyword">private $component_ticket= <span class="hljs-string">'ticket@**xv-g';   <span class="hljs-comment">//微信后台推送的ticket,用于获取第三方平台接口调用凭据
    <span class="hljs-comment">/*
    *    接收微信官方推送的消息(每10分钟1次)
    *    这里需要引入微信官方提供的加解密码示例包
    *    官方文档:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&amp;t=resource/res_list&amp;verify=1&amp;id=open1419318479&amp;token=&amp;lang=zh_CN
    *    示例包下载:https://wximg.gtimg.com/shake_tv/mpwiki/cryptoDemo.zip
    */
    <span class="hljs-keyword">public <span class="hljs-function"><span class="hljs-keyword">function <span class="hljs-title">index<span class="hljs-params">()
    {
      $encryptMsg = file_get_contents(<span class="hljs-string">"php://input");
      $xml_tree = <span class="hljs-keyword">new \DOMDocument();
      $xml_tree-&gt;loadXML($encryptMsg);
      $xml_array = $xml_tree-&gt;getElementsByTagName(<span class="hljs-string">"Encrypt");
      $encrypt = $xml_array-&gt;item(<span class="hljs-number">0)-&gt;nodeValue;
      <span class="hljs-keyword">require_once(<span class="hljs-string">'wxBizMsgCrypt.php');
      $Prpcrypt = <span class="hljs-keyword">new \Prpcrypt(<span class="hljs-keyword">$this-&gt;encodingAesKey);
      $postData = $Prpcrypt-&gt;decrypt($encrypt, <span class="hljs-keyword">$this-&gt;appid);
      <span class="hljs-keyword">if ($postData[<span class="hljs-number">0] != <span class="hljs-number">0) {
            <span class="hljs-keyword">return $postData[<span class="hljs-number">0];
      } <span class="hljs-keyword">else {
            $msg = $postData[<span class="hljs-number">1];
            $xml = <span class="hljs-keyword">new \DOMDocument();
            $xml-&gt;loadXML($msg);
            $array_a = $xml-&gt;getElementsByTagName(<span class="hljs-string">"InfoType");
            $infoType = $array_a-&gt;item(<span class="hljs-number">0)-&gt;nodeValue;
            <span class="hljs-keyword">if ($infoType == <span class="hljs-string">"unauthorized") {
                <span class="hljs-comment">//取消公众号/小程序授权
                $array_b = $xml-&gt;getElementsByTagName(<span class="hljs-string">"AuthorizerAppid");
                $AuthorizerAppid = $array_b-&gt;item(<span class="hljs-number">0)-&gt;nodeValue;    <span class="hljs-comment">//公众号/小程序appid
                $where = <span class="hljs-keyword">array(<span class="hljs-string">"type" =&gt; <span class="hljs-number">1, <span class="hljs-string">"appid" =&gt; $AuthorizerAppid);
                $save = <span class="hljs-keyword">array(<span class="hljs-string">"authorizer_access_token" =&gt; <span class="hljs-string">"", <span class="hljs-string">"authorizer_refresh_token" =&gt; <span class="hljs-string">"", <span class="hljs-string">"authorizer_expires" =&gt; <span class="hljs-number">0);
                Db::name(<span class="hljs-string">"wxuser")-&gt;where($where)-&gt;update($save);   <span class="hljs-comment">//公众号取消授权
                Db::name(<span class="hljs-string">"wxminiprograms")-&gt;where(<span class="hljs-string">'authorizer_appid',$AuthorizerAppid)-&gt;update($save);   <span class="hljs-comment">//小程序取消授权
            } <span class="hljs-keyword">else <span class="hljs-keyword">if ($infoType == <span class="hljs-string">"component_verify_ticket") {
                <span class="hljs-comment">//微信官方推送的ticket值
                $array_e = $xml-&gt;getElementsByTagName(<span class="hljs-string">"ComponentVerifyTicket");
                $component_verify_ticket = $array_e-&gt;item(<span class="hljs-number">0)-&gt;nodeValue;
                <span class="hljs-keyword">if (Db::name(<span class="hljs-string">"weixin_account")-&gt;where(<span class="hljs-keyword">array(<span class="hljs-string">"type" =&gt; <span class="hljs-number">1))-&gt;update(<span class="hljs-keyword">array(<span class="hljs-string">"component_verify_ticket" =&gt; $component_verify_ticket, <span class="hljs-string">"date_time" =&gt; time()))) {
                  <span class="hljs-keyword">$this-&gt;updateAccessToken($component_verify_ticket);
                  <span class="hljs-keyword">echo <span class="hljs-string">"success";
                }
            }
      }
    }
   
    <span class="hljs-comment">/*
   * 更新component_access_token
   * <span class="hljs-doctag">@params string $component_verify_ticket
   * */
    <span class="hljs-keyword">private <span class="hljs-function"><span class="hljs-keyword">function <span class="hljs-title">updateAccessToken<span class="hljs-params">($component_verify_ticket)
    {
      $weixin_account = Db::name(<span class="hljs-string">'weixin_account')-&gt;where([<span class="hljs-string">'type'=&gt;<span class="hljs-number">1])-&gt;field(<span class="hljs-string">'id,appId,appSecret,component_access_token,token_expires')-&gt;find();
      <span class="hljs-keyword">if($weixin_account[<span class="hljs-string">'token_expires'] &lt;= time() ) {
            $apiUrl = <span class="hljs-string">'https://api.weixin.qq.com/cgi-bin/component/api_component_token';
            $data = <span class="hljs-string">'{"component_appid":"'.$weixin_account[<span class="hljs-string">'appId'].<span class="hljs-string">'" ,"component_appsecret": "'.$weixin_account[<span class="hljs-string">'appSecret'].<span class="hljs-string">'","component_verify_ticket": "'.$component_verify_ticket.<span class="hljs-string">'"}';
            $json = json_decode(_request($apiUrl,$data));
            <span class="hljs-keyword">if(<span class="hljs-keyword">isset($json-&gt;component_access_token)) {
                Db::name(<span class="hljs-string">'weixin_account')-&gt;where([<span class="hljs-string">'id'=&gt;$weixin_account[<span class="hljs-string">'id']])-&gt;update([<span class="hljs-string">'component_access_token'=&gt;$json-&gt;component_access_token,<span class="hljs-string">'token_expires'=&gt;time()+<span class="hljs-number">7200]);
            }
      }
    }
}</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<pre><code>&lt;?php
/*
*    代小程序实现业务
*/
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('weixin_account')-&gt;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 : 域名地址。只接收一维数组。
   * */
    publicfunction 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-&gt;first_class ? $category-&gt;first_class : '' ;
            $second_class = $category-&gt;second_class ? $category-&gt;second_class : '';
            $first_id = $category-&gt;first_id ? $category-&gt;first_id : 0;
            $second_id = $category-&gt;second_id ? $category-&gt;second_id : 0;
      }
      $getpage = $this-&gt;getPage();
      if(!empty($getpage) &amp;&amp; isset($getpage)) {
            $address = $getpage;
      }
      $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);
    }
}</code></pre>
<pre class="hljs xml"><code><span class="hljs-meta">&lt;?php
<span class="hljs-comment">//代小程序实现业务示例包
<span class="hljs-keyword">namespace <span class="hljs-title">app\<span class="hljs-title">user\<span class="hljs-title">controller;
<span class="hljs-keyword">use <span class="hljs-title">app\<span class="hljs-title">home\<span class="hljs-title">model\<span class="hljs-title">Miniprogram;
<span class="hljs-keyword">use <span class="hljs-title">think\<span class="hljs-title">Db;
<span class="hljs-class"><span class="hljs-keyword">class <span class="hljs-title">Wxminiprogram <span class="hljs-keyword">extends <span class="hljs-title">Pub
{
    <span class="hljs-keyword">public $appid = <span class="hljs-string">'wx57****1bfb';    <span class="hljs-comment">//需要实现业务小程序appid
    <span class="hljs-keyword">public <span class="hljs-function"><span class="hljs-keyword">function <span class="hljs-title">index<span class="hljs-params">()
    {
      <span class="hljs-keyword">return view();
    }
    <span class="hljs-keyword">public <span class="hljs-function"><span class="hljs-keyword">function <span class="hljs-title">doAction<span class="hljs-params">()
    {
      <span class="hljs-keyword">if(request()-&gt;isPost()) {
            $action = input(<span class="hljs-string">'action');
            $mini = <span class="hljs-keyword">new Miniprogram(<span class="hljs-keyword">$this-&gt;appid);
            <span class="hljs-keyword">if($action == <span class="hljs-string">'auth') {
                <span class="hljs-comment">//小程序授权
                <span class="hljs-keyword">echo <span class="hljs-string">'&lt;script&gt;alert("已授权");history.back();&lt;/script&gt;';
            } <span class="hljs-keyword">elseif($action == <span class="hljs-string">'setServerDomain') {
                <span class="hljs-comment">//设置小程序服务器域名地址
                <span class="hljs-keyword">if($mini-&gt;setServerDomain()){
                  <span class="hljs-keyword">echo <span class="hljs-string">'&lt;script&gt;alert("设置小程序服务器域名操作成功");history.back();&lt;/script&gt;';
                } <span class="hljs-keyword">else {
                  <span class="hljs-keyword">echo <span class="hljs-string">'&lt;script&gt;alert("设置小程序服务器域名操作失败或已设置,请查看日志");history.back();&lt;/script&gt;';
                }
            }<span class="hljs-keyword">elseif($action == <span class="hljs-string">'setBusinessDomain') {
                <span class="hljs-comment">//设置业务域名
                <span class="hljs-keyword">if($mini-&gt;setBusinessDomain()){
                  <span class="hljs-keyword">echo <span class="hljs-string">'&lt;script&gt;alert("设置小程序业务域名操作成功");history.back();&lt;/script&gt;';
                } <span class="hljs-keyword">else {
                  <span class="hljs-keyword">echo <span class="hljs-string">'&lt;script&gt;alert("设置小程序业务域名操作失败或已设置,请查看日志");history.back();&lt;/script&gt;';
                }
            }<span class="hljs-keyword">elseif($action == <span class="hljs-string">'bind') {
                <span class="hljs-comment">//绑定小程序体验者
                $wechatid = input(<span class="hljs-string">'wechatid');
                <span class="hljs-keyword">if($wechatid) {
                  <span class="hljs-keyword">if($mini-&gt;bindMember($wechatid)){
                        <span class="hljs-keyword">echo <span class="hljs-string">'&lt;script&gt;alert("绑定小程序体验者操作成功");history.back();&lt;/script&gt;';
                  } <span class="hljs-keyword">else {
                        <span class="hljs-keyword">echo <span class="hljs-string">'&lt;script&gt;alert("绑定小程序体验者操作失败,请查看日志");history.back();&lt;/script&gt;';
                  }
                } <span class="hljs-keyword">else {
                  <span class="hljs-keyword">echo <span class="hljs-string">'&lt;script&gt;alert("请输入微信号");history.back();&lt;/script&gt;';
                }

            }<span class="hljs-keyword">elseif($action == <span class="hljs-string">'uploadCode') {
                <span class="hljs-comment">//上传小程序代码
                <span class="hljs-keyword">if($mini-&gt;uploadCode(<span class="hljs-number">2)){
                  <span class="hljs-keyword">echo <span class="hljs-string">'&lt;script&gt;alert("上传小程序代码操作成功");history.back();&lt;/script&gt;';
                } <span class="hljs-keyword">else {
                  <span class="hljs-keyword">echo <span class="hljs-string">'&lt;script&gt;alert("上传小程序代码操作失败,请查看日志");history.back();&lt;/script&gt;';
                }
            }<span class="hljs-keyword">elseif($action == <span class="hljs-string">'getExpVersion') {
                <span class="hljs-comment">//获取体验小程序的体验二维码
                $qrcode = $mini-&gt;getExpVersion();
                <span class="hljs-keyword">if($qrcode){
                  <span class="hljs-keyword">echo <span class="hljs-string">'&lt;script&gt;window.location.href="'.$qrcode.<span class="hljs-string">'";&lt;/script&gt;';
                } <span class="hljs-keyword">else {
                  <span class="hljs-keyword">echo <span class="hljs-string">'&lt;script&gt;alert("获取体验小程序的体验二维码操作失败");history.back();&lt;/script&gt;';
                }
            } <span class="hljs-keyword">elseif($action == <span class="hljs-string">'review') {
                <span class="hljs-comment">//提交审核
                $auditid = Db::name(<span class="hljs-string">'wxminiprogram_audit')-&gt;where([<span class="hljs-string">'appid'=&gt;<span class="hljs-keyword">$this-&gt;appid,<span class="hljs-string">'status'=&gt;[<span class="hljs-string">'neq',<span class="hljs-number">0]])-&gt;order(<span class="hljs-string">'create_time',<span class="hljs-string">'desc')-&gt;value(<span class="hljs-string">'auditid');
                <span class="hljs-keyword">if($auditid){
                  <span class="hljs-keyword">echo <span class="hljs-string">'&lt;script&gt;alert("有待处理的版本,请先处理该版本相关事项再提交新的审核。审核ID:'.$auditid.<span class="hljs-string">'");history.back();&lt;/script&gt;';
                } <span class="hljs-keyword">else {
                  <span class="hljs-keyword">if($mini-&gt;submitReview()){
                        <span class="hljs-keyword">echo <span class="hljs-string">'&lt;script&gt;alert("小程序提交审核操作成功");history.back();&lt;/script&gt;';
                  } <span class="hljs-keyword">else {
                        <span class="hljs-keyword">echo <span class="hljs-string">'&lt;script&gt;alert("小程序提交审核操作失败,请查看日志");history.back();&lt;/script&gt;';
                  }
                }
            } <span class="hljs-keyword">elseif($action == <span class="hljs-string">'getAudit') {
                <span class="hljs-comment">//查询指定版本的审核状态
                $auditid = input(<span class="hljs-string">'auditid');
                <span class="hljs-keyword">if($auditid) {
                  <span class="hljs-keyword">if($mini-&gt;getAuditStatus($auditid)){
                        $audit = Db::name(<span class="hljs-string">'wxminiprogram_audit')-&gt;where([<span class="hljs-string">'appid'=&gt;<span class="hljs-keyword">$this-&gt;appid,<span class="hljs-string">'auditid'=&gt;$auditid])-&gt;field(<span class="hljs-string">'status,reason')-&gt;find();
                        <span class="hljs-keyword">if($audit[<span class="hljs-string">'status'] == <span class="hljs-number">0) {
                            <span class="hljs-keyword">echo <span class="hljs-string">'&lt;script&gt;alert("该版本审核已通过");history.back();&lt;/script&gt;';
                        } <span class="hljs-keyword">elseif($audit[<span class="hljs-string">'status'] == <span class="hljs-number">1) {
                            <span class="hljs-keyword">echo <span class="hljs-string">'&lt;script&gt;alert("该版本审核失败,原因:'.$audit[<span class="hljs-string">'reason'].<span class="hljs-string">'");history.back();&lt;/script&gt;';
                        } <span class="hljs-keyword">elseif($audit[<span class="hljs-string">'status'] == <span class="hljs-number">2) {
                            <span class="hljs-keyword">echo <span class="hljs-string">'&lt;script&gt;alert("该版本小程序正在审核中......");history.back();&lt;/script&gt;';
                        } <span class="hljs-keyword">else {
                            <span class="hljs-keyword">echo <span class="hljs-string">'&lt;script&gt;alert("未知状态......");history.back();&lt;/script&gt;';
                        }
                  } <span class="hljs-keyword">else {
                        <span class="hljs-keyword">echo <span class="hljs-string">'&lt;script&gt;alert("查询指定版本的审核状态操作失败,请查看日志");history.back();&lt;/script&gt;';
                  }
                } <span class="hljs-keyword">else {
                  <span class="hljs-keyword">echo <span class="hljs-string">'&lt;script&gt;alert("请输入要查询的审核ID");history.back();&lt;/script&gt;';
                }
            } <span class="hljs-keyword">elseif($action == <span class="hljs-string">'lastAudit') {
                <span class="hljs-comment">//查询最新一次提交的审核状态
                $auditid = $mini-&gt;getLastAudit();
                <span class="hljs-keyword">if($auditid){
                  $audit = Db::name(<span class="hljs-string">'wxminiprogram_audit')-&gt;where([<span class="hljs-string">'appid'=&gt;<span class="hljs-keyword">$this-&gt;appid,<span class="hljs-string">'auditid'=&gt;$auditid])-&gt;field(<span class="hljs-string">'status,reason')-&gt;find();
                  <span class="hljs-keyword">if($audit[<span class="hljs-string">'status'] == <span class="hljs-number">0) {
                        <span class="hljs-keyword">echo <span class="hljs-string">'&lt;script&gt;alert("审核已通过");history.back();&lt;/script&gt;';
                  } <span class="hljs-keyword">elseif($audit[<span class="hljs-string">'status'] == <span class="hljs-number">1) {
                        <span class="hljs-keyword">echo <span class="hljs-string">'&lt;script&gt;alert("审核失败,原因:'.$audit[<span class="hljs-string">'reason'].<span class="hljs-string">'");history.back();&lt;/script&gt;';
                  } <span class="hljs-keyword">elseif($audit[<span class="hljs-string">'status'] == <span class="hljs-number">2) {
                        <span class="hljs-keyword">echo <span class="hljs-string">'&lt;script&gt;alert("小程序正在审核中......");history.back();&lt;/script&gt;';
                  } <span class="hljs-keyword">else {
                        <span class="hljs-keyword">echo <span class="hljs-string">'&lt;script&gt;alert("未知状态......");history.back();&lt;/script&gt;';
                  }
                }<span class="hljs-keyword">else {
                  <span class="hljs-keyword">echo <span class="hljs-string">'&lt;script&gt;alert("查询最新一次提交的审核状态操作失败,请查看日志");history.back();&lt;/script&gt;';
                }
            } <span class="hljs-keyword">elseif($action == <span class="hljs-string">'release') {
                <span class="hljs-comment">//发布已通过审核的小程序
                $auditid = Db::name(<span class="hljs-string">'wxminiprogram_audit')-&gt;where([<span class="hljs-string">'appid'=&gt;<span class="hljs-keyword">$this-&gt;appid,<span class="hljs-string">'status'=&gt;[<span class="hljs-string">'neq',<span class="hljs-number">0]])-&gt;order(<span class="hljs-string">'create_time',<span class="hljs-string">'desc')-&gt;value(<span class="hljs-string">'auditid');
                <span class="hljs-keyword">if($auditid){
                  <span class="hljs-keyword">echo <span class="hljs-string">'&lt;script&gt;alert("有待处理的版本,请先处理该版本相关事项再发布版本。审核ID:'.$auditid.<span class="hljs-string">'");history.back();&lt;/script&gt;';
                } <span class="hljs-keyword">else {
                  $errcode = $mini-&gt;release();
                  <span class="hljs-keyword">if($errcode){
                        <span class="hljs-keyword">echo <span class="hljs-string">'&lt;script&gt;alert("已发版");history.back();&lt;/script&gt;';
                  } <span class="hljs-keyword">else {
                        <span class="hljs-keyword">echo <span class="hljs-string">'&lt;script&gt;alert("发版失败,错误代码:'.$errcode.<span class="hljs-string">'");history.back();&lt;/script&gt;';
                  }
                }
            }
      }
    }
}</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<p>wxminiprograms数据表,保存已授权小程序的基本信息及授权相关信息(authorizer_access_token/authorizer_refresh_token)这两个值很重要,代小程序实现业务基本上是通过这两个值来实现</p>
<pre class="hljs sql"><code><span class="hljs-comment">-- Adminer 4.6.2 MySQL dump

<span class="hljs-keyword">SET <span class="hljs-keyword">NAMES utf8;
<span class="hljs-keyword">SET <span class="hljs-keyword">time_zone = <span class="hljs-string">'+00:00';
<span class="hljs-keyword">SET foreign_key_checks = <span class="hljs-number">0;
<span class="hljs-keyword">SET sql_mode = <span class="hljs-string">'NO_AUTO_VALUE_ON_ZERO';

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


<span class="hljs-comment">-- 2018-06-19 09:32:49</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<p>wxminiprogram_audit数据表,保存提交审核的小程序</p>
<pre class="hljs sql"><code><span class="hljs-comment">-- Adminer 4.6.2 MySQL dump

<span class="hljs-keyword">SET <span class="hljs-keyword">NAMES utf8;
<span class="hljs-keyword">SET <span class="hljs-keyword">time_zone = <span class="hljs-string">'+00:00';
<span class="hljs-keyword">SET foreign_key_checks = <span class="hljs-number">0;
<span class="hljs-keyword">SET sql_mode = <span class="hljs-string">'NO_AUTO_VALUE_ON_ZERO';

<span class="hljs-keyword">DROP <span class="hljs-keyword">TABLE <span class="hljs-keyword">IF <span class="hljs-keyword">EXISTS <span class="hljs-string">`wxminiprogram_audit`;
<span class="hljs-keyword">CREATE <span class="hljs-keyword">TABLE <span class="hljs-string">`wxminiprogram_audit` (
<span class="hljs-string">`id` <span class="hljs-built_in">int(<span class="hljs-number">10) <span class="hljs-keyword">unsigned <span class="hljs-keyword">NOT <span class="hljs-literal">NULL AUTO_INCREMENT <span class="hljs-keyword">COMMENT <span class="hljs-string">'ID',
<span class="hljs-string">`appid` <span class="hljs-built_in">varchar(<span class="hljs-number">45) <span class="hljs-keyword">NOT <span class="hljs-literal">NULL <span class="hljs-keyword">COMMENT <span class="hljs-string">'小程序appid',
<span class="hljs-string">`auditid` <span class="hljs-built_in">varchar(<span class="hljs-number">45) <span class="hljs-keyword">NOT <span class="hljs-literal">NULL <span class="hljs-keyword">COMMENT <span class="hljs-string">'审核编号',
<span class="hljs-string">`status` tinyint(<span class="hljs-number">1) <span class="hljs-keyword">unsigned <span class="hljs-keyword">NOT <span class="hljs-literal">NULL <span class="hljs-keyword">DEFAULT <span class="hljs-string">'3' <span class="hljs-keyword">COMMENT <span class="hljs-string">'审核状态,其中0为审核成功,1为审核失败,2为审核中,3已提交审核',
<span class="hljs-string">`reason` <span class="hljs-built_in">varchar(<span class="hljs-number">255) <span class="hljs-keyword">DEFAULT <span class="hljs-literal">NULL <span class="hljs-keyword">COMMENT <span class="hljs-string">'当status=1,审核被拒绝时,返回的拒绝原因',
<span class="hljs-string">`create_time` <span class="hljs-keyword">timestamp <span class="hljs-keyword">NOT <span class="hljs-literal">NULL <span class="hljs-keyword">DEFAULT <span class="hljs-keyword">CURRENT_TIMESTAMP <span class="hljs-keyword">ON <span class="hljs-keyword">UPDATE <span class="hljs-keyword">CURRENT_TIMESTAMP <span class="hljs-keyword">COMMENT <span class="hljs-string">'提交审核时间',
PRIMARY <span class="hljs-keyword">KEY (<span class="hljs-string">`id`)
) <span class="hljs-keyword">ENGINE=<span class="hljs-keyword">InnoDB <span class="hljs-keyword">DEFAULT <span class="hljs-keyword">CHARSET=utf8 <span class="hljs-keyword">COMMENT=<span class="hljs-string">'微信小程序提交审核的小程序';


<span class="hljs-comment">-- 2018-06-19 09:35:07</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre>
<p><span class="img-wrap"><img title="clipboard.png" src="https://segmentfault.com/img/bVbcsLy?w=663&amp;h=965" alt="clipboard.png"></span></p>
<p><span class="img-wrap"><img title="图片描述" src="https://segmentfault.com/img/bVbcno4?w=722&amp;h=354" alt="图片描述"></span></p><br><br>
来源:https://www.cnblogs.com/valu/p/12397064.html
頁: [1]
查看完整版本: 微信第三方平台开发之代小程序实现业务