狀態碼造成微信公眾號“該公眾號提供的服務出現故障”

      網友投稿 943 2022-05-30

      bug描述

      我們使用NestJS寫后臺代碼,給微信公眾號提供服務。

      用戶給公眾號發消息時,公眾號會顯示“該公眾號提供的服務出現故障”。

      雖然后臺代碼可以正常處理業務,但這個提示非常影響用戶體驗。

      檢查

      根據微信公眾號文檔給的提示,出現這個問題的原因是沒有給微信服務器返回正確的信息。

      微信服務器需要的是success或者空的字符串。不能是json格式的字符串。

      搜了一下其他文章,有的說xml里也不能帶有空格;有的說公眾號綁定了第三方平臺,要去解綁。

      但這些和我們的情況不一致。

      給公眾號的接口是默認返回success的。

      狀態碼造成微信公眾號“該公眾號提供的服務出現故障”

      查看運行log,發現用戶發送1條消息給公眾號,我們的服務端會收到4條一模一樣的消息。

      這4條消息的MsgId是一樣的。網上也有人提供了防止重復消息的辦法。

      于是嘗試以下方法

      維護一個map,key是MsgId。

      接收到消息后,如果發現是重復的MsgId,則立刻返回success(或者空字符串)。

      但是問題依舊沒有解決。

      微信服務器認為它沒有拿到正確的返回值,于是走了重試的流程。

      我們ubuntu服務器上使用了nginx,于是我們查看nginx的log

      81.69.1.1 - - [03/Aug/2021:09:41:25 +0800] "POST /mywxserve/?signature=sign1111×tamp=1627954885&nonce=1832145745&openid=qqq HTTP/1.1" 201 0 "-" "Mozilla/4.0" 81.69.1.1 - - [03/Aug/2021:09:41:26 +0800] "POST /mywxserve/?signature=sign1111×tamp=1627954885&nonce=1832145745&openid=qqq HTTP/1.1" 201 7 "-" "Mozilla/4.0" 81.69.1.1 - - [03/Aug/2021:09:41:26 +0800] "POST /mywxserve/?signature=sign1111×tamp=1627954885&nonce=1832145745&openid=qqq HTTP/1.1" 201 7 "-" "Mozilla/4.0" 42.192.1.1 - - [03/Aug/2021:09:41:26 +0800] "POST /mywxserve/?signature=sign1111×tamp=1627954885&nonce=1832145745&openid=qqq HTTP/1.1" 201 7 "-" "Mozilla/4.0"

      可以看到有2個ip地址,發來了3+1次請求。看到nginx返回的狀態碼都是201。

      (ip地址和信息模糊處理)

      狀態碼201表示“已創建”。NestJS默認狀態碼是200,但是默認POST的狀態碼是201。

      修復

      我們強制讓nestjs返回狀態碼200

      @HttpCode(200) @Post() async onWxEvent(@Body('xml') xmlData: IWxMessageXmlData): Promise {}

      再嘗試一下,看到nginx的log,返回狀態碼是200了。公眾號也正常了。

      81.69.1.1 - - [03/Aug/2021:09:53:27 +0800] "POST /mywxserve/?signature=rustfisher×tamp=1627955607&nonce=1829147547&openid=xxx0 HTTP/1.1" 200 0 "-" "Mozilla/4.0"

      由此可見,接收微信公眾號消息的時候,除了要返回空字符串或者success文本;返回狀態碼必須是200。

      用其他的后臺框架可能不會遇到狀態碼問題。

      參考

      wx基礎消息能力-被動回復用戶消息 https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Passive_user_reply_message.html

      NestJS controller https://docs.nestjs.com/controllers#status-code

      NestJS文章集合 https://rustfisher.com/categories/NestJS/

      http狀態碼 https://rustfisher.com/2021/06/25/Network/http-code/

      HTTP Nest Nginx

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:辭舊迎新:還在使用“OceanConnect開發平臺”???快來使用設備接入云服務(IoTDA)!!!
      下一篇:Python爬蟲的多線程使用方法
      相關文章
      国产偷国产偷亚洲高清日韩| 亚洲日本在线电影| 2022中文字字幕久亚洲| 狠狠综合亚洲综合亚洲色| 亚洲国产成人精品无码区花野真一| 99热亚洲色精品国产88| 亚洲AV无码专区在线亚| 亚洲伊人色一综合网| 亚洲乱人伦精品图片| 亚洲剧情在线观看| 亚洲乱码一二三四五六区| 亚洲中文无码a∨在线观看| 亚洲制服丝袜在线播放| 亚洲一区在线免费观看| 亚洲av乱码一区二区三区香蕉| 亚洲婷婷在线视频| 亚洲国产夜色在线观看| 亚洲情A成黄在线观看动漫软件 | 激情亚洲一区国产精品| 亚洲乱码一二三四五六区| 亚洲三级在线观看| 亚洲乱亚洲乱妇24p| 亚洲AV无码AV日韩AV网站| 亚洲第一se情网站| 亚洲精品无码成人片在线观看| 亚洲人成网站18禁止一区| 中文字幕亚洲电影| 亚洲国产精品SSS在线观看AV| 久久亚洲国产成人亚| 亚洲高清无在码在线电影不卡 | 亚洲av成人中文无码专区| 午夜亚洲乱码伦小说区69堂| 亚洲人成无码久久电影网站| 亚洲宅男天堂在线观看无病毒| 精品国产_亚洲人成在线高清| 老汉色老汉首页a亚洲| 亚洲国产精品日韩在线观看 | 亚洲综合无码精品一区二区三区| 久久精品国产亚洲沈樵| 亚洲精品在线播放| 99亚偷拍自图区亚洲|