Laravel開發微信公眾號【訂閱號】後台的一些事情

  • 2019 年 11 月 13 日
  • 筆記

普遍的應用場景

對電腦這方面感興趣的童鞋可能很清楚有一些「套路」,那就是回復某個關鍵詞,獲取某些素材、軟體的下載地址。

很常見的需求。

今天我慢來聊一下用Laravel開發一個公眾號後台的一些瑣事。

也即我開發過程中的遇到的一些問題。

  • CSRF驗證問題

CSRF驗證問題

這個問題基本用Laravel都會知道:在Form表單中,需要用@csrf來驗證。

如果沒有csrf驗證,會被Laravel攔截。

而今天我發現了一個添加「白名單」的方法,怪我基礎不紮實。

那就是在app/Http/Middleware/VerifyCsrfToken.php添加白名單路徑:

這樣就解決了CSRF的驗證問題。

微信訂閱號開發流程

大致流程是:註冊帳號、獲得許可權、進行開發。

地址:https://mp.weixin.qq.com/

這個不重要,基本上都要開發了,肯定基礎有,知道下一步幹什麼。

我想說的是驗證伺服器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,不然會一直驗證失敗的!