摘要:第一步申請微信開放平臺帳號并創(chuàng)建第三方平臺第二步公眾號小程序授權(quán)給第三方平臺官方文檔微信第三方平臺授權(quán)流程第三方平臺應(yīng)用第三方平臺應(yīng)用第三方平臺應(yīng)用消息校驗第三方平臺應(yīng)用消息加解密微信后臺推送的用于獲取第三方平臺接口調(diào)用憑據(jù)掃碼授權(quán),注意
第一步:申請微信開放平臺帳號并創(chuàng)建第三方平臺
第二步:公眾號/小程序授權(quán)給第三方平臺
官方文檔:https://open.weixin.qq.com/cg...
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; } }
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]); } } } }
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ū)徍顺坊夭僮魇?,appid:".$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); } }
isPost()) { $action = input("action"); $mini = new Miniprogram($this->appid); if($action == "auth") { //小程序授權(quán) echo ""; } elseif($action == "setServerDomain") { //設(shè)置小程序服務(wù)器域名地址 if($mini->setServerDomain()){ echo ""; } else { echo ""; } } elseif($action == "setBusinessDomain") { //設(shè)置業(yè)務(wù)域名 if($mini->setBusinessDomain()){ echo ""; } else { echo ""; } } elseif($action == "bind") { //綁定小程序體驗者 $wechatid = input("wechatid"); if($wechatid) { if($mini->bindMember($wechatid)){ echo ""; } else { echo ""; } } else { echo ""; } } elseif($action == "uploadCode") { //上傳小程序代碼 if($mini->uploadCode(2)){ echo ""; } else { echo ""; } } elseif($action == "getExpVersion") { //獲取體驗小程序的體驗二維碼 $qrcode = $mini->getExpVersion(); if($qrcode){ echo ""; } else { echo ""; } } elseif($action == "review") { //提交審核 $auditid = Db::name("wxminiprogram_audit")->where(["appid"=>$this->appid,"status"=>["neq",0]])->order("create_time","desc")->value("auditid"); if($auditid){ echo ""; } else { if($mini->submitReview()){ echo ""; } else { echo ""; } } } 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 ""; } elseif($audit["status"] == 1) { echo ""; } elseif($audit["status"] == 2) { echo ""; } else { echo ""; } } else { echo ""; } } else { echo ""; } } 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 ""; } elseif($audit["status"] == 1) { echo ""; } elseif($audit["status"] == 2) { echo ""; } else { echo ""; } }else { echo ""; } } 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 ""; } else { $errcode = $mini->release(); if($errcode){ echo ""; } else { echo ""; } } } } } }
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-06-19 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-06-19 09:35:07
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/28839.html
摘要:微信小程序即將推出,還沒推出就火的不行了?;谖⑿胚@個巨大平臺,小程序必然能有巨大成功。如果我們自己想實現(xiàn)一個基于自己的包含類似微信的小程序功能,該如何實現(xiàn)了我們先來看看小程序的技術(shù)特點。 微信小程序即將推出,還沒推出就火的不行了?;谖⑿胚@個巨大平臺,小程序必然能有巨大成功。不過它并不能完全取代App,該開發(fā)App還得開發(fā)。如果我們自己想實現(xiàn)一個基于自己的APP包含類似微信的小程序功...
摘要:中國互聯(lián)網(wǎng)絡(luò)信息中心發(fā)布的中國互聯(lián)網(wǎng)絡(luò)發(fā)展?fàn)顩r統(tǒng)計報告顯示,截至年月,我國網(wǎng)民規(guī)模達(dá)億人,微信月活億支付寶月活億百度月活億另一方面,中國手機(jī)占智能手機(jī)整體的比例超過,月活約億。在年末正式發(fā)布了面向未來的跨端的。 開源中國專訪:Chameleon原理首發(fā),其它跨多端統(tǒng)一框架都是假的? 原創(chuàng): 嘉賓-張楠 開源中國 以往我們說某一功能跨多端,往往是指在諸如 PC、移動等不同類型的設(shè)備之...
閱讀 1697·2021-10-09 09:44
閱讀 3263·2021-09-27 13:36
閱讀 1520·2021-09-22 15:33
閱讀 1274·2021-09-22 15:23
閱讀 1159·2021-09-06 15:02
閱讀 1695·2019-08-29 16:14
閱讀 2901·2019-08-29 15:26
閱讀 2408·2019-08-28 18:08