#### 1. 應用場景 ---- 用戶在小程序商城購買下單之后,商家如何能及時收到新訂單提醒,進行發貨處理呢? 用戶在小程序中申請入駐商家后,平臺管理員如何能及時收到入駐申請通知,進行及時審核處理呢? 常用的通知方式: 短信提醒、郵箱通知、公眾號模板消息,本文介紹如何在小程序中使用公眾號的模板消息發送消息通知 查看公眾號模板消息文檔得出: 只要拿到用戶在公眾號下的 openid 就可以向用戶發送模板消息通知,所以我們只需要想辦法獲取到用戶在該公眾號的 openid 即可,總結: 通過公眾號的網頁授權拿到用戶的 openid,當用戶下單后給商家發送模板消息 #### 2. 準備材料 ---- 已認證的服務號、appid 和 開發者密鑰、配置網頁授權域名、IP 白名單、已關注服務號 申請服務號是需要企業資質的,對于個人開發者一般是沒有的,微信為了方便開發者調試,開放了測試號供個人開發者使用 公眾號測試號登錄地址: [https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login](https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login) 小程序用個人的、還是認證的都可以,可使用 **個人小程序 + 測試號** 調試在小程序中給平臺管理員發送新訂單提醒消息通知 #### 3. 功能實現 --- ThinkPHP v6.0.9 + EasyWechat 4.x 在小程序項目中,一般 api 應用作為 小程序接口(本文示例中默認是 index 應用), admin 應用作為后臺管理系統 在控制器的構造方法獲取公眾號操作對象,訂閱號沒有網頁授權的接口權限,但是可以使用公眾號測試號進行調試 ![](https://img.itqaq.com/art/content/29c51ac10f1d29d036b28c04628f753d.png) 我們可以生成一個二維碼,用來做授權使用,掃碼二維碼跳轉到網頁授權方法入口, 我用的是下面的擴展包生成的二維碼 ``` composer require endroid/qr-code ``` ![](https://img.itqaq.com/art/content/e5027db0934173d46e3d41f0cecbc2b1.png) 調起公眾號網頁授權有以下兩種授權方式 snsapi_base: 靜默授權,無需用戶同意,只能獲取到用戶openid snsapi_userinfo: 高級授權,需要用戶同意,可以獲取到用戶openid、昵稱、頭像等信息 ![](https://img.itqaq.com/art/content/5505f7fb7c7cd518e225e2c276224d00.png) 在網頁授權回調地址中可以獲取到用戶的opened、昵稱、頭像等信息 根據 openid 查詢用戶,數據庫中沒有該用戶則寫入數據庫,該用戶已存在則可以更新用戶信息或者不進行操作 ![](https://img.itqaq.com/art/content/06af976e284b338b4f45ec4ea74e4d4b.png) 登錄公眾號測試號,新增一個用于測試的模板消息 ![](https://img.itqaq.com/art/content/53de87d420f9495d35aee28b009db039.png) 當有新訂單時,執行以下方法,查詢已授權的用戶,給這些用戶發送模板消息 ![](https://img.itqaq.com/art/content/e5a8354850a1d41b7e282483461dc79e.png) 授權用戶微信中會收到一條消息通知,如下圖所示 ![](https://img.itqaq.com/art/content/8995388e7d73d87d6f1cc424d0180081.png) #### 4. 本文示例代碼 --- 授權用戶表 ```sql CREATE TABLE `user` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `openid` varchar(50) DEFAULT NULL, `nickname` varchar(120) DEFAULT NULL, `avatar` varchar(255) DEFAULT NULL COMMENT '頭像', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='授權用戶表'; ``` 百度網盤: [https://pan.baidu.com/s/1tTQrZae0aIlohWQx22vHJA ](https://pan.baidu.com/s/1tTQrZae0aIlohWQx22vHJA ), 提取碼: `hgd2`