微信订阅消息(后端)教程
微信订阅消息(后端)
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.微信配置
属性配置
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;}
将微信小程序注入到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());}}}
四、总结
发送订阅消息主要是一次性订阅,我们后端可以无限次数的请求微信的服务器,但是微信服务器会根据用户是否授权,以及授权了几次去进行发送,所以这里最容易出的问题就是发送了消息,但是提示报错为用户未授权。
如果做这个订阅消息,一定和需求的制定者说清楚,目前不支持永久性订阅,只能是订阅一次发送一次。需要前端去设置在那里弹起订阅。
微信订阅消息(后端)教程相关推荐
- 微信小程序订阅消息开发教程及代码(java后端实现)
1.配置消息模板,微信订阅消息需要固定的模板 小程序后台地址:点击进入 2.小程序前端订阅 大多数模板是一次订阅,永久订阅需要指定的机构或组织,具体可以参考官方文档. 用户在小程序内点击按钮触发消息订 ...
- 后端——》Java程序推送微信订阅消息
使用场景1:在微信小程序中进行了某种操作后,推送消息告知用户的操作结果 使用场景2:微信端办公流程提交给下一个人审批后,得到审批通过或是驳回修改的命令 使用场景具体如下图,可用在签到.提醒.通知.警告 ...
- 微信小程序云开发教程-手把手:获取微信订阅消息的模板ID
本小节,我们将手把手带领大家一起实现第一个接口,获取微信订阅消息的模板ID 通过开发这个接口,我们将学会云函数的基本结构和函数返回值的格式定义. 开发接口前,我们必须先写接口文档.小程序后端的接口文档 ...
- PHP 对接微信公众号订阅消息详细教程
订阅通知是一个用户主动订阅.服务号按需下发的通知能力.使用过程请遵守<微信公众平台服务协议><微信公众平台运营规范>. 用户在前述场景主动订阅后,服务号可通过接口向用户发送订阅 ...
- uni-app 小程序 微信订阅消息通知
1.在小程序公众平台选择消息模板 2.uni-app前端调用代码 a.小程序登录代码 loginUser() {var me = this;if (!me.name) {uni.showToast({ ...
- 微信订阅消息推送(记录)
1.打开微信公众平台,选用订阅消息模板(可在公共库选用,也可自己申请:审核时间3-7天): 2.打开微信官方文档,了解订阅消息的方法subscribeMessage.send | 微信开放文档 3.建 ...
- Java实现体_微信订阅消息体Java实现
话不多说,直接上代码: SubscribeMsgData.java订阅消息体对象,字符串长度超长可自动截取 package xin.xihc.rebate.bean; import lombok.Al ...
- 微信订阅消息 开启验证token失败解决方法
下面代码放到你填写的url地址里面就好了 public function checksignature(){$signature = $this->request->get('signat ...
- 借助云开发,利用订阅消息,云函数路由实现小程序好友一对一聊天,添加好友等仿微信功能
微信小程序借助云开发,利用订阅消息,云函数路由实现小程序好友一对一聊天,添加好友等仿微信功能 这篇文章已经进行了更新,请点此进行查看 仿微信好友聊天 主要功能有 后续可能补充功能 详细介绍 注意 保存 ...
最新文章
- python元素定位的八种方法_selenium webdriver基于Python系列之八种元素定位方法
- 【朱-刘算法】【最小树形图】hdu6141 I am your Father!
- 《系统集成项目管理工程师》必背100个知识点-83消极影响的风险的应对策略
- neo4j 连接java
- 2019年了,C#发展的怎么样了呢?
- python enumerate()
- 噢,老天爷! 属于Java的协程终于来了!
- TCP三次握手建立连接和四次挥手关闭连接
- python 哪些项目_一份2018年Python开源项目Top100清单!
- 变量独立与不相关的区别
- Java最全思维导图知识汇总
- 阿里首席架构师分享的Java工程师职业规划
- 【书籍阅读】-人在回路机器学习 Human-in-the-Loop Machine Learning(一)
- Paypal Express Checkout介绍独立站一种付款选择
- 【Week 7 作业】A - TT 的魔法猫、B - TT 的旅行日记、C - TT 的美梦
- 低温和大风会增加心梗风险
- ClassLoder总结
- 与 WordPress 的美妙相遇
- Innodb解决幻读
- 【 无线网络技术 】实验一、构建无线网络实验环境