php公眾號開發,訊息丟失的原因和解決辦法
在使用PHP進行公眾號開發時,如果出現訊息部分丟失的話,很可能是下載到舊的sdk。
這種情況一般出現在從網上下載SDK而不是從官方下載sdk,導致下載到舊的sdk。而舊的sdk中有bug會導致公眾號訊息解密失敗,從而漏掉訊息。
官方提供的舊的sdk中的 checkSignature 函式,導致回覆的訊息經常性的丟失。 官方示例程式碼中的 checkSignature 函式:
//這裡是官方舊的sdk程式碼,是錯誤的,別複製黏貼。
private function checkSignature() {
$signature = $_GET["signature"];
$timestamp = $_GET["timestamp"];
$nonce = $_GET["nonce"];
$token = TOKEN;
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );
if( $tmpStr == $signature ){
return true;
}else{
return false;
}
}
其中的 sort($tmpArr);
修改為 sort($tmpArr, SORT_STRING);
正確程式碼為:
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;
}
}
這個bug的出現時因為sort函式預設把每一項按常規順序排列(Standard ASCII,不改變型別)的,因此解密時會出現偶現性解密失敗。而SORT_STRING引數是把每一項作為字串來處理,使用類似 natsort() 的自然排序。
相關文章
- 安裝zblog提示“建立c_option.php失敗”的原因和解決辦法PHP
- 微信公眾號開發之客服訊息
- 關於$ is not defined的原因和解決辦法
- 伺服器卡的原因和解決辦法伺服器
- 微信公眾號開發(二)識別訊息型別型別
- RocketMQ訊息丟失解決方案:事務訊息MQ
- RabbitMQ:訊息丟失 | 訊息重複 | 訊息積壓的原因+解決方案+網上學不到的使用心得MQ
- PHP微信公眾號開發——公共方法PHP
- 如何快速實現公眾號群發模板訊息?
- 硬碟資料丟失原因和解決方案/資料恢復方法硬碟資料恢復
- RocketMq訊息丟失問題解決MQ
- warning: CRLF will be replaced by LF in 出現的原因和解決辦法
- 電腦黑屏怎麼辦?顯示器黑屏無訊號但主機執行正常的原因和解決辦法
- RabbitMQ防止訊息丟失MQ
- 使用easywechat給關注公眾號使用者發訊息
- 監聽微信公眾號訊息,監聽微信訊息推送
- Java微信公眾號推送模版訊息的方法示例Java
- PHP微信公眾平臺開發視訊PHP
- win10更新後工作列卡死 的原因和解決辦法Win10
- 伺服器出現500錯誤的原因和解決辦法伺服器
- 電視遙控器失靈原因和解決辦法 電視遙控器壞了怎麼辦?
- 微信公眾號開發
- 公眾號開發筆記筆記
- 小程式中使用公眾號模板訊息思路整理
- 恆訊科技分析:境外伺服器資源被佔滿的原因和解決辦法伺服器
- 微信公眾號下發紅包 -- PHPPHP
- php png失真的原因及解決辦法PHP
- 公眾號開發總是有快取怎麼辦?快取
- 探討寶塔切換php版本切換失敗的原因和解決方法PHP
- MySQL 資料庫崩潰(crash)的常見原因和解決辦法MySql資料庫
- JAVA給微信公眾號二維碼新增LOGO時總是生成灰度圖片的原因及解決辦法JavaGo
- RocketMQ的訊息是怎麼丟失的MQ
- 請問 django admin 介面 css 丟失解決辦法?DjangoCSS
- AWS建立AMI映像資料丟失解決辦法
- python 實現公眾號模板訊息推送(親測有效)Python
- 傳送微信公眾號模板訊息(未完成)
- Nodejs微信公眾號開發NodeJS
- .net開發微信公眾號