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

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

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

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

<?php /* *    微信第三方平台授权流程 */ namespace app\home\controller; class Weixin extends Common {     private $appid = 'wx3e******165c';            //第三方平台应用appid     private $appsecret = '13e**********d039';     //第三方平台应用appsecret     private $token = 'ePF58******Q2Ae';           //第三方平台应用token(消息校验Token)     private $encodingAesKey = 'bzH***FCamD';      //第三方平台应用Key(消息加解密Key)     private $component_ticket= 'ticket@**xv-g';   //微信后台推送的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."&pre_auth_code=".$this->get_pre_auth_code()."&redirect_uri=".urlencode($redirect_uri)."&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->appid.'" ,             "component_appsecret": "'.$this->appsecret.'",             "component_verify_ticket": "'.$this->component_ticket.'"         }';         $ret = json_decode($this->https_post($url,$data));         if($ret->errcode == 0) {             return $ret->component_access_token;         } else {             return $ret->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->get_component_access_token();         $data = '{"component_appid":"'.$this->appid.'"}';         $ret = json_decode($this->https_post($url,$data));         if($ret->errcode == 0) {             return $ret->pre_auth_code;         } else {             return $ret->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 app\home\controller; use think\Db; class Openoauth extends Common {     private $appid = 'wx3e******165c';            //第三方平台应用appid     private $appsecret = '13e**********d039';     //第三方平台应用appsecret     private $token = 'ePF58******Q2Ae';           //第三方平台应用token(消息校验Token)     private $encodingAesKey = 'bzH***FCamD';      //第三方平台应用Key(消息加解密Key)     private $component_ticket= 'ticket@**xv-g';   //微信后台推送的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->getElementsByTagName("Encrypt");         $encrypt = $xml_array->item(0)->nodeValue;         require_once('wxBizMsgCrypt.php');         $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") {                 //取消公众号/小程序授权                 $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);   //公众号取消授权                 Db::name("wxminiprograms")->where('authorizer_appid',$AuthorizerAppid)->update($save);   //小程序取消授权             } 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('weixin_account')->where(['type'=>1])->field('id,appId,appSecret,component_access_token,token_expires')->find();         if($weixin_account['token_expires'] <= time() ) {             $apiUrl = 'https://api.weixin.qq.com/cgi-bin/component/api_component_token';             $data = '{"component_appid":"'.$weixin_account['appId'].'" ,"component_appsecret": "'.$weixin_account['appSecret'].'","component_verify_ticket": "'.$component_verify_ticket.'"}';             $json = json_decode(_request($apiUrl,$data));             if(isset($json->component_access_token)) {                 Db::name('weixin_account')->where(['id'=>$weixin_account['id']])->update(['component_access_token'=>$json->component_access_token,'token_expires'=>time()+7200]);             }         }     } }
<?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')->where(['type' => 1])->field('token,encodingAesKey,appId,component_access_token')->find();         if ($weixin_account) {             $this->thirdAppId = $weixin_account['appId'];             $this->encodingAesKey = $weixin_account['encodingAesKey'];             $this->thirdToken = $weixin_account['token'];             $this->thirdAccessToken = $weixin_account['component_access_token'];              $miniprogram = Db::name('wxminiprograms')->where('authorizer_appid',$appid)                 ->field('authorizer_access_token,authorizer_refresh_token,authorizer_expires')->find();             if($miniprogram){                 $this->authorizer_appid = $appid;                 if(time() > $miniprogram['authorizer_expires']){                     $miniapp = $this->update_authorizer_access_token($appid,$miniprogram['authorizer_refresh_token']);                     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,'');                         exit;                     }                 } else {                     $this->authorizer_access_token = $miniprogram['authorizer_access_token'];                     $this->authorizer_refresh_token = $miniprogram['authorizer_refresh_token'];                 }              } else {                 $this->errorLog("小程序不存在,appid:".$this->authorizer_appid,'');                 exit;             }         } else {             $this->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->authorizer_access_token;         if(is_array($domain)) {             $https = ''; $wss = '';             foreach ($domain as $key => $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->errcode == 0) {             return true;         } else {             $this->errorLog("设置小程序服务器地址失败,appid:".$this->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->authorizer_access_token;         if(is_array($domain)) {             $https = '';             foreach ($domain as $key => $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->errcode == 0) {             return true;         } else {             $this->errorLog("设置小程序业务域名失败,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 = '{"wechatid":"'.$wechatid.'"}';         $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 = '{"wechatid":"'.$wechatid.'"}';         $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 = '{"action":"get_experiencer"}';         $ret = json_decode(https_post($url,$data));         if($ret->errcode == 0) {             return $ret->members;         } else {             $this->errorLog("获取小程序体验者列表操作失败,appid:".$this->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->authorizer_appid.'"}}');         $url = "https://api.weixin.qq.com/wxa/commit?access_token=".$this->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->errcode == 0) {             return true;         } else {             $this->errorLog("为授权的小程序帐号上传小程序代码操作失败,appid:".$this->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->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 : 小程序标签,多个标签以空格分开      * @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->getCategory();         if(!empty($category)) {             $first_class = $category[0]->first_class ? $category[0]->first_class : '' ;             $second_class = $category[0]->second_class ? $category[0]->second_class : '';             $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 = '{                 "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->errcode == 0) {             Db::name('wxminiprogram_audit')->insert([                 'appid'=>$this->authorizer_appid,                 'auditid'=>$ret->auditid,                 'create_time'=>date('Y-m-d H:i:s')             ]);             return true;         } else {             $this->errorLog("小程序提交审核操作失败,appid:".$this->authorizer_appid,$ret);             return false;         }     }     /*      * 小程序审核撤回      * 单个帐号每天审核撤回次数最多不超过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("小程序审核撤回操作失败,appid:".$this->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->authorizer_access_token;         $data = '{"auditid":"'.$auditid.'"}';         $ret = json_decode(https_post($url,$data));         if($ret->errcode == 0) {             $reason = $ret->reason ? $ret->reason : '';             Db::name('wxminiprogram_audit')->where(['appid'=>$this->authorizer_appid,'auditid'=>$auditid])->update([                 'status'=>$ret->status,                 'reason'=>$reason             ]);             return true;         } else {             $this->errorLog("查询指定版本的审核状态操作失败,appid:".$this->authorizer_appid,$ret);             return false;         }     }     /*      * 查询最新一次提交的审核状态      * */     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 : '';             Db::name('wxminiprogram_audit')->where(['appid'=>$this->authorizer_appid,'auditid'=>$ret->auditid])->update([                 'status'=>$ret->status,                 'reason'=>$reason             ]);             return $ret->auditid;         } else {             $this->errorLog("查询最新一次提交的审核状态操作失败,appid:".$this->authorizer_appid,$ret);             return false;         }     }     /*      * 发布已通过审核的小程序      * */     public function release()     {         $url = "https://api.weixin.qq.com/wxa/release?access_token=".$this->authorizer_access_token;         $data = '{}';         $ret = json_decode(https_post($url,$data));         if($ret->errcode == 0) {             return true;         } else {             $this->errorLog("发布已通过审核的小程序操作失败,appid:".$this->authorizer_appid,$ret);             return $ret->errcode;         }     }     /*      * 获取授权小程序帐号的可选类目      * */     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("获取授权小程序帐号的可选类目操作失败,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;         }     }     /*     * 更新授权小程序的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->thirdAccessToken;         $data = '{"component_appid":"' . $this->thirdAppId . '","authorizer_appid":"' . $appid . '","authorizer_refresh_token":"' . $refresh_token . '"}';         $ret = json_decode(https_post($url, $data));         if (isset($ret->authorizer_access_token)) {             Db::name('wxminiprograms')->where(['authorizer_appid' => $appid])->update(['authorizer_access_token' => $ret->authorizer_access_token, 'authorizer_expires' => (time() + 7200), 'authorizer_refresh_token' => $ret->authorizer_refresh_token]);             return $ret;         } else {             $this->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 app\user\controller; use app\home\model\Miniprogram; use think\Db; class Wxminiprogram extends Pub {     public $appid = 'wx57****1bfb';    //需要实现业务小程序appid     public function index()     {         return view();     }     public function doAction()     {         if(request()->isPost()) {             $action = input('action');             $mini = new Miniprogram($this->appid);             if($action == 'auth') {                 //小程序授权                 echo '<script>alert("已授权");history.back();</script>';             } elseif($action == 'setServerDomain') {                 //设置小程序服务器域名地址                 if($mini->setServerDomain()){                     echo '<script>alert("设置小程序服务器域名操作成功");history.back();</script>';                 } else {                     echo '<script>alert("设置小程序服务器域名操作失败或已设置,请查看日志");history.back();</script>';                 }             }  elseif($action == 'setBusinessDomain') {                 //设置业务域名                 if($mini->setBusinessDomain()){                     echo '<script>alert("设置小程序业务域名操作成功");history.back();</script>';                 } else {                     echo '<script>alert("设置小程序业务域名操作失败或已设置,请查看日志");history.back();</script>';                 }             }  elseif($action == 'bind') {                 //绑定小程序体验者                 $wechatid = input('wechatid');                 if($wechatid) {                     if($mini->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->uploadCode(2)){                     echo '<script>alert("上传小程序代码操作成功");history.back();</script>';                 } else {                     echo '<script>alert("上传小程序代码操作失败,请查看日志");history.back();</script>';                 }             }  elseif($action == 'getExpVersion') {                 //获取体验小程序的体验二维码                 $qrcode = $mini->getExpVersion();                 if($qrcode){                     echo '<script>window.location.href="'.$qrcode.'";</script>';                 } else {                     echo '<script>alert("获取体验小程序的体验二维码操作失败");history.back();</script>';                 }             } elseif($action == 'review') {                 //提交审核                 $auditid = Db::name('wxminiprogram_audit')->where(['appid'=>$this->appid,'status'=>['neq',0]])->order('create_time','desc')->value('auditid');                 if($auditid){                     echo '<script>alert("有待处理的版本,请先处理该版本相关事项再提交新的审核。审核ID:'.$auditid.'");history.back();</script>';                 } else {                     if($mini->submitReview()){                         echo '<script>alert("小程序提交审核操作成功");history.back();</script>';                     } else {                         echo '<script>alert("小程序提交审核操作失败,请查看日志");history.back();</script>';                     }                 }             } elseif($action == 'getAudit') {                 //查询指定版本的审核状态                 $auditid = input('auditid');                 if($auditid) {                     if($mini->getAuditStatus($auditid)){                         $audit = Db::name('wxminiprogram_audit')->where(['appid'=>$this->appid,'auditid'=>$auditid])->field('status,reason')->find();                         if($audit['status'] == 0) {                             echo '<script>alert("该版本审核已通过");history.back();</script>';                         } elseif($audit['status'] == 1) {                             echo '<script>alert("该版本审核失败,原因:'.$audit['reason'].'");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->getLastAudit();                 if($auditid){                     $audit = Db::name('wxminiprogram_audit')->where(['appid'=>$this->appid,'auditid'=>$auditid])->field('status,reason')->find();                     if($audit['status'] == 0) {                         echo '<script>alert("审核已通过");history.back();</script>';                     } elseif($audit['status'] == 1) {                         echo '<script>alert("审核失败,原因:'.$audit['reason'].'");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')->where(['appid'=>$this->appid,'status'=>['neq',0]])->order('create_time','desc')->value('auditid');                 if($auditid){                     echo '<script>alert("有待处理的版本,请先处理该版本相关事项再发布版本。审核ID:'.$auditid.'");history.back();</script>';                 } else {                     $errcode = $mini->release();                     if($errcode){                         echo '<script>alert("已发版");history.back();</script>';                     } else {                         echo '<script>alert("发版失败,错误代码:'.$errcode.'");history.back();</script>';                     }                 }             }         }     } }

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

-- Adminer 4.6.2 MySQL dump  SET 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 dump  SET 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

相关推荐:

微信公众平台开发者文档

PHP微信公众平台开发视频教程

以上就是终于整理出来了,用微信第三方平台授权小程序业务的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
标签: PHP
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:来看看你的颜值多高吧!基于Python开发的公众号

相关资讯