傳送微信公眾號模板訊息(未完成)

huliuwa發表於2021-12-08

最近接到新需求,需要給關注服務號的使用者傳送模板訊息,寫個部落格記錄一下完成此次需求走過的路,擴充套件包使用的是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 協議》,轉載必須註明作者和本文連結

相關文章