用微信第三方平臺開發(fā)實現(xiàn)小程序業(yè)務(wù)合瓢,代碼很全,每一步都有詳細(xì)介紹透典,供大家學(xué)習(xí)參考晴楔。采用TP5框架
第一步:申請微信開放平臺帳號并創(chuàng)建第三方平臺
第二步:公眾號/小程序授權(quán)給第三方平臺
<?php
/*
* 微信第三方平臺授權(quán)流程
*/
namespace app\home\controller;
class Weixin extends Common
{
private $appid = 'wx3e******165c'; //第三方平臺應(yīng)用appid
private $appsecret = '13e**********d039'; //第三方平臺應(yīng)用appsecret
private $token = 'ePF58******Q2Ae'; //第三方平臺應(yīng)用token(消息校驗Token)
private $encodingAesKey = 'bzH***FCamD'; //第三方平臺應(yīng)用Key(消息加解密Key)
private $component_ticket= 'ticket@**xv-g'; //微信后臺推送的ticket,用于獲取第三方平臺接口調(diào)用憑據(jù)
/*
* 掃碼授權(quán)峭咒,注意此URL必須放置在頁面當(dāng)中用戶點擊進(jìn)行跳轉(zhuǎn)税弃,不能通過程序跳轉(zhuǎn),否則將出現(xiàn)“請確認(rèn)授權(quán)入口頁所在域名凑队,與授權(quán)后回調(diào)頁所在域名相同....”錯誤
* @params string $redirect_uri : 掃碼成功后的回調(diào)地址
* @params int $auth_type : 授權(quán)類型则果,1公眾號,2小程序漩氨,3公眾號/小程序同時展現(xiàn)西壮。不傳參數(shù)默認(rèn)都展示
*/
public function startAuth($redirect_uri,$auth_type = 3)
{
$url = "https://mp.weixin.qq.com/cgi-bin/componentloginpage?component_appid=".$this->appid."&pre_auth_code=".$this->get_pre_auth_code()."&redirect_uri=".urlencode($redirect_uri)."&auth_type=".$auth_type;
return $url;
}
/*
* 獲取第三方平臺access_token
* 注意,此值應(yīng)保存叫惊,代碼這里沒保存
*/
private function get_component_access_token()
{
$url = "https://api.weixin.qq.com/cgi-bin/component/api_component_token";
$data = '{
"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;
}
}
/*
* 第三方平臺方獲取預(yù)授權(quán)碼pre_auth_code
*/
private function get_pre_auth_code()
{
$url = "https://api.weixin.qq.com/cgi-bin/component/api_create_preauthcode?component_access_token=".$this->get_component_access_token();
$data = '{"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;
}
}
/*
* 發(fā)起POST網(wǎng)絡(luò)提交
* @params string $url : 網(wǎng)絡(luò)地址
* @params json $data : 發(fā)送的json格式數(shù)據(jù)
*/
private function https_post($url,$data)
{
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
if (!empty($data)){
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
}
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($curl);
curl_close($curl);
return $output;
}
/*
* 發(fā)起GET網(wǎng)絡(luò)提交
* @params string $url : 網(wǎng)絡(luò)地址
*/
private function https_get($url)
{
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($curl, CURLOPT_HEADER, FALSE) ;
curl_setopt($curl, CURLOPT_TIMEOUT,60);
if (curl_errno($curl)) {
return 'Errno'.curl_error($curl);
}
else{$result=curl_exec($curl);}
curl_close($curl);
return $result;
}
}
<?php
/*
* 接收微信官方推送的ticket值以及取消授權(quán)等操作
*/
namespace app\home\controller;
use think\Db;
class Openoauth extends Common
{
private $appid = 'wx3e******165c'; //第三方平臺應(yīng)用appid
private $appsecret = '13e**********d039'; //第三方平臺應(yīng)用appsecret
private $token = 'ePF58******Q2Ae'; //第三方平臺應(yīng)用token(消息校驗Token)
private $encodingAesKey = 'bzH***FCamD'; //第三方平臺應(yīng)用Key(消息加解密Key)
private $component_ticket= 'ticket@**xv-g'; //微信后臺推送的ticket,用于獲取第三方平臺接口調(diào)用憑據(jù)
/*
* 接收微信官方推送的消息(每10分鐘1次)
* 這里需要引入微信官方提供的加解密碼示例包
* 官方文檔:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419318479&token=&lang=zh_CN
* 示例包下載:https://wximg.gtimg.com/shake_tv/mpwiki/cryptoDemo.zip
*/
public function index()
{
$encryptMsg = file_get_contents("php://input");
$xml_tree = new \DOMDocument();
$xml_tree->loadXML($encryptMsg);
$xml_array = $xml_tree->getElementsByTagName("Encrypt");
$encrypt = $xml_array->item(0)->nodeValue;
require_once('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") {
//取消公眾號/小程序授權(quán)
$array_b = $xml->getElementsByTagName("AuthorizerAppid");
$AuthorizerAppid = $array_b->item(0)->nodeValue; //公眾號/小程序appid
$where = array("type" => 1, "appid" => $AuthorizerAppid);
$save = array("authorizer_access_token" => "", "authorizer_refresh_token" => "", "authorizer_expires" => 0);
Db::name("wxuser")->where($where)->update($save); //公眾號取消授權(quán)
Db::name("wxminiprograms")->where('authorizer_appid',$AuthorizerAppid)->update($save); //小程序取消授權(quán)
} else if ($infoType == "component_verify_ticket") {
//微信官方推送的ticket值
$array_e = $xml->getElementsByTagName("ComponentVerifyTicket");
$component_verify_ticket = $array_e->item(0)->nodeValue;
if (Db::name("weixin_account")->where(array("type" => 1))->update(array("component_verify_ticket" => $component_verify_ticket, "date_time" => time()))) {
$this->updateAccessToken($component_verify_ticket);
echo "success";
}
}
}
}
/*
* 更新component_access_token
* @params string $component_verify_ticket
* */
private function updateAccessToken($component_verify_ticket)
{
$weixin_account = Db::name('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
/*
* 代小程序?qū)崿F(xiàn)業(yè)務(wù)
*/
namespace app\home\model;
use think\Model;
use think\Db;
use think\Cache;
class Miniprogram extends Model
{
private $thirdAppId; //開放平臺appid
private $encodingAesKey; //開放平臺encodingAesKey
private $thirdToken; //開放平臺token
private $thirdAccessToken; //開放平臺access_token
private $authorizer_appid;
private $authorizer_access_token;
private $authorizer_refresh_token;
public function __construct($appid)
{
$weixin_account = Db::name('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;
}
}
/*
* 設(shè)置小程序服務(wù)器地址款青,無需加https前綴,但域名必須可以通過https訪問
* @params string / array $domains : 域名地址霍狰。只接收一維數(shù)組抡草。
* */
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("設(shè)置小程序服務(wù)器地址失敗,appid:".$this->authorizer_appid,$ret);
return false;
}
}
/*
* 設(shè)置小程序業(yè)務(wù)域名饰及,無需加https前綴,但域名必須可以通過https訪問
* @params string / array $domains : 域名地址康震。只接收一維數(shù)組燎含。
* */
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("設(shè)置小程序業(yè)務(wù)域名失敗,appid:".$this->authorizer_appid,$ret);
return false;
}
}
/*
* 成員管理,綁定小程序體驗者
* @params string $wechatid : 體驗者的微信號
* */
public function bindMember($wechatid)
{
$url = "https://api.weixin.qq.com/wxa/bind_tester?access_token=".$this->authorizer_access_token;
$data = '{"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;
}
}
/*
* 為授權(quán)的小程序帳號上傳小程序代碼
* @params int $template_id : 模板ID
* @params json $ext_json : 小程序配置文件,json格式
* @params string $user_version : 代碼版本號
* @params string $user_desc : 代碼描述
* */
public function uploadCode($template_id = 1, $user_version = '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("為授權(quán)的小程序帳號上傳小程序代碼操作失敗,appid:".$this->authorizer_appid,$ret);
return false;
}
}
/*
* 獲取體驗小程序的體驗二維碼
* @params string $path : 指定體驗版二維碼跳轉(zhuǎn)到某個具體頁面
* */
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 : 小程序標(biāo)簽答姥,多個標(biāo)簽以空格分開
* @params strint $title : 小程序頁面標(biāo)題铣除,長度不超過32
* */
public function submitReview($tag = "魔盒CMS 微信投票 微網(wǎng)站 微信商城" ,$title = "魔盒CMS微信公眾號營銷小程序開發(fā)")
{
$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;
}
}
/*
* 小程序?qū)徍顺坊? * 單個帳號每天審核撤回次數(shù)最多不超過1次鹦付,一個月不超過10次尚粘。
* */
public function unDoCodeAudit()
{
$url = "https://api.weixin.qq.com/wxa/undocodeaudit?access_token=".$this->authorizer_access_token;
$ret = json_decode(https_get($url));
if($ret->errcode == 0) {
return true;
} else {
$this->errorLog("小程序?qū)徍顺坊夭僮魇。琣ppid:".$this->authorizer_appid,$ret);
return false;
}
}
/*
* 查詢指定版本的審核狀態(tài)
* @params string $auditid : 提交審核時獲得的審核id
* */
public function getAuditStatus($auditid)
{
$url = "https://api.weixin.qq.com/wxa/get_auditstatus?access_token=".$this->authorizer_access_token;
$data = '{"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("查詢指定版本的審核狀態(tài)操作失敗敲长,appid:".$this->authorizer_appid,$ret);
return false;
}
}
/*
* 查詢最新一次提交的審核狀態(tài)
* */
public function getLastAudit()
{
$url = "https://api.weixin.qq.com/wxa/get_latest_auditstatus?access_token=".$this->authorizer_access_token;
$ret = json_decode(https_get($url));
if($ret->errcode == 0) {
$reason = $ret->reason ? $ret->reason : '';
Db::name('wxminiprogram_audit')->where(['appid'=>$this->authorizer_appid,'auditid'=>$ret->auditid])->update([
'status'=>$ret->status,
'reason'=>$reason
]);
return $ret->auditid;
} else {
$this->errorLog("查詢最新一次提交的審核狀態(tài)操作失敗郎嫁,appid:".$this->authorizer_appid,$ret);
return false;
}
}
/*
* 發(fā)布已通過審核的小程序
* */
public function release()
{
$url = "https://api.weixin.qq.com/wxa/release?access_token=".$this->authorizer_access_token;
$data = '{}';
$ret = json_decode(https_post($url,$data));
if($ret->errcode == 0) {
return true;
} else {
$this->errorLog("發(fā)布已通過審核的小程序操作失敗,appid:".$this->authorizer_appid,$ret);
return $ret->errcode;
}
}
/*
* 獲取授權(quán)小程序帳號的可選類目
* */
private function getCategory()
{
$url = "https://api.weixin.qq.com/wxa/get_category?access_token=".$this->authorizer_access_token;
$ret = json_decode(https_get($url));
if($ret->errcode == 0) {
return $ret->category_list;
} else {
$this->errorLog("獲取授權(quán)小程序帳號的可選類目操作失敗祈噪,appid:".$this->authorizer_appid,$ret);
return false;
}
}
/*
* 獲取小程序的第三方提交代碼的頁面配置
* */
private function getPage()
{
$url = "https://api.weixin.qq.com/wxa/get_page?access_token=".$this->authorizer_access_token;
$ret = json_decode(https_get($url));
if($ret->errcode == 0) {
return $ret->page_list;
} else {
$this->errorLog("獲取小程序的第三方提交代碼的頁面配置失敗泽铛,appid:".$this->authorizer_appid,$ret);
return false;
}
}
/*
* 更新授權(quán)小程序的authorizer_access_token
* @params string $appid : 小程序appid
* @params string $refresh_token : 小程序authorizer_refresh_token
* */
private function update_authorizer_access_token($appid,$refresh_token)
{
$url = '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("更新授權(quán)小程序的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
//代小程序?qū)崿F(xiàn)業(yè)務(wù)示例包
namespace app\user\controller;
use app\home\model\Miniprogram;
use think\Db;
class Wxminiprogram extends Pub
{
public $appid = 'wx57****1bfb'; //需要實現(xiàn)業(yè)務(wù)小程序appid
public function index()
{
return view();
}
public function doAction()
{
if(request()->isPost()) {
$action = input('action');
$mini = new Miniprogram($this->appid);
if($action == 'auth') {
//小程序授權(quán)
echo '<script>alert("已授權(quán)");history.back();</script>';
} elseif($action == 'setServerDomain') {
//設(shè)置小程序服務(wù)器域名地址
if($mini->setServerDomain()){
echo '<script>alert("設(shè)置小程序服務(wù)器域名操作成功");history.back();</script>';
} else {
echo '<script>alert("設(shè)置小程序服務(wù)器域名操作失敗或已設(shè)置,請查看日志");history.back();</script>';
}
} elseif($action == 'setBusinessDomain') {
//設(shè)置業(yè)務(wù)域名
if($mini->setBusinessDomain()){
echo '<script>alert("設(shè)置小程序業(yè)務(wù)域名操作成功");history.back();</script>';
} else {
echo '<script>alert("設(shè)置小程序業(yè)務(wù)域名操作失敗或已設(shè)置辑鲤,請查看日志");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("有待處理的版本月褥,請先處理該版本相關(guān)事項再提交新的審核弛随。審核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') {
//查詢指定版本的審核狀態(tài)
$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("未知狀態(tài)......");history.back();</script>';
}
} else {
echo '<script>alert("查詢指定版本的審核狀態(tài)操作失敗舀透,請查看日志");history.back();</script>';
}
} else {
echo '<script>alert("請輸入要查詢的審核ID");history.back();</script>';
}
} elseif($action == 'lastAudit') {
//查詢最新一次提交的審核狀態(tài)
$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("未知狀態(tài)......");history.back();</script>';
}
}else {
echo '<script>alert("查詢最新一次提交的審核狀態(tài)操作失敗决左,請查看日志");history.back();</script>';
}
} elseif($action == 'release') {
//發(fā)布已通過審核的小程序
$auditid = Db::name('wxminiprogram_audit')->where(['appid'=>$this->appid,'status'=>['neq',0]])->order('create_time','desc')->value('auditid');
if($auditid){
echo '<script>alert("有待處理的版本愕够,請先處理該版本相關(guān)事項再發(fā)布版本。審核ID:'.$auditid.'");history.back();</script>';
} else {
$errcode = $mini->release();
if($errcode){
echo '<script>alert("已發(fā)版");history.back();</script>';
} else {
echo '<script>alert("發(fā)版失敗佛猛,錯誤代碼:'.$errcode.'");history.back();</script>';
}
}
}
}
}
}
wxminiprograms數(shù)據(jù)表惑芭,保存已授權(quán)小程序的基本信息及授權(quán)相關(guān)信息(authorizer_access_token/authorizer_refresh_token)這兩個值很重要,代小程序?qū)崿F(xiàn)業(yè)務(wù)基本上是通過這兩個值來實現(xiàn)
-- 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 '授權(quán)方認(rèn)證類型继找,-1代表未認(rèn)證强衡,0代表微信認(rèn)證',
`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格式缩搅。判斷是否為小程序類型授權(quán)越败,包含network小程序已設(shè)置的各個服務(wù)器域名',
`func_info` longtext COMMENT 'json格式。權(quán)限集列表硼瓣,ID為17到19時分別代表: 17.帳號管理權(quán)限 18.開發(fā)管理權(quán)限 19.客服消息管理權(quán)限 請注意: 1)該字段的返回不會考慮小程序是否具備該權(quán)限集的權(quán)限(因為可能部分具備)究飞。',
`authorizer_appid` varchar(45) DEFAULT NULL COMMENT '小程序appid',
`authorizer_access_token` varchar(255) DEFAULT NULL COMMENT '授權(quán)方接口調(diào)用憑據(jù)(在授權(quán)的公眾號或小程序具備API權(quán)限時,才有此返回值)堂鲤,也簡稱為令牌',
`authorizer_expires` int(10) unsigned DEFAULT NULL COMMENT 'refresh有效期',
`authorizer_refresh_token` varchar(255) DEFAULT NULL COMMENT '接口調(diào)用憑據(jù)刷新令牌',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '授權(quán)時間',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='微信小程序授權(quán)列表';
-- 2018-07-25 09:32:49
wxminiprogram_audit數(shù)據(jù)表亿傅,保存提交審核的小程序
-- 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 '審核狀態(tài),其中0為審核成功瘟栖,1為審核失敗葵擎,2為審核中,3已提交審核',
`reason` varchar(255) DEFAULT NULL COMMENT '當(dāng)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
轉(zhuǎn)載地址