一、配置消息模板
然后配置
寶塔創建站點index.php
<?php //1. 將timestamp , nonce , token 按照字典排序 $timestamp = $_GET['timestamp']; $nonce = $_GET['nonce']; $token = "你自定義的Token值"; $signature = $_GET['signature']; $array = array($timestamp,$nonce,$token); sort($array); //2.將排序后的三個參數拼接后用sha1加密 $tmpstr = implode('',$array); $tmpstr = sha1($tmpstr); //3. 將加密后的字符串與 signature 進行對比, 判斷該請求是否來自微信 if($tmpstr == $signature) { echo $_GET['echostr']; exit; }
實踐
返回設置首頁可看到
官方要 取消消息模板,使用訂閱消息
點擊詳情可以查看模板參數
或者自定義模板
二、模板實現
1、調起授權
<button bindtap="btnClick">點擊調起訂閱消息</button>
js如下
btnClick() { wx.requestSubscribeMessage({ tmplIds: ["IJhwUdQzDAXCAdE5cE0VkZYf05G70--FsEqKSf-swS4"], // 此處可填寫多個模板 ID,但低版本微信不兼容只能授權一個 success: (res) => { //成功回調 console.log('已授權接收訂閱消息', res) if (res['IJhwUdQzDAXCAdE5cE0VkZYf05G70--FsEqKSf-swS4'] == 'accept') { //accept--用戶同意 } }, fail(err) { console.log(err) } }) },
實踐遇到幾點注意:
1、吊不起來 我加了 fail 去找原因
2、20001,No template data return, verify the template id exist", errCode: NaN}, 你開發的小程序appId和申請模版ID的appId是一樣的嗎?這個要確定下 必須一致,試了幾次模板是沒錯的
2、發送消息
代碼
<button bindtap="btnClick2">點擊發送訂閱消息</button>
js如下
btnClick2() { wx.request({ url: 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx3a67e41d312efe09&secret=3deee1c88d2e3ae6bf584d64945ff367', data: {}, success: function(res) { var openid = wx.getStorageSync("openid") //取前一步存起來的openid console.log("獲取openid",openid); // 調用下發接口 wx.request({ url: 'https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=' + res.data.access_token, //獲取的access_token method: "POST", header: { 'content-type': 'application/json' // 默認值 }, data: JSON.stringify({ touser: openid, //當前用戶的openid template_id: "IJhwUdQzDAXCAdE5cE0VkZYf05G70--FsEqKSf-swS4", //需要下發的模板ID,如模板不多可讓后台直接配置寫死,多的話就通過微信獲取模板列表接口查詢模板 //page: "pages/garden/garden", //點擊小程序訂閱消息跳轉的頁面,可攜帶參數 data: { "name1": { //這個key值就是上面提到的關鍵詞,在后台對應的模板詳情里可以看到,等后台-->點訂閱消息-->我的模板(沒有的話先去公共模板庫選一個)-->點擊詳情-->右邊詳細內容里就是對應的key了 "value": '張三' //這個值是下發給用戶的信息 }, "date2": { "value": '2020-01-08' }, "thing4": { "value": '感冒了' }, "time3": { "value": '19:52' } } }), success: res => { console.log(res) wx.showToast({ title: '下發成功', }) // 這里可以寫自己的邏輯 } }) } }) },
這是一次性訂閱,每次調起授權一次,只能發一次,除非你授權多次,才可以
所以都會處理把wx.requestSubscribeMessage res下放入發送方法下去執行
關於page 是內官網只允許內部頁面,只能單獨新建頁面,然后內嵌別的頁面了