之前弄微信公衆號開發,在微信api接入驗證這塊遇到了幾個問題,記錄一下踩坑之路。
一、官方文檔的接入講解
https://developers.weixin.qq.com/miniprogram/dev/framework/server-ability/message-push.html
PHP示例代碼下載:
<a href="https://wximg.gtimg.com/shake_tv/mpwiki/cryptoDemo.zip" target="_blank" rel="noopener noreferrer">下載<span></span></a>
我已開始是這樣寫的:
//1.得到微信發過來的timestamp,nonce,token,signature變量
$timestamp=$_GET['timestamp'];
$nonce=$_GET['nonce'];
$token='weixin';
$signature=$_GET['signature'];
$echostr=$_GET['echostr'];
//2.對其進行字典序排序併合並後加密
$array=array($timestamp,$nonce,$token);
sort($array);
$string=sha1(implode('', $array));
//3.再與signature關鍵字進行比較
if($string==$signature){
echo $echostr;
exit;
}else {
}
微信驗證確實是能成功,但是訪問就會一直出現這樣的錯誤:
讓我的微信關注事件的推送消息一直出不來,我寫了一個用戶關注公衆號後會發送 “歡迎關注測試公衆號” 得消息和用戶發文本消息之後,公衆號會回覆相同的文本消息給用戶的邏輯,都會出現問題,搞得我焦頭爛額,不知咋辦。
但是當我,把get的請求數據用request來接收後就解決了這兩個問題,現在還不知道爲什麼,知道原因的大佬還請講一下原因。
這兒還有一個要注意的,大家都知道的獲取微信推送過來的post數據php7以上不能用$GLOBALS[‘HTTP_RAW_POST_DATA’],而要用file_get_contents(‘php://input’)的方式來獲取數據。
//獲取微信推送過來的post數據(xml格式)
//$postArr=$GLOBALS['HTTP_RAW_POST_DATA']; php7以上不能用
$postArr = file_get_contents('php://input');