您好,登錄后才能下訂單哦!
使用PHP怎么實(shí)現(xiàn)微信公眾號驗(yàn)證Token?針對這個問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
/*這個是你自定義的令牌,圖片里面Token的位置*/ define("TOKEN", "這個是你自定義的令牌"); /*初始化當(dāng)前的類*/ $wechatObj = new wechatCallbackapiTest(); /*開始驗(yàn)證程序*/ $wechatObj->valid(); /** * Class WXApiVerify */ class WXApiVerify { /** * 檢測函數(shù)輸出 */ public function valid() { $echoStr = $_GET['echostr']; if($this->checkSignature()){ echo $echoStr; #坑點(diǎn),看下面的常見坑介紹 exit; #一定要停止php運(yùn)行,避免產(chǎn)生不必要的字串符 } } /** * 前面檢測 * @return bool */ private function checkSignature() { #注意: 這里可以不用檢驗(yàn)$_GET參數(shù)的有效性,因?yàn)槲⑿乓欢〞飨嚓P(guān)的參數(shù)給你的服務(wù)器的,你直接開啟驗(yàn)證模式即可。 $signature = $_GET['signature']; $timestamp = $_GET['imestamp']; $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; } } }
Laravel的代碼怎么寫
首先,強(qiáng)勢插個口播(在使用過TP5,CodeIgniter, CakePHP, Yii, Slim之后,我認(rèn)為Laravel是目前來說最好的PHP框架,不接受其他任何意見。)
其次,驗(yàn)證代碼上面是跟純PHP大同小異的,唯一的區(qū)別是在你處理POST請求的時候一定要讓Laravel不要檢測CSFR Token,否則會出現(xiàn)錯誤。
首先,設(shè)置路由:
Route::any('wx', [ 'uses' => 'WeChatApp@checkSignature' ]); #坑點(diǎn),看下面的常見坑介紹
其次,取消Laravel的CSFR檢查:
#去到你的Middlewarel里面找到VerifyCsrfToken.php然后插入下面代碼: protected $except = [ 'wx', #注意這個是你在第一步設(shè)置的路由路徑,不接受單獨(dú)的文件路徑,太Low逼了 ];
最后,上酸菜:
#在你對應(yīng)的Controller里面加入以下函數(shù) public function checkSignature( Request $request ) { $input = $request->all(); # 一定要抓取4個參數(shù) $echoStr = $input[ "echostr" ]; $signature = $input[ "signature" ]; $timestamp = $input[ "timestamp" ]; $nonce = $input[ "nonce" ]; # 微信官方驗(yàn)證方式 $token = env( 'TOKEN' ); #或者用config()函數(shù) $tmpArr = [ $token, $timestamp, $nonce ]; sort( $tmpArr, SORT_STRING ); $tmpStr = implode( $tmpArr ); $tmpStr = sha1( $tmpStr ); # 打印返回結(jié)果 if( $tmpStr == $signature ){ return response($echoStr); } else{ return response(); } }
常見的坑是什么
文檔坑。有些人看過官方文檔之后直接就上代碼了,缺忽略了里面的一個參數(shù)echostr 隨機(jī)字符串
而這個恰恰是驗(yàn)證服務(wù)器的關(guān)鍵點(diǎn),你要打印這個返回給微信才能通過驗(yàn)證。但是官方文檔說的不夠重點(diǎn)。
Laravel路由坑。一定要設(shè)置請求為any
這樣包括(GET跟POST)
Laravel還有一個測試的坑,就是如果你的APP_DEBUG=false
如果不是false
的話可能會造成拋出多余的字串導(dǎo)致驗(yàn)證失敗。
要學(xué)會使用微信官方測試工具 https://mp.weixin.qq.com/debug/ 選擇消息接口測試
跟文本消息
接口就行。其他的可以看圖說話
關(guān)于使用PHP怎么實(shí)現(xiàn)微信公眾號驗(yàn)證Token問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。