微信小程序-消息订阅服务(uni-app)_uniapp微信小程序订阅消息
微信小程序-消息订阅服务(uni-app)
1、前端配置
进入微信公众平台-订阅消息模块
进入订阅消息页申请订阅模版,这里申请的是公共模版(一次性和公共模块写法相同)
前端先用uni.getSetting获取用户是否开启了消息订阅权限
注:uni.getSetting方法下withSubscriptions参数需设置为true,如果不设置或者为false则不检查微信订阅权限
这里检查订阅权限如果没开启则进入订阅消息设置页面让用户开启订阅权限
uni.getSetting({ withSubscriptions: true, success(res) { if (res.subscriptionsSetting.mainSwitch) { // 用户打开了订阅消息总开关 } else { uni.openSetting({ withSubscriptions: true, }) } } })
如果用户开启了消息订阅权限,则开始判断本小小程序的订阅消息该用户是否已经成功订阅,如果用户没有订阅则弹出订阅提示框让其订阅
if (res.subscriptionsSetting.itemSettings) { // 用户同意总是保持是否推送消息的选择, 这里表示以后不会再拉起推送消息的授权 //@ts-ignore let moIdState = res.subscriptionsSetting.itemSettings[\'c6DX7UbTOL1hciWxbdeTjBr-FWQrFXO5z9VDXXXXXXXX\', \'ftpGE2XLY4rgXXx-6haWPIcmXjfdRDduGHXXXXXXXX\']; // 用户同意的消息模板id if (moIdState === \'accept\') { uni.requestSubscribeMessage({ tmplIds: [\'c6DX7UbTOL1hciWxbdeTjBr-FWQrFXO5z9XXXXXXXX\', \'ftpGE2XLY4rgXXx-6haWPIcmXjfdRDduGHyXXXXXXXX\'], success(res) { console.log(\"🚀 ~ success ~ 不会再拉起推送消息的授权,订阅成功\") }, }) } else if (moIdState === \'reject\') { console.log(\'拒绝了消息推送\'); uni.showToast({ title: \'拒绝了消息推送\', }); uni.openSetting({ withSubscriptions: true, }); } else if (moIdState === \'ban\') { uni.showToast({ title: \'已被后台封禁\', }) } } else { //提示开始订阅消息 uni.requestSubscribeMessage({ // 此处填写申请的订阅消息模板的ID tmplIds: [\'c6DX7UbTOL1hciWxbdeTjBr-FWQrFXO5z9XXXXXXXX\', \'ftpGE2XLY4rgXXx-6haWPIcmFWQrFXO5z9XXXXXXXX\'], success(res) { console.log(\"uni.requestSubscribeMessage\" + JSON.stringify(res)) } }) }
完整前端代码
uni.getSetting({ withSubscriptions: true, success(res) { if (res.subscriptionsSetting.mainSwitch) { // 用户打开了订阅消息总开关 if (res.subscriptionsSetting.itemSettings) { // 用户同意总是保持是否推送消息的选择, 这里表示以后不会再拉起推送消息的授权 //@ts-ignore let moIdState = res.subscriptionsSetting.itemSettings[\'c6DX7UbTOL1hciWxbdeTjBr-FWQrFXO5z9XXXXXXXX\', \'ftpGE2XLY4rgXXx-6FWQrFXO5z9XXXXXXXX\']; // 用户同意的消息模板id if (moIdState === \'accept\') { uni.requestSubscribeMessage({ tmplIds: [\'c6DX7UbTOL1hciWxbdeTjBr-FWQrFXO5z9XXXXXXXX\', \'ftpGE2XLY4rgXXx-6haWPFWQrFXO5z9XXXXXXXX\'], success(res) { console.log(\"🚀 ~ success ~ 不会再拉起推送消息的授权,订阅成功\") }, }) } else if (moIdState === \'reject\') { console.log(\'拒绝了消息推送\'); uni.showToast({ title: \'拒绝了消息推送\', }); uni.openSetting({ withSubscriptions: true, }); } else if (moIdState === \'ban\') { uni.showToast({ title: \'已被后台封禁\', }) } } else { //提示开始订阅消息 uni.requestSubscribeMessage({ // 此处填写申请的订阅消息模板的ID tmplIds: [\'c6DX7UbTOL1hciWxbdeTjBr-FFWQrFXO5z9XXXXXXXX\', \'ftpGE2XLY4rgXXxFWQrFXO5z9XXXXXXXX\'], success(res) { console.log(\"uni.requestSubscribeMessage\" + JSON.stringify(res)) } }) } } else { uni.openSetting({ withSubscriptions: true, }) } } })
2、服务端配置(这里.net举例)
请求获取接口调用凭证拿到token
SubscriptionModel model = new SubscriptionModel(); //获取token var URL = \"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wxXXXXXXX\"; // 发送POST请求 HttpResponseMessage response = await _httpClient.GetAsync(URL); // 确保请求成功 response.EnsureSuccessStatusCode(); // 读取响应内容TelLoginResultModel var responseBody = await response.Content.ReadAsStringAsync(); //序列化获取token model = JsonConvert.DeserializeObject<SubscriptionModel>(responseBody)!; //model.access_token为微信接口请求token
拿到token后就可以请求发送订阅消息接口了
//发送订阅提醒信息var URL = $\"https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token={accessToken}\";//model.access_tokenvar content = new StringContent(json, Encoding.UTF8, \"application/json\");//发送post请求HttpResponseMessage response =await _httpClient.PostAsync(URL, content);
完整服务端代码
/// /// 微信订阅服务/// /// public async Task<bool> WeChatSubscribe(string json){ SubscriptionModel model = new SubscriptionModel(); //我微信订阅token地址 var URL = \"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wxXXXXXXXXXXX\"; // 发送POST请求 HttpResponseMessage response = await _httpClient.GetAsync(URL); // 确保请求成功 response.EnsureSuccessStatusCode(); // 读取响应内容TelLoginResultModel var responseBody = await response.Content.ReadAsStringAsync(); //序列化获取token model = JsonConvert.DeserializeObject<SubscriptionModel>(responseBody)!; string responseBodys = await GetSubscribeInfo(model.access_token, json); this._cache.Set(\"wechat\", model, new MemoryCacheEntryOptions { }); JObject jsonObject = JObject.Parse(responseBodys); if (jsonObject[\"errcode\"]!.ToString() != \"0\" && jsonObject[\"errcode\"]!.ToString() != \"ok\") { Console.WriteLine($\"微信订阅服务发送失败,异常原因{jsonObject}\"); return false; } return true; } private async Task<string> GetSubscribeInfo(string accessToken, string json) { //发送订阅提醒信息 var URL = $\"https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token={accessToken}\"; var content = new StringContent(json, Encoding.UTF8, \"application/json\"); //发送post请求 HttpResponseMessage response =await _httpClient.PostAsync(URL, content); // 确保请求成功 var s = response.EnsureSuccessStatusCode(); // 读取响应内容TelLoginResultModel var responseBodys = await response.Content.ReadAsStringAsync(); return responseBodys; } }}