最近接到新需求,需要給關注服務號的使用者傳送模板訊息,寫個部落格記錄一下完成此次需求走過的路,擴充套件包使用的是easywechat
因為我們情況比較特殊,小程式繫結的公眾號和要推送的公眾號不是同一個,這個就涉及到union_Id可能不一致的情況,因此需要將兩個公眾號都繫結到微信開放平臺,如果沒有,就去註冊繫結
微信開放平臺文件
因為我這邊是一個全新的公眾號,所以步驟會比較小白
配置js安全域名
生成secret(主要要儲存好,後續重置會影響已上線的業務)
填寫並啟用伺服器配置
這裡填寫的伺服器地址會用於後續收到公眾號的各種事件回撥,比如關注取消
本地除錯需要做內網穿透,具體教程自己去搜吧我也不會
修改配置微信這邊會驗證填寫的伺服器地址是否能正常接收,所以會走一次驗證需要介面給出正確返回引數
接入文件連結參考
因為微信的驗證和後續的回撥都會走這一個路由,驗證為GET請求,後續的事件回撥之類是post請求,因此需要將路由設為any型別Route::any('official/notify', 'WechatController@officialNotify');
easywechat作者安正超老師為我們考慮了伺服器驗證 與 訊息的接收與回覆在一個連結的相容,所以直接按照文件使用即可
public function officialNotify() { Log::channel('wechat')->info("公眾號回撥!!!!!1" ); $body = file_get_contents('php://input'); Log::channel('wechat')->info($body); $config = [ 'app_id' => config('wechat.yueliu_official_account.app_id'), 'secret' => config('wechat.yueliu_official_account.secret'), 'token' => config('wechat.yueliu_official_account.token'), // 'aes_key' => config('wechat.yueliu_official_account.aes_key'), // 明文模式請勿填寫 EncodingAESKey 'aes_key' => '', // 明文模式請勿填寫 EncodingAESKey 'log' => [ 'level' => 'error', 'file' => storage_path('logs/wechat.log'), ], 'response_type' => 'array' ]; $app = Factory::officialAccount($config); $app->server->push(function ($message) { Log::channel('wechat')->info($message); switch ($message['MsgType']) { case 'event': return '收到事件訊息'; break; case 'text': return '收到文字訊息'; break; case 'image': return '收到圖片訊息'; break; case 'voice': return '收到語音訊息'; break; case 'video': return '收到視訊訊息'; break; case 'location': return '收到座標訊息'; break; case 'link': return '收到連結訊息'; break; case 'file': return '收到檔案訊息'; // ... 其它訊息 default: return '收到其它訊息'; break; } }); // 在 laravel 中: $response = $app->server->serve(); // $response 為 `Symfony\Component\HttpFoundation\Response` 例項 // 對於需要直接輸出響應的框架,或者原生 PHP 環境下 $response->send(); // 而 laravel 中直接返回即可: return $response; }
我這邊的業務需要,在使用者關注後需要傳送可以跳轉小程式的訊息給使用者,這裡需要在收到event訊息後,判斷是否是關注事件,然後將return的訊息改為下面的程式碼即可,這裡的a連結點選後可直接開啟小程式,不會在問使用者是否確認之類的提示
case 'event':
return '歡迎關注音視訊資產管理與協同交付平臺「laravel」官方微信。
<a data-miniprogram-appid="小程式的appid" data-miniprogram-path="小程式路徑" href="備用網址" data-miniprogram-type="text">點選跳轉</a>
網頁版請至:
https://learnku.com';
break;
效果圖
本作品採用《CC 協議》,轉載必須註明作者和本文連結