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