国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

微信消息處理

leoperfect / 2493人閱讀

摘要:配置首先登錄微信公眾平臺,在開發(fā)基本配置中填寫服務(wù)器配置接收處理微信消息的地址保存好你的配置,在加解密時需要使用。若確認(rèn)此次請求來自微信服務(wù)器,請原樣返回參數(shù)內(nèi)容,則接入生效,成為開發(fā)者成功,否則接入失敗。

配置

首先登錄微信公眾平臺 https://mp.weixin.qq.com,在開發(fā)->基本配置中填寫服務(wù)器配置(接收處理微信消息的地址)

保存好你的配置,在加解密時需要使用。

驗證

開發(fā)者提交信息后,微信服務(wù)器將發(fā)送GET請求到填寫的服務(wù)器地址URL上,GET請求攜帶參數(shù)如下表所示:

參數(shù) 描述
signature 微信加密簽名,signature結(jié)合了開發(fā)者填寫的token參數(shù)和請求中的timestamp參數(shù)、nonce參數(shù)。
timestamp 時間戳
nonce 隨機(jī)數(shù)
echostr 隨機(jī)字符串

開發(fā)者通過檢驗 signature 對請求進(jìn)行校驗(下面有校驗方式)。若確認(rèn)此次GET請求來自微信服務(wù)器,請原樣返回 echostr 參數(shù)內(nèi)容,則接入生效,成為開發(fā)者成功,否則接入失敗。

加密/校驗流程如下:

tokentimestampnonce 三個參數(shù)進(jìn)行字典序排序

將三個參數(shù)字符串拼接成一個字符串進(jìn)行 sha1 加密

開發(fā)者獲得加密后的字符串可與 signature 對比,標(biāo)識該請求來源于微信

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);
//對密文進(jìn)行解密 Prpcrypt類在pkcs7Encoder.php里
$result = (new PrpCrypt("你配置的EncodingAESKey"))->decrypt($secretData[1]);

之后就根據(jù)具體業(yè)務(wù)來實現(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") {
    //掃描公眾號二維碼關(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") {
    //卡券審核通過或?qū)徍宋赐ㄟ^事件
}
if ($event === "user_get_card") {
    //卡券領(lǐng)取事件
}
if ($event === "user_consume_card") {
    //卡券核銷事件
}

//其他事件不處理
return false;

需要發(fā)送加密消息時:

$wxBizMsg = new WxBizMsgCrypt("你配置的Token", "你配置的EncodingAESKey", "你公眾號的APPID");
//加密后的消息,傳引用
$encryptMsg = "";
//未加密的消息為XML格式的字符串
echo $wxBizMsg->encryptMsg("未加密的消息", time(), str_random(16), $encryptMsg);

假如服務(wù)器無法保證在五秒內(nèi)處理并回復(fù),必須做出下述回復(fù),這樣微信服務(wù)器才不會對此作任何處理,并且不會發(fā)起重試(這種情況下,可以使用客服消息接口進(jìn)行異步回復(fù)),否則,將出現(xiàn)嚴(yán)重的錯誤提示。
詳見下面說明:

直接回復(fù)success(推薦方式)

直接回復(fù)空串(指字節(jié)長度為0的空字符串,而不是XML結(jié)構(gòu)體中content字段的內(nèi)容為空)

一旦遇到以下情況,微信都會在公眾號會話中,向用戶下發(fā)系統(tǒng)提示“該公眾號暫時無法提供服務(wù),請稍后再試”:

開發(fā)者在5秒內(nèi)未回復(fù)任何內(nèi)容

開發(fā)者回復(fù)了異常數(shù)據(jù),比如JSON數(shù)據(jù)等

具體的各種XML格式見:被動回復(fù)用戶消息

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/28745.html

相關(guān)文章

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

    摘要:消息推送也是微信公眾號開發(fā)更為有趣的功能,涉及到文本消息圖片消息語音消息視頻消息音樂消息以及圖文消息。在文件中創(chuàng)建文件用于消息的管理。 一、寫在前面的話 ??當(dāng)用戶發(fā)送消息給公眾號時(或某些特定的用戶操作引發(fā)的事件推送時),會產(chǎn)生一個POST請求,開發(fā)者可以在響應(yīng)包(Get)中返回特定XML結(jié)構(gòu),來對該消息進(jìn)行響應(yīng)。 ??消息推送也是微信公眾號開發(fā)更為有趣的功能,涉及到文本消息、圖片消...

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

    摘要:此教程將帶領(lǐng)大家體驗這個新功能,實現(xiàn)一個微信消息推送類型的觸發(fā)器。進(jìn)入公眾號后臺點擊開發(fā)基本配置服務(wù)器配置,同步配置成知曉云消息推送的相關(guān)配置,完成配置后,微信消息推送類型的觸發(fā)器方可使用。 知曉云新推出「消息推送」功能,該功能通過「消息推送」類型的觸發(fā)器接收微信推送過來的消息,開發(fā)者可以對此消息實行相關(guān)操作。 此教程將帶領(lǐng)大家體驗這個新功能,實現(xiàn)一個「微信消息推送」類型的觸發(fā)器。 該...

    Karrdy 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<