Laravel開發微信公眾號【訂閱號】後台的一些事情
- 2019 年 11 月 13 日
- 筆記
普遍的應用場景
對電腦這方面感興趣的童鞋可能很清楚有一些「套路」,那就是回復某個關鍵詞,獲取某些素材、軟體的下載地址。
很常見的需求。

今天我慢來聊一下用Laravel開發一個公眾號後台的一些瑣事。
也即我開發過程中的遇到的一些問題。
- CSRF驗證問題
CSRF驗證問題
這個問題基本用Laravel都會知道:在Form表單中,需要用@csrf
來驗證。
如果沒有csrf驗證,會被Laravel攔截。
而今天我發現了一個添加「白名單」的方法,怪我基礎不紮實。
那就是在app/Http/Middleware/VerifyCsrfToken.php
添加白名單路徑:

這樣就解決了CSRF的驗證問題。
微信訂閱號開發流程
大致流程是:註冊帳號、獲得許可權、進行開發。
這個不重要,基本上都要開發了,肯定基礎有,知道下一步幹什麼。
我想說的是驗證伺服器URL的一些問題


可能新手會有點懵

點擊提交的時候微信會給你發送一些字元串【包括signature,timestamp,nonce,echostr】
然後你通過token【前面設置的】和timestamp以及nonce通過演算法算出來一個字元串,用他來和給定的signature比較。
如果驗證成功,則輸出echostr
PHP程式碼如下
$signature = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; define('TOKEN','xxxxxxxxxxxxxxxxxxxxxxxxx'); $token = TOKEN; $tmpArr = array($token, $timestamp, $nonce); sort($tmpArr); $tmpStr = implode($tmpArr); $tmpStr = sha1($tmpStr); $echoStr = $_GET["echostr"]; if ($tmpStr == $signature) { echo $echoStr; } else { echo 'no'; }
所以偷懶的一個方法是直接輸出echostr就行。
還有一點需要提醒的是,你輸入的URL不要有參數,要「乾淨」

什麼意思?
URL可以是:https://www.misiyu.cn/xxx/xxx
但不能是:https://www.misiyu.cn/wechat?a=b&c=d
不能有?a=b&c=d
,不然會一直驗證失敗的!