摘要:配置首先登錄微信公眾平臺(tái),在開(kāi)發(fā)基本配置中填寫(xiě)服務(wù)器配置接收處理微信消息的地址保存好你的配置,在加解密時(shí)需要使用。若確認(rèn)此次請(qǐng)求來(lái)自微信服務(wù)器,請(qǐng)?jiān)瓨臃祷貐?shù)內(nèi)容,則接入生效,成為開(kāi)發(fā)者成功,否則接入失敗。
配置
首先登錄微信公眾平臺(tái) https://mp.weixin.qq.com,在開(kāi)發(fā)->基本配置中填寫(xiě)服務(wù)器配置(接收處理微信消息的地址)
保存好你的配置,在加解密時(shí)需要使用。
開(kāi)發(fā)者提交信息后,微信服務(wù)器將發(fā)送GET請(qǐng)求到填寫(xiě)的服務(wù)器地址URL上,GET請(qǐng)求攜帶參數(shù)如下表所示:
參數(shù) | 描述 |
---|---|
signature | 微信加密簽名,signature結(jié)合了開(kāi)發(fā)者填寫(xiě)的token參數(shù)和請(qǐng)求中的timestamp參數(shù)、nonce參數(shù)。 |
timestamp | 時(shí)間戳 |
nonce | 隨機(jī)數(shù) |
echostr | 隨機(jī)字符串 |
開(kāi)發(fā)者通過(guò)檢驗(yàn) signature 對(duì)請(qǐng)求進(jìn)行校驗(yàn)(下面有校驗(yàn)方式)。若確認(rèn)此次GET請(qǐng)求來(lái)自微信服務(wù)器,請(qǐng)?jiān)瓨臃祷?echostr 參數(shù)內(nèi)容,則接入生效,成為開(kāi)發(fā)者成功,否則接入失敗。
加密/校驗(yàn)流程如下:
將 token、timestamp、nonce 三個(gè)參數(shù)進(jìn)行字典序排序
將三個(gè)參數(shù)字符串拼接成一個(gè)字符串進(jìn)行 sha1 加密
開(kāi)發(fā)者獲得加密后的字符串可與 signature 對(duì)比,標(biāo)識(shí)該請(qǐng)求來(lái)源于微信
public function validate() { $echoStr = Input::get("echostr"); if (!empty($echoStr)) { $signature = Input::get("signature"); $timestamp = Input::get("timestamp"); $nonce = Input::get("nonce"); $tmpArr = [ "你配置的Token", $timestamp, $nonce ]; sort($tmpArr); $tmpStr = implode("", $tmpArr); $tmpStr = sha1($tmpStr); if ($tmpStr == $signature) { echo $echoStr; exit; } } }
PHP示例代碼下載:下載
消息加解密微信官方文檔:加密解密技術(shù)方案
首先獲取微信發(fā)送的XML數(shù)據(jù):
$xmlString = file_get_contents("php://input");
使用下載的示例代碼解密消息:
//提供提取消息格式中的密文 XmlParse類在xmlparse.php里 $secretData = (new XmlParse())->extract($xmlString); //對(duì)密文進(jìn)行解密 Prpcrypt類在pkcs7Encoder.php里 $result = (new PrpCrypt("你配置的EncodingAESKey"))->decrypt($secretData[1]);
之后就根據(jù)具體業(yè)務(wù)來(lái)實(shí)現(xiàn)了:
$xmlFormatData = simplexml_load_string($result[1], "SimpleXMLElement", LIBXML_NOCDATA); $event = (string)$xmlFormatData->Event; $eventKey = isset($xmlFormatData->EventKey) ? (string)$xmlFormatData->EventKey : ""; $openId = (string)$xmlFormatData->FromUserName; $toUserName = (string)$xmlFormatData->ToUserName; //事件處理 if ($event === "VIEW" || $event == "CLICK") { //自定義菜單事件 } if (!$eventKey && $event == "subscribe") { //掃描公眾號(hào)二維碼關(guān)注事件 } if ($eventKey && $event == "subscribe") { //掃描二維碼關(guān)注事件 } if ($eventKey && $event == "SCAN") { //掃描生成的二維碼 } if ($event == "unsubscribe") { //取消關(guān)注事件 } if ($event === "card_pass_check" || $event === "card_not_pass_check") { //卡券審核通過(guò)或?qū)徍宋赐ㄟ^(guò)事件 } if ($event === "user_get_card") { //卡券領(lǐng)取事件 } if ($event === "user_consume_card") { //卡券核銷事件 } //其他事件不處理 return false;
需要發(fā)送加密消息時(shí):
$wxBizMsg = new WxBizMsgCrypt("你配置的Token", "你配置的EncodingAESKey", "你公眾號(hào)的APPID"); //加密后的消息,傳引用 $encryptMsg = ""; //未加密的消息為XML格式的字符串 echo $wxBizMsg->encryptMsg("未加密的消息", time(), str_random(16), $encryptMsg);
假如服務(wù)器無(wú)法保證在五秒內(nèi)處理并回復(fù),必須做出下述回復(fù),這樣微信服務(wù)器才不會(huì)對(duì)此作任何處理,并且不會(huì)發(fā)起重試(這種情況下,可以使用客服消息接口進(jìn)行異步回復(fù)),否則,將出現(xiàn)嚴(yán)重的錯(cuò)誤提示。
詳見(jiàn)下面說(shuō)明:
直接回復(fù)success(推薦方式)
直接回復(fù)空串(指字節(jié)長(zhǎng)度為0的空字符串,而不是XML結(jié)構(gòu)體中content字段的內(nèi)容為空)
一旦遇到以下情況,微信都會(huì)在公眾號(hào)會(huì)話中,向用戶下發(fā)系統(tǒng)提示“該公眾號(hào)暫時(shí)無(wú)法提供服務(wù),請(qǐng)稍后再試”:
開(kāi)發(fā)者在5秒內(nèi)未回復(fù)任何內(nèi)容
開(kāi)發(fā)者回復(fù)了異常數(shù)據(jù),比如JSON數(shù)據(jù)等
具體的各種XML格式見(jiàn):被動(dòng)回復(fù)用戶消息
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/28745.html
摘要:消息推送也是微信公眾號(hào)開(kāi)發(fā)更為有趣的功能,涉及到文本消息圖片消息語(yǔ)音消息視頻消息音樂(lè)消息以及圖文消息。在文件中創(chuàng)建文件用于消息的管理。 一、寫(xiě)在前面的話 ??當(dāng)用戶發(fā)送消息給公眾號(hào)時(shí)(或某些特定的用戶操作引發(fā)的事件推送時(shí)),會(huì)產(chǎn)生一個(gè)POST請(qǐng)求,開(kāi)發(fā)者可以在響應(yīng)包(Get)中返回特定XML結(jié)構(gòu),來(lái)對(duì)該消息進(jìn)行響應(yīng)。 ??消息推送也是微信公眾號(hào)開(kāi)發(fā)更為有趣的功能,涉及到文本消息、圖片消...
摘要:此教程將帶領(lǐng)大家體驗(yàn)這個(gè)新功能,實(shí)現(xiàn)一個(gè)微信消息推送類型的觸發(fā)器。進(jìn)入公眾號(hào)后臺(tái)點(diǎn)擊開(kāi)發(fā)基本配置服務(wù)器配置,同步配置成知曉云消息推送的相關(guān)配置,完成配置后,微信消息推送類型的觸發(fā)器方可使用。 知曉云新推出「消息推送」功能,該功能通過(guò)「消息推送」類型的觸發(fā)器接收微信推送過(guò)來(lái)的消息,開(kāi)發(fā)者可以對(duì)此消息實(shí)行相關(guān)操作。 此教程將帶領(lǐng)大家體驗(yàn)這個(gè)新功能,實(shí)現(xiàn)一個(gè)「微信消息推送」類型的觸發(fā)器。 該...
閱讀 2051·2021-10-08 10:05
閱讀 1892·2021-09-22 15:31
閱讀 3013·2021-09-22 15:13
閱讀 3492·2021-09-09 09:34
閱讀 2098·2021-09-03 10:46
閱讀 3128·2019-08-30 15:56
閱讀 1709·2019-08-30 15:53
閱讀 2364·2019-08-30 15:44