最近接到新需求,需要給關注服務號的用戶發送模板消息,寫個博客記錄一下完成此次需求走過的路,擴展包使用的是easywechatlaravel結合easywechat發送公眾號模板消息詳細說明,感謝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 為 `SymfonyComponentHttpFoundationResponse` 實例 // 對于需要直接輸出響應的框架,或者原生 PHP 環境下 $response->send(); // 而 laravel 中直接返回即可: return $response; }
我這邊的業務需要,在用戶關注后需要發送可以跳轉小程序的消息給用戶,這里需要在收到event消息后,判斷是否是關注事件,然后將return的消息改為下面的代碼即可,這里的a鏈接點擊后可直接打開小程序,不會在問用戶是否確認之類的提示
需要注意的是:關注公眾號通過[$app->user->get($openId);]可以拿到unionid和一些基本信息,取消關注只能拿到openid
case 'event': return '歡迎關注音視頻資產管理與協同交付平臺「laravel」官方微信。 <a data-miniprogram-appid="小程序的appid" data-miniprogram-path="小程序路徑" href="備用網址" data-miniprogram-type="text">點擊跳轉</a> 網頁版請至: https://learnku.com'; break;
效果圖
微信公眾號的關注回調事件會將用戶的基本信息和unionid也一并發送,一定要將公眾號的openid和unionid存起來,后續發送模板消息會根據公眾號的openid進行發送
在微信公眾平臺申請開通模板消息,在右側菜單最下邊“+新功能”找到模板消息,點擊申請開通,大概需要1-3個工作日。我這邊是1天就通過了
開通后,選擇行業,選擇模板類型,如果微信提供的模板庫找不到和你業務一樣的,那就需要自己去提交申請了,但是這個時間比較久,大概需要7-15天,建議還是用模板庫的
這里的模板id要存在代碼里,后續發送模板消息需要用到
下面就是根據業務需要,給用戶發送模板消息了,代碼如下
$openId = '公眾號的openid'; $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);// $user = $app->user->get($openId);// dd($user); // 發送模板消息 $app->template_message->send([ 'touser' => $openId, 'template_id' => '模板id', 'url' => 'http://www.網站.cn', 'miniprogram' => [ // 跳轉到小程序,和上面的url同時存在的話,則優先顯示小程序 'appid' => '小程序的id', 'pagepath' => '小程序頁面地址', ], 'data' => [ 'first' => [ 'value' => '趙師傅已加入群組演示項目', 'color' => '#888888' ], 'keyword1' => [ 'value' => '加入項目' ], 'keyword2' => [ 'value' => '加入成功' ], 'keyword3' => [ 'value' => '2021-12-10 14:21:05' ], 'remark' => [ 'value' => '點擊打開小程序' ], ], ]);
效果圖
以上就是laravel結合easywechat發送公眾號模板消息的全部過程,完畢!
相關推薦:最新的五個Laravel視頻教程