- 小程序下发统一消息,接口调用每天次数是多少?或者哪里可以看到?
https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/mp-message-management/uniform-message/sendUniformMessage.html#%E9%94%99%E8%AF%AF%E7%A0%81 下面这个错误码,调用超过天级别频率限制,具体是多少次? 45009 reach max api daily quota limit 调用超过天级别频率限制。可调用clear_quota接口恢复调用额度。
2023-04-24 - 小程序消息订阅全流程介绍
本文将介绍小程序消息订阅的完整流程 一、首先需要配置你的模板消息 1. 登录[微信公众平台](https://mp.weixin.qq.com/),进入“功能”>“订阅消息”。 2. 点击“新建模板”,选择一个模板,然后点击“下一步”。 3. 在模板详情页,可以看到模板的标题和内容。标题下面的小字就是模板内容中的参数,例如:{{thing1.DATA}}。 4. 可以根据需要修改参数的名称,例如将{{thing1.DATA}}改为{{thing1.活动名称}}。 5. 点击“保存”按钮,完成模板的配置。 这样就完成了模板的配置,接着以在小程序中发送订阅消息为例,通过调用wx.requestSubscribeMessage接口获取用户的订阅授权,用户同意授权之后通过调用云函数或者服务端接口来实际推送消息。下面是微信小程序中调用云函数的示例: // main.js wx.requestSubscribeMessage({ tmplIds: ['配置好的模板ID'], // 最多支持3条 success(res) { // 'accept'表示用户同意订阅该条id对应的模板消息 if (res['配置好的模板ID'] === 'accept') { // 用户同意订阅,调用云函数或服务器接口发送订阅消息 wx.cloud.callFunction({ name: 'sendSubscribeMessage', data: { templateId: '配置好的模板ID', openid: '用户的openid', data: { thing1: { value: '活动名称' }, // 其他参数... } }, success(res) { console.log('订阅消息发送成功', res) }, fail(err) { console.error('订阅消息发送失败', err) } }) } } }) 二、如何实现服务器接口发送订阅消息 在上面的示例中演示了小程序端唤起用户订阅授权的方式,接下去会介绍服务端的接口如何推送模板消息。 我们以node.js和express框架来演示: 1. 安装所需的依赖项: npm install express axios 2. 创建一个server.js文件,设置你的微信小程序信息: // server.js const express = require('express'); const axios = require('axios'); const app = express(); app.use(express.json()); const appId = '小程序AppID'; const appSecret = '小程序AppSecret'; 3. 添加一个用于发送订阅消息的接口: // server.js app.post('/sendSubscribeMessage', async (req, res) => { const { templateId, openid, data } = req.body; try { // 获取access_token const tokenResponse = await axios.get(`https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${appId}&secret=${appSecret}`); const accessToken = tokenResponse.data.access_token; // 发送订阅消息 const messageResponse = await axios.post(`https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=${accessToken}`, { touser: openid, template_id: templateId, data: data }); res.json({ success: true, data: messageResponse.data }); } catch (error) { res.status(500).json({ success: false, error: error.message }); } }); const PORT = process.env.PORT || 3000; app.listen(PORT, () => { console.log(`Server is running on port ${PORT}`); }); 以上就是服务端发送模板消息的代码示例,在小程序端完成用户订阅授权后调用服务端接口即可完成完整的订阅消息推送流程。 三、可能遇到的问题 1. 用户无法收到订阅消息 确保用户已经同意接收订阅消息。在小程序中,需要调用requestSubscribeMessage接口来获取用户的订阅授权。如果用户同意订阅,接口返回的结果中会包含模板ID对应的状态为accept。 2. 订阅消息发送失败 检查服务器接口是否正确调用了微信小程序的API。确保已经获取了正确的access_token,并且在发送订阅消息时使用了正确的模板ID、用户openid和数据。 3. 订阅消息内容显示不正确 确保在微信公众平台上配置的订阅消息模板与在小程序中发送的数据相匹配。例如,如果模板中有一个参数为{{thing1.活动名称}},那么在发送订阅消息时,数据中也应该包含一个名为thing1的对象,其value属性为活动名称。 4. 订阅消息接口调用次数超过限制 微信小程序对订阅消息接口的调用次数有限制。如果小程序调用次数超过限制,可能会导致订阅消息发送失败。可以在[微信公众平台]查看小程序的接口调用情况,并根据需要调整调用频率。 5. 订阅消息模板无法修改 微信小程序订阅消息模板一旦创建,就无法修改。如果需要修改模板内容,可以创建一个新的模板,并在小程序中使用新的模板ID。
2023-05-29 - 小程序一次性订阅消息,通知消息是否有内置次数限制?
API接口 :小程序开发文档->服务端开发->消息相关->发送订阅消息-> 接口路由(sendMessage)"https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=ACCESS_TOKEN" 情况描述: 我基于一次性消息模板使用这个API接口向指定客户发送模板消息,使用这个接口的前提是,用户在进入小程序前必须先授权一次性订阅消息模板(弹出框). 而我测试下来的情况:用户每授权一次,服务端才可以推送到该用户微信一次消息,即使用户勾选了"总是保持以上选择",起到的作用的也只是不再弹出让用户授权界面 仍有一个内置的授权次数限制(这一点我并未在官方文档上找到描述),总的来讲就是用户在小程序中授权了几次,服务端才能对应通知用户几次消息 我现在疑惑的是: 1.这个一次性订阅消息:用户授权最高能授权多少次,比如:达到100次就不会再累加授权次数,还是会无限累加次数? 2.这个授权次数有时间限制吗?比如:7天内服务端没有通知消息,是否就需要用户重新授权
2023-05-30 - 教你对接微信公众号订阅消息
订阅通知是一个用户主动订阅、服务号按需下发的通知能力。使用过程请遵守《微信公众平台服务协议》《微信公众平台运营规范》。 用户在前述场景主动订阅后,服务号可通过接口向用户发送订阅通知,如信用卡动账提醒、物流到货通知等。订阅通知分为一次性订阅和长期订阅,一次性订阅是指用户订阅一次,服务号可不限时间地下发一条对应的订阅通知;长期订阅是指用户订阅一次,服务号可长期多次下发通知,长期订阅通知仅向政务民生、医疗等公共服务领域开放。 微信订阅消息和微信模版消息的区别在于模版消息可以无视用户的主观意识,直接发给用户;而订阅消息则必须用户同意系统才能发给用户。这样避免了给用户带来的骚扰。 因为微信有打算使用订阅消息来取代模版消息,所以知识付费新增了订阅消息功能,知识付费系统可以选择使用模版消息还是订阅消息。下面我们就来看看知识付费是如何加订阅消息功能的。 下面以CRMEB为例讲解订阅消息如何添加! 第一步:公众号添加订阅消息 [图片] [图片] [图片] [图片] [图片] 第二步:对照我们知识付费后台的订阅消息添加订阅消息 [图片] [图片] [图片] [图片] [图片] [图片] 第三步:代码里添加订阅消息 知识付费根目录下extend\service\RoutineTemplateService [图片] 添加新的订阅消息 添加发送方法: [图片] 例如下面的方法: public static function sendOrderSuccess(array $data, $uid, $link = '') { RoutineTemplateService::sendTemplate(WechatUser::uidToOpenid($uid), RoutineTemplateService::setTemplateId(RoutineTemplateService::ORDER_PAY_SUCCESS), $link, $data); } 发送订阅消息 $data['character_string1']['value'] = $orderId; $data['amount3']['value'] = $order['pay_price']; $data['time2']['value'] = date('Y-m-d H:i:s', time()); $data['thing6']['value'] = '您购买的资料已支付成功!'; RoutineTemplate::sendOrderSuccess($data, $order['uid'], $site_url . Url::build('wap/material/my_material')); 第四步:前端用户触发订阅消息 通过微信文档,我们可以看到微信公众号的订阅消息是通过wx-open-subscribe标签来调起选择的。如下事例: <style> .subscribe-btn {color: #fff;background-color: #07c160;} </style> <button class="subscribe-btn"> 一次性模版消息订阅 </button> var btn = document.getElementById('subscribe-btn'); btn.addEventListener('success', function (e) { console.log('success', e.detail); }); btn.addEventListener('error',function (e) { console.log('fail', e.detail); }); 根据事例我们可以了解使用wx-open-subscribe标签给template属性传入你需要弹出的订阅消息模板ID即可,多个以英文逗号分隔。 通过下面的方法获得需要的订阅消息模板ID; [图片] 下面的方法中加触发时返回的订阅消息模板ID [图片]
2022-10-21 - 小程序订阅消息开发指南
2019年10月12日微信开放了小程序订阅消息的功能。按官方的说法,目前的模板消息在实现小程序服务闭环上存在缺陷: 1. 部分开发者在用户无预期或未进行服务的情况下发送与用户无关的消息,对用户产生了骚扰;2. 模板消息需在用户访问小程序后的 7 天内下发,不能满足部分业务的时间要求模板消息确实存在上述的硬伤,不利于小程序的用户留存和用户体验。为了解决这些问题,微信官方推出了用户订阅消息功能。我在微慕专业版上加了订阅消息的功能,并验证了这个功能。这个功能是否能都达到官方的预期,这个我感觉不那么乐观。这里我先说我的感受:目前的订阅消息还不完善,后续还有很大的优化空间。 目前,官方只开放了“一次性订阅消息”,尚未开放“长期性订阅消息”,因此我只尝试了“一次性订阅消息”。 一次性订阅消息:用于解决用户使用小程序后,后续服务环节的通知问题。用户自主订阅后,开发者可不限时间地下发一条对应的服务消息;每条消息可单独订阅或退订。 订阅消息推送位置:服务通知 订阅消息下发条件:用户自主订阅 订阅消息卡片跳转能力:点击查看详情可跳转至该小程序的页面 以下我简单说明订阅消息的开发过程和使用体验。 一.订阅消息的开发1.获取订阅消息的模板ID 在微信小程序的管理后台,在左侧“功能”菜单,选择“订阅消息”,然后点击“添加” [图片] 然后选择你需要的消息模板,并配置关键词。 [图片] 配置完成后,如下图所示。 [图片] 值得关注的是,在配置好的模板详情页面里的“详细内容”很重要,这个就是开发订阅消息时需要遵循的消息格式,这个格式和模板消息有细微的差别 根据微慕小程序的需要,我选用了“新的评论提醒”和“内容更新提醒”这两个消息模版。前者用于提醒发表话题或文章的作者,有新的话题或文章评论,增强作者与读者之间的交流互动;后者是提醒订阅用户,小程序有新的文章发布,引导用户回归小程序。 订阅消息申请模板的时候,需要选择所属类目,只能选择当前小程序相关的类目模板,对于模板消息不需要选择对应类目。如果删除小程序类目,就会把订阅消息模板一起删除。因此删除类目要小心谨慎。 [图片] 2.触发用户订阅,获取下发的权限 触发用户订阅,微信小程序提供的api是: [代码]wx.requestSubscribeMessage[代码],用户发生点击行为或者发起支付回调后,才可以调起订阅消息界面。 注意:微信小程序开发工具尚不支持此功能,在开发工具触发订阅的api,会提示: requestSubscribeMessage:fail 开发者工具暂时不支持此 API 调试,请使用真机进行开发 调用api的代码示例如下: [代码]wx.requestSubscribeMessage({[代码] [代码]tmplIds: ["模板A","模板B"],[代码] [代码]success: function (res) {[代码] [代码]//成功[代码] [代码]},[代码] [代码]fail(err) {[代码] [代码]//失败[代码] [代码]console.error(err);[代码] [代码]}[代码] [代码]})[代码] wx.requestSubscribeMessage(Object object) 的回调函数[代码]object.success [代码]参数有两个:errMsg和TEMPLATE_ID; 接口调用成功时errMsg值为’requestSubscribeMessage:ok’。TEMPLATE_ID是动态的键,即模板id,值包括’accept’、’reject’、’ban’。’accept’表示用户同意订阅该条id对应的模板消息,’reject’表示用户拒绝订阅该条id对应的模板消息,’ban’表示已被后台封禁。例如 { errMsg: “requestSubscribeMessage:ok”, zun-LzcQyW-edafCVvzPkK4de2Rllr1fFpw2A_x0oXE: “accept”} 表示用户同意订阅zun-LzcQyW-edafCVvzPkK4de2Rllr1fFpw2A_x0oXE这条消息。 个人觉得这个动态键不是特别合理,代码处理起来有些麻烦,如果改成静态键的json格式比较方便处理,例如: [代码]{[代码] [代码] errMsg:"requestSubscribeMessage:ok",[代码] [代码] result: [[代码] [代码] { templateId:"zun-LzcQyW-edafCVvzPkK4de2Rllr1fFpw2A_x0oXE",[代码] [代码]status:"accept"[代码] [代码]}[代码] [代码] ][代码] [代码]}[代码] 在手机上调用此api方法会调出订阅消息的界面,如下图所示: [图片] 关于这个订阅消息的授权有几点要注意: 1) 在确认提示框里,如果用户选择“取消”表示拒绝(取消)订阅消息,选择“允许”表示用户订阅一次消息。 2) 如果用户不勾选“总是保持以上选择,不再询问”,那么每次用户触发都会弹出提示框。 3) 如果用户勾选“总是保持以上选择,不再询问”,那么将再也不会唤起这个对话框。同时,如果选择“取消”,那么以后每次调用这个api的时候,都会自动拒绝;如果选择“允许”,那么以后每次调用此api,都会自动允许授权。 目前小程序没有提供获取用户是否授权订阅消息的方法。通过wx.openSetting 方法无法获取用户是否授权消息订阅的信息,scope 列表没有订阅消息的内容。 如果想从自动拒绝转换到自动自动运行,需要打开小程序的设置去配置。设置方法:点击小程序右上角的三个点,打开如下对话框 [图片] 然后选择“设置”,在设置项里选择“订阅消息” [图片] [图片] 4)对于同一种消息,用户可以订阅多次,订阅多少次,就会收到多少次订阅消息,这个订阅次数是否有上限,官方没有说明,初步判断是不限的。但是,微信不会提供订阅的次数,因此需要在小程序的后端服务里存储用户订阅的次数。因此,我在微慕小程序专业版里,提供了一个给用户多次订阅的设置,并记录用户订阅的次数。 [图片] 如果用户需要某个消息服务,可以订阅多次,当然也可以在点击“订阅”的对话框里选择“取消”,“取消”一次也就减少一次订阅。 5)对于支付的场景,也需要用户确认是否订阅,这个我觉得不合理,支付后给用户一个订单推送消息应该是刚性需求,不需要再询问一遍用户是否订阅。 2.调用接口下发订阅消息 订阅消息下发的接口是小程序后台服务端调用:subscribeMessage.send,此方法类似下发模板消息的方法,详细调用说明见参考官方的链接: https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/subscribe-message/subscribeMessage.send.html 订阅消息的下发接口方法和模板消息稍有不同, 模板消息的json格式如下 [代码]"data": {[代码] [代码]"keyword1": {[代码] [代码]"value": "内容1",[代码] [代码]"color": "#000"[代码] [代码]},[代码] [代码]"keyword2": {[代码] [代码]"value": "内容2",[代码] [代码]"color": "#000"[代码] [代码]}[代码] [代码]}[代码] 而订阅消息的json格式如下: [代码]"data": {[代码] [代码]"thing1": {[代码] [代码]"value": "内容"[代码] [代码]},[代码] [代码]"number2": {[代码] [代码]"value": 20[代码] [代码]}[代码] 订阅消息的字段key是和数据类型有关,value的参数需要严格按照设置的类型提交,如果不按类型提交,会导致发送失败。同时如果是文本型的内容,字数也有限制,超过限制也会发送失败,但具体字数是多少,官方没有给出,同时中英文混合计算的长度也有差异,据我目前测试25个中文字符是可以的。希望官方能给出具体的字符长度限制的明确数字。 如果调用下发的次数大于用户的订阅次数,调用接口下发订阅消息会返回失败。报如下错误 [图片] 二.订阅消息使用心得1.订阅消息虽然把订阅的授权的交给了用户,但是也增加了用户使用难度,同时,一次性订阅只能收到一次,操作起来比较繁琐,如果不是刚需用户可能会首次就拒绝了这个服务,要想重新获取授权,需要用户自己打开小程序设置里去配置,颇为麻烦,小程序没有提供更简便的方法去唤起。 2.小程序的服务商为了获得更多给用户发送订阅消息的次数,肯定会想方设法去埋点引诱用户去点击订阅,这种诱导估计也是违规。 3.用户使用门槛和学习比较高,比如某个预约的服务,原来的场景是用户只要有提交表单,小程序就可以推送消息给用户,但是现在需要用户主动去订阅,无形中多了一步,如果用户不熟悉订阅消息或者直接点了“取消”,小程序就没法通知到用户了,用户可能因此错失服务,对商家和用户都是损失。 4.微信小程序将采用订阅消息,并逐步取消模板消息,虽然微信官方试图在方便用户和不打扰用户这两种选择里去寻求平衡,但订阅消息目前的模式恐怕无法达到这个期望,至少在我看来,无论对小程序的服务商,还是小程序的用户,都感到不方便。 update:2020年5月18日,日前订阅消息已经支持微信小程序开发工具。
2020-05-18