微信订阅消息(后端)

md文件连接添加链接描述

一、订阅消息流程

注意:目前微信这边只支持一次性订阅,就是同意几次发送几次,永久性订阅目前只支持一些政府,医疗等行业。所以我们做不到一次订阅就可以一直发消息,需要每次订阅发一次。

但是前端支持一次订阅三个不同的模板id,这样就可以做到一次订阅可以发三次(不同模板id的消息)消息。

所以这个订阅消息,对于后端来说就只是调用微信的接口,发送消息就可以了,重点还是在前端去考虑如何在合适的地点去吊起弹窗,去上用户进行授权。

二、获取模板id

首先登录微信公众平台,作为开发者,你可以去选取订阅的模板,也可以去自己创建模板,但是自己创建的模板一个月只有十次机会,并且你创建了,微信这边给你审核,一般审核时间在3-7天,并且审核失败你需要重新提交审核,这也会消耗你的每月十次机会的。

选中一个订阅模板,进入编辑

选中之后再我的模板

点击详情

注意这个详细内容很重要。

三、代码展示

1. 导入微信小程序包依赖(pom中配置)

        <!--微信小程序工具包--><dependency><groupId>com.github.binarywang</groupId><artifactId>weixin-java-miniapp</artifactId><version>4.0.0</version></dependency>

2.配置微信的必要参数(yml文件中配置)

wx:miniapp:app-id: wxba11af1453cscsapp-secret: f86410070e07cscscsc

这些参数很重要,都可以在微信公众平台找到

3.微信配置

  1. 属性配置

    
    import lombok.Data;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.context.annotation.Configuration;@Data
    @Configuration
    @ConfigurationProperties(prefix = "wx.miniapp")
    public class WxProperties {/*** 设置微信小程序的appid.*/private String appId;/*** 设置微信小程序的Secret.*/private String appSecret;}
  2. 将微信小程序注入到spring中

    
    import cn.binarywang.wx.miniapp.api.WxMaService;
    import cn.binarywang.wx.miniapp.api.impl.WxMaServiceImpl;
    import cn.binarywang.wx.miniapp.config.impl.WxMaDefaultConfigImpl;
    import lombok.AllArgsConstructor;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;@Configuration
    @AllArgsConstructor
    public class WxConfig {private final WxProperties properties;/*** 小程序service配置*/@Beanpublic WxMaService wxMaService() {WxMaDefaultConfigImpl wxMaConfig = new WxMaDefaultConfigImpl();wxMaConfig.setAppid(this.properties.getAppId());wxMaConfig.setSecret(this.properties.getAppSecret());WxMaService wxMaService = new WxMaServiceImpl();wxMaService.setWxMaConfig(wxMaConfig);return wxMaService;}}
    

4.获得微信的openid

@Slf4j  // 这个是为了记录log的,写在类的最前方private final WxMaService wxMaService;/***  获得微信openid* @param code 前端给的微信code* @return openid*/public String wxLogin(String code) {try {WxMaUserService wxMaUserService = wxMaService.getUserService();WxMaJscode2SessionResult sessionInfo = wxMaUserService.getSessionInfo(code);String openid = sessionInfo.getOpenid();return openid;} catch (WxErrorException e) {log.error("微信授权异常: 错误码:{}, 错误码描述:{}",e.getError().getErrorCode(), e.getError().getErrorMsg());//出现异常直接抛出异常,这是自己自定义的异常,需要修改成自己项目定义的,或者直接在后面return null;throw new ApiErrorException(ErrorCode.WX_CODE_EXPIRED);}}

5.处理订阅消息的主体

/*** 设置会议订阅消息** @param form 消息条件* @return 订阅会议消息*/public static List<WxMaSubscribeMessage.Data> setMeetingMsg (MeetingMsgForm form) {List<WxMaSubscribeMessage.Data> dataList = new ArrayList<>();//这里要完全按照订阅消息模板详情去设置,thing1 ,thing2...不能变WxMaSubscribeMessage.Data data1 = new WxMaSubscribeMessage.Data();data1.setName("thing1");data1.setValue(form.getTitle());dataList.add(data1);WxMaSubscribeMessage.Data data2 = new WxMaSubscribeMessage.Data();data2.setName("date2");DateTime time = DateUtil.parse(form.getDate(), "yyy-MM-dd HH:mm");data2.setValue(time.toString("yyy-MM-dd HH:mm"));dataList.add(data2);WxMaSubscribeMessage.Data data3 = new WxMaSubscribeMessage.Data();data3.setName("thing3");data3.setValue(form.getMeetingName());dataList.add(data3);return dataList;}

import lombok.Data;@Data
public class MeetingMsgForm {/*** 会议名称*/private String title;/*** 会议日期*/private String date;/*** 会议备注*/private String content;
}

6.业务处理,发送订阅消息

@Slf4j  // 这个是为了记录log的,写在类的最前方/*** 根据模板id发送消息** @param form       消息主体* @param userOpenIds   用户的openid列表* @param templateId 模板id*/private void sendWxMsg(MeetingMsgForm form, Long recordId, List<String> userOpenIds) {for (String openId : userOpenIds) {WxMaSubscribeMessage.WxMaSubscribeMessageBuilder builder = WxMaSubscribeMessage.builder();//发送人openidbuilder.toUser(openId);//发送的模板idbuilder.templateId(templateId);//消息主体builder.data(GetMsgUtil.setMeetingMsg(form));//点击订阅消息的跳转链接(默认是正式发布的小程序页面,当然也可以通过参数进行控制)builder.page("/cs/cs");WxMaSubscribeMessage msg = builder.build();try {wxMaService.getMsgService().sendSubscribeMsg(msg);} catch (WxErrorException e) {log.error("会议通知发送失败,用户openId:{}, 错误码:{},错误信息:{}",openId, e.getError().getErrorCode(), e.getError().getErrorMsg());}}}

四、总结

发送订阅消息主要是一次性订阅,我们后端可以无限次数的请求微信的服务器,但是微信服务器会根据用户是否授权,以及授权了几次去进行发送,所以这里最容易出的问题就是发送了消息,但是提示报错为用户未授权。

如果做这个订阅消息,一定和需求的制定者说清楚,目前不支持永久性订阅,只能是订阅一次发送一次。需要前端去设置在那里弹起订阅。

微信订阅消息(后端)教程相关推荐

  1. 微信小程序订阅消息开发教程及代码(java后端实现)

    1.配置消息模板,微信订阅消息需要固定的模板 小程序后台地址:点击进入 2.小程序前端订阅 大多数模板是一次订阅,永久订阅需要指定的机构或组织,具体可以参考官方文档. 用户在小程序内点击按钮触发消息订 ...

  2. 后端——》Java程序推送微信订阅消息

    使用场景1:在微信小程序中进行了某种操作后,推送消息告知用户的操作结果 使用场景2:微信端办公流程提交给下一个人审批后,得到审批通过或是驳回修改的命令 使用场景具体如下图,可用在签到.提醒.通知.警告 ...

  3. 微信小程序云开发教程-手把手:获取微信订阅消息的模板ID

    本小节,我们将手把手带领大家一起实现第一个接口,获取微信订阅消息的模板ID 通过开发这个接口,我们将学会云函数的基本结构和函数返回值的格式定义. 开发接口前,我们必须先写接口文档.小程序后端的接口文档 ...

  4. PHP 对接微信公众号订阅消息详细教程

    订阅通知是一个用户主动订阅.服务号按需下发的通知能力.使用过程请遵守<微信公众平台服务协议><微信公众平台运营规范>. 用户在前述场景主动订阅后,服务号可通过接口向用户发送订阅 ...

  5. uni-app 小程序 微信订阅消息通知

    1.在小程序公众平台选择消息模板 2.uni-app前端调用代码 a.小程序登录代码 loginUser() {var me = this;if (!me.name) {uni.showToast({ ...

  6. 微信订阅消息推送(记录)

    1.打开微信公众平台,选用订阅消息模板(可在公共库选用,也可自己申请:审核时间3-7天): 2.打开微信官方文档,了解订阅消息的方法subscribeMessage.send | 微信开放文档 3.建 ...

  7. Java实现体_微信订阅消息体Java实现

    话不多说,直接上代码: SubscribeMsgData.java订阅消息体对象,字符串长度超长可自动截取 package xin.xihc.rebate.bean; import lombok.Al ...

  8. 微信订阅消息 开启验证token失败解决方法

    下面代码放到你填写的url地址里面就好了 public function checksignature(){$signature = $this->request->get('signat ...

  9. 借助云开发,利用订阅消息,云函数路由实现小程序好友一对一聊天,添加好友等仿微信功能

    微信小程序借助云开发,利用订阅消息,云函数路由实现小程序好友一对一聊天,添加好友等仿微信功能 这篇文章已经进行了更新,请点此进行查看 仿微信好友聊天 主要功能有 后续可能补充功能 详细介绍 注意 保存 ...

最新文章

  1. python元素定位的八种方法_selenium webdriver基于Python系列之八种元素定位方法
  2. 【朱-刘算法】【最小树形图】hdu6141 I am your Father!
  3. 《系统集成项目管理工程师》必背100个知识点-83消极影响的风险的应对策略
  4. neo4j 连接java
  5. 2019年了,C#发展的怎么样了呢?
  6. python enumerate()
  7. 噢,老天爷! 属于Java的协程终于来了!
  8. TCP三次握手建立连接和四次挥手关闭连接
  9. python 哪些项目_一份2018年Python开源项目Top100清单!
  10. 变量独立与不相关的区别
  11. Java最全思维导图知识汇总
  12. 阿里首席架构师分享的Java工程师职业规划
  13. 【书籍阅读】-人在回路机器学习 Human-in-the-Loop Machine Learning(一)
  14. Paypal Express Checkout介绍独立站一种付款选择
  15. 【Week 7 作业】A - TT 的魔法猫、B - TT 的旅行日记、C - TT 的美梦
  16. 低温和大风会增加心梗风险
  17. ClassLoder总结
  18. 与 WordPress 的美妙相遇
  19. Innodb解决幻读
  20. 【 无线网络技术 】实验一、构建无线网络实验环境

热门文章

  1. 笔记本电脑亮度不能调节的一种解决方案
  2. macos系统镜像iso_我们一起来安装----虚拟机安装macOS
  3. Android - 分屏模式(多窗口模式)
  4. python地理处理包——Shapely介绍及用户手册
  5. Java为图片加水印
  6. 【转载】CSDI2018广州关于《Nginx》的分享(附文字速录与PPT)
  7. linux挖矿的清理工具,Linux挖矿病毒的清除与分析
  8. Mixly第三方用户库开发Arduino UNO使用EMW3080连接阿里云
  9. apollo 阿波罗使用
  10. python做项目看板_一个好用的看板工具