微信小程式第三方平臺開發【全網釋出及全網釋出接入檢測】
折騰了幾個小時,終於通過了全網釋出接入檢測,進入稽核階段,半個小時之後稽核通過。
https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419318611&lang=zh_CN
這個是官方連結,不知是我看走眼了,還是官方寫的模模糊糊,總之網上查閱了不少資料才明白了思路。
好了,進入正題……
1、為了不必要的麻煩,我直接把官方給定的測試公眾號、測試小程式的原始ID加入了白名單裡。
2、由於我是開發小程式,這裡建立小程式第三方平臺時勾選的許可權集,根據官方的意思,如果勾選了訊息這類許可權,就要多弄一些檢測。
3、根據官方文件步驟,我最終只實現了兩步便成功通過全網釋出接入檢測。
並且所有檢測程式碼都在“訊息與事件接收URL”的URL中完成。順便說下小程式業務域名是指在web-view元件中承載網頁的外鏈。
第一步:採用自動回覆文字的方式
第二步:使用客服訊息介面傳送訊息
全部程式碼如下:
/**
* 訊息與事件接收URL
*/
public function receiveEvent()
{
// 每個授權小程式的appid,在第三方平臺的訊息與事件接收URL中設定了 $APPID$
$authorizer_appid = I('param.appid/s');
// 每個授權小程式傳來的加密訊息
$postStr = file_get_contents("php://input");
if (!empty($postStr)){
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$toUserName = trim($postObj->ToUserName);
$encrypt = trim($postObj->Encrypt);
$format = "<xml><ToUserName><![CDATA[{$toUserName}]]></ToUserName><Encrypt><![CDATA[%s]]></Encrypt></xml>";
$from_xml = sprintf($format, $encrypt);
$inputs = array(
'encrypt_type' => '',
'timestamp' => '',
'nonce' => '',
'msg_signature' => '',
'signature' => ''
);
foreach ($inputs as $key => $value) {
$tmp = $_REQUEST[$key];
if (!empty($tmp)){
$inputs[$key] = $tmp;
}
}
// 第三方收到公眾號平臺傳送的訊息
$msg = '';
$timeStamp = $inputs['timestamp'];
$msg_sign = $inputs['msg_signature'];
$nonce = $inputs['nonce'];
$token = 'xxxxxxxxxxx';
$encodingAesKey = 'xxxxxxxxxxxxxxxx';
$appid = 'xxxxxxxx';
$appsecret = 'xxxxxxxxxxxxxx';
vendor('minicrypto.wxBizMsgCrypt');
$pc = new \WXBizMsgCrypt($token, $encodingAesKey, $appid);
$errCode = $pc->decryptMsg($msg_sign, $timeStamp, $nonce, $from_xml, $msg);
if ($errCode == 0) {
$msgObj = simplexml_load_string($msg, 'SimpleXMLElement', LIBXML_NOCDATA);
$content = trim($msgObj->Content);
//第三方平臺全網釋出檢測普通文字訊息測試
if (strtolower($msgObj->MsgType) == 'text' && $content == 'TESTCOMPONENT_MSG_TYPE_TEXT') {
$toUsername = trim($msgObj->ToUserName);
if ($toUsername == 'gh_3c884a361561') {
$content = 'TESTCOMPONENT_MSG_TYPE_TEXT_callback';
echo $this->responseText($msgObj, $content);
}
}
//第三方平臺全網釋出檢測返回api文字訊息測試
if (strpos($content, 'QUERY_AUTH_CODE') !== false) {
$toUsername = trim($msgObj->ToUserName);
if ($toUsername == 'gh_3c884a361561') {
$query_auth_code = str_replace('QUERY_AUTH_CODE:', '', $content);
$params = $this->dedeLogic->api_query_auth($query_auth_code);
$authorizer_access_token = $params['authorization_info']['authorizer_access_token'];
$content = "{$query_auth_code}_from_api";
$this->sendServiceText($msgObj, $content, $authorizer_access_token);
}
}
// file_put_contents ( ROOT_PATH."/log.txt", date ( "Y-m-d H:i:s" ) . " " . var_export($msgObj,true) . "\r\n", FILE_APPEND );
}
}
echo "success";
}
/**
* 自動回覆文字
*/
public function responseText($object = '', $content = '')
{
if (!isset($content) || empty($content)){
return "";
}
$xmlTpl = "<xml>
<ToUserName><![CDATA[%s]]></ToUserName>
<FromUserName><![CDATA[%s]]></FromUserName>
<CreateTime>%s</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[%s]]></Content>
</xml>";
$result = sprintf($xmlTpl, $object->FromUserName, $object->ToUserName, time(), $content);
return $result;
}
/**
* 傳送文字訊息
*/
public function sendServiceText($object = '', $content = '', $access_token = '')
{
/* 獲得openId值 */
$openid = (string)$object->FromUserName;
$post_data = array(
'touser' => $openid,
'msgtype' => 'text',
'text' => array(
'content' => $content
)
);
$this->sendMessages($post_data, $access_token);
}
/**
* 傳送訊息-客服訊息
*/
public function sendMessages($post_data = array(), $access_token = '')
{
$url = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token={$access_token}";
httpRequest($url, 'POST', json_encode($post_data, JSON_UNESCAPED_UNICODE));
}
/**
* CURL請求
* @param $url 請求url地址
* @param $method 請求方法 get post
* @param null $postfields post資料陣列
* @param array $headers 請求header資訊
* @param bool|false $debug 除錯開啟 預設false
* @return mixed
*/
function httpRequest($url, $method="GET", $postfields = null, $headers = array(), $debug = false) {
$method = strtoupper($method);
$ci = curl_init();
/* Curl settings */
curl_setopt($ci, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
curl_setopt($ci, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0");
curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, 60); /* 在發起連線前等待的時間,如果設定為0,則無限等待 */
curl_setopt($ci, CURLOPT_TIMEOUT, 7); /* 設定cURL允許執行的最長秒數 */
curl_setopt($ci, CURLOPT_RETURNTRANSFER, true);
switch ($method) {
case "POST":
curl_setopt($ci, CURLOPT_POST, true);
if (!empty($postfields)) {
$tmpdatastr = is_array($postfields) ? http_build_query($postfields) : $postfields;
curl_setopt($ci, CURLOPT_POSTFIELDS, $tmpdatastr);
}
break;
default:
curl_setopt($ci, CURLOPT_CUSTOMREQUEST, $method); /* //設定請求方式 */
break;
}
$ssl = preg_match('/^https:\/\//i',$url) ? TRUE : FALSE;
curl_setopt($ci, CURLOPT_URL, $url);
if($ssl){
curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, FALSE); // https請求 不驗證證照和hosts
curl_setopt($ci, CURLOPT_SSL_VERIFYHOST, FALSE); // 不從證照中檢查SSL加密演算法是否存在
}
//curl_setopt($ci, CURLOPT_HEADER, true); /*啟用時會將標頭檔案的資訊作為資料流輸出*/
curl_setopt($ci, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ci, CURLOPT_MAXREDIRS, 2);/*指定最多的HTTP重定向的數量,這個選項是和CURLOPT_FOLLOWLOCATION一起使用的*/
curl_setopt($ci, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ci, CURLINFO_HEADER_OUT, true);
/*curl_setopt($ci, CURLOPT_COOKIE, $Cookiestr); * *COOKIE帶過去** */
$response = curl_exec($ci);
$requestinfo = curl_getinfo($ci);
$http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE);
if ($debug) {
echo "=====post data======\r\n";
var_dump($postfields);
echo "=====info===== \r\n";
print_r($requestinfo);
echo "=====response=====\r\n";
print_r($response);
}
curl_close($ci);
return $response;
//return array($http_code, $response,$requestinfo);
}
相關文章
- 微信開放平臺-第三方平臺-全網釋出邏輯
- 自媒體一鍵釋出平臺,3分鐘釋出全平臺
- 網易數帆釋出全棧低程式碼CodeWave智慧開發平臺 融合自研智慧大模型全棧大模型
- 微信小程式實現釋出作業微信小程式
- Flutter 1.5 釋出,正式成為全平臺 UI 框架!FlutterUI框架
- 【譯】Flutter 2.0 正式版釋出,全平臺 StableFlutter
- 解讀微信第三方平臺-代小程式開發
- douchat 4.0 新版釋出,助力小程式後臺開發
- 智慧小程式開發生態概覽及接入全流程
- iView 釋出微信小程式 UI 元件庫 iView WeappView微信小程式UI元件APP
- SecBench:首個網路安全大模型評測平臺釋出大模型
- 網易520重磅釋出全平臺遊戲 《代號:Ragnarok(諸神黃昏)》遊戲
- 網易520釋出全平臺遊戲 《代號:Ragnarok(諸神黃昏)》驚豔亮相遊戲
- 小程式全量釋出之後還是之前的版本
- 《英魂之刃戰略版》今日全平臺公測 李誕燒腦TVC釋出
- 網易雲首倡中臺方法論,釋出全鏈路中臺技術方案
- 微信小程式全國城市列表索引開發案例微信小程式索引
- JPressv1.0-rc2釋出,新增微信小程式SDK微信小程式
- 安利一個看全網vip影片的微信小程式微信小程式
- 科大訊飛1024釋出會全紀錄:堅持「人機耦合」落地,釋出iFLYOS開放平臺做生態
- 自媒體釋出工具,3-5分鐘把內容釋出全平臺
- “全棧合一 智慧運維”智和網管平臺SugarNMS V9版本釋出全棧運維
- 小程式 | 註釋級微信小程式demo,助你快速切入開發微信小程式
- LOVEPHP-WEB全棧開源框架釋出PHPWeb全棧框架
- 開源輕量級 IM 框架 MobileIMSDK 的微信小程式端已釋出!框架微信小程式
- 物聯網開源開發平臺 Shifu 開放內測!第一版技術文件釋出
- 低程式碼開發平臺,可無需程式碼快速釋出APIAPI
- 使用 TypeScript 開發 Node.js 的微信開放平臺/企業微信/釘釘開放平臺訊息 AES 加密解密庫並且釋出TypeScriptNode.js加密解密
- 使用開源ntfy訊息推送服務釋出通知實現全平臺接收通知
- 2020全網最新域名防封技術-微信域名封禁檢測介面
- 新版 Flutter 中文開發者網站釋出Flutter網站
- Taro 1.1 釋出,全面支援微信/百度/支付寶 小程式
- 微信小程式內嵌H5,釋出後無法開啟頁面微信小程式H5
- 微信小程式--簡約風部落格小程式(基於雲開發 - 全開源)微信小程式
- 重磅釋出 | Serverless 應用中心:Serverless 應用全生命週期管理平臺Server
- 微信小程式從基礎到釋出全流程_企業級商城實戰(含uni-app專案多端部署)微信小程式APP
- 第九代小冰釋出 將回歸微信平臺能隨時一對一聊天
- 線上教育平臺微信小程式如何開發建立?微信小程式