微信小程序消息通知开发

这篇具有很好参考价值的文章主要介绍了微信小程序消息通知开发。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

微信小程序消息通知开发及注意点

大致流程图:

1. 登录小程序平台选择合适的模板
微信小程序通知,微信小程序,前端,java

Q:长期订阅与普通订阅有何区别?
A:1、一次性订阅消息:用户订阅一次后,开发者可下发一条消息,不限时间。若用户勾选了“总是保持以上选择,不再询问”且点击了允许,那么以后都默认同意订阅这条消息。用户不再做多次选择,开发者也避免了更繁琐的提醒。
2、长期性订阅消息:用户订阅一次后,可长期下发多条消息。目前长期性订阅消息向 政务、医疗、交通、金融、教育 等线下公共服务开放,后续将综合评估行业需求和用户体验持续完善。(长期订阅消息只针对特定行业开放,所以普通开发者并无法使用)
*注意:目前微信那边长期订阅的消息模板因为被滥用,几乎都用不了

2. 推送之前获取小程序的token

接口文档:https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/mp-access-token/getAccessToken.html

  • 自己封装的一个获取token方法
public String getAppletToken(Long hospitalId, BusHospitalMiniprogramConfig wechatConfig) {
        String token = redisService.getCacheObject(WechatCache.APPLET_ACCESS_TOKEN + hospitalId);
        // token失效或者为空
        if (StringUtils.isEmpty(token) || checkToken(token)) {
            String url = WechatInterface.getTokenUrl(wechatConfig.getAppid(), wechatConfig.getAppSecret());
            String resp= weChatUtil.postRequestForWeiXinService(url);
            log.info(hospitalId + "获取小程序token返回:" + resp);
            if (StringUtils.isEmpty(resp)) {
                throw new ServiceException("获取小程序token失败");
            }
            token = JSONObject.parseObject(resp).getString("access_token");
            // 设置为1.9h(有效期2h)
            redisService.setCacheObject(WechatCache.APPLET_ACCESS_TOKEN + hospitalId, token,
                    7100L, TimeUnit.SECONDS);
        }
        return token;
    }

3. 消息推送

接口文档:https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/mp-message-management/subscribe-message/sendMessage.html#%E8%AF%B7%E6%B1%82%E5%8F%82%E6%95%B0-2

/**
 * 推送小程序消息通知
 * @param pushDTO 推送接口的入参,可看接口文档
 * @return 推送结果
 */
public Boolean sendAppletMsg(AppletMsgPushDTO pushDTO) {
		// 查询数据库小程序配置信息
	   BusHospitalMiniprogramConfig wechatConfig = miniprogramConfigMapper.selectOne(
	           new LambdaQueryWrapper<BusHospitalMiniprogramConfig>()
	                   .eq(BusHospitalMiniprogramConfig::getHospitalId, pushDTO.getHospitalId())
	                   .eq(BusHospitalMiniprogramConfig::getIdentifying,pushDTO.getAppletKey()));
	   StringUtils.isNullThrowExp(wechatConfig, "小程序配置未设置");
	   if (StringUtils.isEmpty(wechatConfig.getTemplate())) {
	       throw new ServiceException("小程序消息通知模板为空");
	   }
	   // 查询消息模板id (我将消息模板id存在数据库了,所以这里通过key去获取要推送的消息模板)
	   JSONObject template = JSON.parseObject(wechatConfig.getTemplate(), JSONObject.class);
	   String templateId = template.getString(pushDTO.getTemplate_id());
	   if (StringUtils.isEmpty(templateId)) {
	       throw new ServiceException(pushDTO.getTemplate_id() + "消息通知模板不存在");
	   }
	   // 获取token
	   String token = getAppletToken(pushDTO.getHospitalId(), wechatConfig);
	   // 获取步骤1存储的openid
	   BusPatientApplet pa = patientAppletService.getOne(new LambdaQueryWrapper<BusPatientApplet>()
	           .eq(BusPatientApplet::getHospitalId, pushDTO.getHospitalId())
	           .eq(BusPatientApplet::getPatientId, pushDTO.getTouser())
	           .eq(BusPatientApplet::getAppletId, wechatConfig.getId()));
	   StringUtils.isNullThrowExp(pa,"获取用户小程序账号openid为空");
	   pushDTO.setTemplate_id(templateId);
	   pushDTO.setAccess_token(token);
	   pushDTO.setTouser(pa.getOpenid());
	   // Http请求调用下微信推送接口
	   log.info("小程序消息通知入参:" + JSON.toJSONString(pushDTO));
	   String resp = HttpUtils.sendPostJson(WechatInterface.getSubscribeUrl(pushDTO.getAccess_token()), JSON.toJSONString(pushDTO), null);
	   log.info("微信小程序消息通知结果:" + resp);
	   if (StringUtils.isNotEmpty(resp)) {
	       JSONObject object = JSONObject.parseObject(resp);
	       if (YesNoEnum.NO.getCode().equals(object.getInteger("errcode"))) {
	           return true;
	       }
	       return false;
	   }
	   return false;
}

实现效果

微信小程序通知,微信小程序,前端,java

踩坑注意点

  • Q:推送接口返回:{ “errcode”: 47003,“errmsg”: “argument invalid! data.thing1.value is empty rid: 6486d741-7e95ec5f-39d18f1f”}
    A:其实这个错误有很多种原因引起,注意看msg提示的字段就可以了,检查下文档的参数值内容限制。其次还可以调用官方提供的文档,查询下rid,可以看到具体的入参,我这里检查过没发现有传入内容限制的东西,最终调用rid接口发现中文乱码了, 只需要在请求头的Content-Type设置为application/json; encoding=utf-8就可以了

rid接口地址:https://developers.weixin.qq.com/doc/offiaccount/openApi/get_rid_info.html
微信小程序通知,微信小程序,前端,java
微信小程序通知,微信小程序,前端,java

  • Q:用户没有勾选授权消息通知,小程序消息还是推送了
    A:一次性订阅的话,如果用户之前授权过但是没有进行消息推送,此时腾讯那边是将授权累计起来的,所以消息就会进行推送了,建议还是一对一授权以后就进行消息推送。

  • Q:长期订阅的消息有的可以推送有的推送提示用户拒绝该消息的推送
    A:检查使用的消息模板是不是出现了重复使用,官方不建议这样操作,我删除后换了个模板就可以推送了;还有目前一次性订阅与长期订阅不支持混用
    *文章来源地址https://www.toymoban.com/news/detail-601803.html

到了这里,关于微信小程序消息通知开发的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微信小程序添加全局 socket 并接收消息通知

    最近小程序中有使用到socket,来建立长连接,实现消息通知。总结一下实现思路。 首先,在app.js中初始化socket,并处理消息,添加心跳检测。 然后再接收到消息时添加回调方法: 然后再需要进行通知处理的页面添加如下代码: 最后,小程序的socket通知处理就完成了,欢迎各

    2024年02月16日
    浏览(40)
  • 【小程序】微信小程序关联公众号(服务号)推送通知消息

    最近开发的一个小程序项目需要通过服务号来推送通知。但是在最开始开发小程序的时候并没有考虑到这个功能。 预备知识 : 小程序openid:小程序用户的唯一id 公众号openid:公众号用户的唯一id unionid:同一用户,对同一个微信开放平台下的不同应用,unionid是相同的 准备

    2024年01月18日
    浏览(37)
  • uniapp微信小程序订阅消息发送服务通知--超详细

    由于公司需求,刚学完的小程序的我,要求开发一个直播通知的微信小程序,学了vue的我,选择还是使用uniapp开发,wx原生语法学完已经快忘了。在利用uniapp写代码的过程中,遇到很多问题,通过这篇博客分享一下总体实现思路以及一些小坑。整篇博客以逐步的思路让你完整

    2024年02月06日
    浏览(39)
  • 微信小程序通知,微信小程序长期订阅消息添加硬件设备能力的设备订阅消息step-by-step

    本文目的,分享一个实际案例: 开发微信小程序的报警器的微信订阅消息, 设备报警后触发微信报警 前提: 有一个微信小程序并且微信认证过。 1: 添加设备申请权限 2:按照实际情况填写设备信息, 一般等两天到三天能审核过  3: 申请设备消息能力 , 这个一部不做的

    2024年04月16日
    浏览(43)
  • 如何为微信小程序添加订阅消息和推送通知功能

    为微信小程序添加订阅消息和推送通知功能是非常有用的,它可以让用户在重要的事件发生时及时地收到通知。在本文中,我们将详细介绍如何为微信小程序添加这两种功能。 一、订阅消息 订阅消息是一种新的消息类型,用户可以选择是否订阅它们。订阅消息一般用于向用

    2024年02月04日
    浏览(58)
  • 前端Uni-app开发微信小程序|微信小程序手机商城

    作者主页:编程指南针 作者简介:Java领域优质创作者、CSDN博客专家 、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师 主要内容:Java项目、Python项目、前端项目、人工智能与大数据、简历模板、学习资料、面试题库

    2024年02月12日
    浏览(42)
  • uniapp全局挂载uViewUI的u-toast消息通知组件(微信小程序)

    在使用uView消息通知组件的时候,必须在每个页面中手动添加一个标签,打上ref然后才能调用,非常的麻烦,能不能像ElementUI那样把组件挂载到Vue原型上从而能全局调用呢,个人也是尝试了很多方法,但是由于小程序的app.vue不能写页面,所以无法达到ElementUI那种方便的效果,

    2024年02月15日
    浏览(30)
  • 微信公众号 - Java推送小程序订阅消息给用户_java 通过微信公众号发送订阅通知

    不啰嗦,我们直接开始! 本文使用体验版小程序进行调试。 1、登录微信公众平台 点开下面链接,使用微信扫码 微信公众平台 然后选择一个小程序并登录 2、在小程序后台找到Appid、AppSecret、Token、EncodingAESKey等参数 AppSecret忘记了可以自行重置 往下翻,在消息推送这儿能看到

    2024年04月26日
    浏览(39)
  • 微信小程序的订阅消息是一个允许开发者向用户发送重要通知的功能。这里为您展示如何实现小程序订阅消息的基本步骤和代码示例

    步骤 1: 获取模板 ID 首先,您需要登录微信公众平台,进入「小程序管理」后台,找到“设置” “开发设置” “订阅消息”,然后选择并配置所需的模板,记录模板 ID。 步骤 2: 小程序前端请求订阅 在小程序的某个页面或组件中,当用户执行某个操作(例如点击按钮)时,可

    2024年02月04日
    浏览(68)
  • 开发微信小程序消息订阅的步骤

    开发微信小程序消息订阅的步骤如下: 登录微信公众平台,在左侧导航栏中选择 “开放能力”,然后点击 “订阅消息” 进入订阅消息页面。 在页面左侧的 “模板库” 中选择需要使用的模板,然后根据模板的要求填写相应的参数。 在小程序代码中引入 wx.requestSubscribeMessa

    2024年02月15日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包