成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

微信消息處理

leoperfect / 2500人閱讀

摘要:配置首先登錄微信公眾平臺(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í)需要使用。

驗(yàn)證

開(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)流程如下:

tokentimestamp、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

相關(guān)文章

  • 【Node.js 微信公眾號(hào)實(shí)戰(zhàn)】4.Node.js 微信消息管理

    摘要:消息推送也是微信公眾號(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ā)更為有趣的功能,涉及到文本消息、圖片消...

    lewinlee 評(píng)論0 收藏0
  • 【實(shí)戰(zhàn)教程】使用知曉云完成微信卡券消息處理

    摘要:此教程將帶領(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ā)器。 該...

    Karrdy 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<