商城系統(tǒng) 注冊(cè)

視頻號(hào)小店信息推送接口

2023-03-16|HiShop
導(dǎo)讀:消息推送 開(kāi)發(fā)者服務(wù)器接收消息推送 開(kāi)發(fā)者需要按照如下步驟完成: 填寫(xiě)服務(wù)器配置 驗(yàn)證服務(wù)器地址的有效性 據(jù)接口文檔實(shí)現(xiàn)業(yè)務(wù)邏輯,接收消息和事件 第一步:填寫(xiě)服務(wù)器配置...

  消息推送

  開(kāi)發(fā)者服務(wù)器接收消息推送

  開(kāi)發(fā)者需要按照如下步驟完成:

  填寫(xiě)服務(wù)器配置

  驗(yàn)證服務(wù)器地址的有效性

  據(jù)接口文檔實(shí)現(xiàn)業(yè)務(wù)邏輯,接收消息和事件

  第一步:填寫(xiě)服務(wù)器配置

  登錄視頻號(hào)小店后臺(tái)后,在「服務(wù)市場(chǎng)」-「自研」-「消息推送」中,啟用消息服務(wù),填寫(xiě)服務(wù)器地址(URL)、令牌(Token) 和 消息加密密鑰(EncodingAESKey)等信息。(只有小店管理員才可以操作)

  URL: 開(kāi)發(fā)者用來(lái)接收微信消息和事件的接口 URL。開(kāi)發(fā)者所填寫(xiě)的URL 必須以 http:// 或 https:// 開(kāi)頭,分別支持 80 端口和 443 端口。

  Token: 可由開(kāi)發(fā)者可以任意填寫(xiě),用作生成簽名(該 Token 會(huì)和接口 URL 中包含的 Token 進(jìn)行比對(duì),從而驗(yàn)證安全性)。

  EncodingAESKey: 由開(kāi)發(fā)者手動(dòng)填寫(xiě)或隨機(jī)生成,將用作消息體加解密密鑰。

  注意,不再支持明文模式和混合模式,僅支持純密文模式。 加解密請(qǐng)參考消息加解密說(shuō)明

  注意,不再支持xml格式,僅支持JSON格式。

  

視頻號(hào)小店信息推送接口

 

  模式的選擇與服務(wù)器配置在提交后都會(huì)立即生效,請(qǐng)開(kāi)發(fā)者謹(jǐn)慎填寫(xiě)及選擇。

  第二步:驗(yàn)證消息的確來(lái)自微信服務(wù)器

  開(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)源于微信

  驗(yàn)證 URL 有效性成功后即接入生效,成為開(kāi)發(fā)者。

  檢驗(yàn) signature 的PHP示例代碼:

  private function checkSignature()

  {

  $signature = $_GET["signature"];

  $timestamp = $_GET["timestamp"];

  $nonce = $_GET["nonce"];

  $token = TOKEN;

  $tmpArr = array($token, $timestamp, $nonce);

  sort($tmpArr, SORT_STRING);

  $tmpStr = implode( $tmpArr );

  $tmpStr = sha1( $tmpStr );

  if ($tmpStr == $signature ) {

  return true;

  } else {

  return false;

  }

  }

  PHP示例代碼下載:下載

  第三步:接收消息和事件

  當(dāng)某些特定的用戶(hù)操作引發(fā)事件推送時(shí),微信服務(wù)器會(huì)將消息(或事件)的數(shù)據(jù)包以 POST 請(qǐng)求發(fā)送到開(kāi)發(fā)者配置的 URL,開(kāi)發(fā)者可以依據(jù)自身業(yè)務(wù)邏輯進(jìn)行響應(yīng)。

  微信服務(wù)器在將用戶(hù)的消息發(fā)給開(kāi)發(fā)者服務(wù)器地址后,微信服務(wù)器在五秒內(nèi)收不到響應(yīng)會(huì)斷掉連接,并且重新發(fā)起請(qǐng)求,總共重試三次。如果在調(diào)試中,發(fā)現(xiàn)用戶(hù)無(wú)法收到響應(yīng)的消息,可以檢查是否消息處理超時(shí)。關(guān)于重試的消息排重,有 msgid 的消息推薦使用 msgid 排重。事件類(lèi)型消息推薦使用 FromUserName + CreateTime 排重。

  服務(wù)器收到請(qǐng)求必須做出下述回復(fù),這樣微信服務(wù)器才不會(huì)對(duì)此作任何處理,并且不會(huì)發(fā)起重試,否則,將出現(xiàn)嚴(yán)重的錯(cuò)誤提示。詳見(jiàn)下面說(shuō)明:

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

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

  若接口文檔有指定返回內(nèi)容,應(yīng)按文檔說(shuō)明返回

電話咨詢(xún) 預(yù)約演示 0元開(kāi)店