第一步:申请微信开放平台帐号并创建第三方平台
第二步:公众号/小程序授权给第三方平台
官方文档:https://open.weixin.qq.com/cg...
<?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-06-19 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-06-19 09:35:07
请发表评论