一、写在前面的话
1.1、现状
在目前的业务中我们有着很多的消息推送的需求,一开始我们是放在微信公众号的模板消息里面的。
后来因为便利性问题转移到了企业微信的应用消息。
但是随着消息种类、数量越来越多,就会显得很臃肿。所以在在近期的小程序整体完善后,业务调整为:
① 业务消息发送企业微信消息并链接到小程序
② 通知消息走目前的自建应用消息
1.2、预期达成
简单来说这次的调整主要预期有如下3个:
① 业务和通知分离
② 解决消息堆积和臃肿的问题
③ 切掉目前应用消息链接的H5页面
1.3、相关参考
因为这次修改时在之前的基础上进行的,所以如果你有一些云里雾里,可以先阅读下面的文章:
springboot集成企业微信收发应用消息
二、企业微信支持
2.1、官方说明
小程序通知消息,只允许绑定了小程序的应用发送,从2019年6月28日起,用户收到的小程序通知会出现在各个独立的应用中。
通过上述说明我们可以获得的信息有:
① 企业微信支持发送小程序消息
② 企业微信要绑定小程序
③ 用户接受的通知显示在小程序的应用中(这正是我想要的!)
④ 不支持全员发送了(因为现在消息分属小程序应用了)
2.2、请求示例
{
"touser" : "zhangsan|lisi",
"toparty": "1|2",
"totag": "1|2",
"msgtype" : "miniprogram_notice",
"miniprogram_notice" : {
"appid": "wx123123123123123",
"page": "pages/index?userid=zhangsan&orderid=123123123",
"title": "会议室预订成功通知",
"description": "4月27日 16:16",
"emphasis_first_item": true,
"content_item": [
{
"key": "会议室",
"value": "402"
},
{
"key": "会议地点",
"value": "广州TIT-402会议室"
},
{
"key": "会议时间",
"value": "2018年8月1日 09:00-09:30"
},
{
"key": "参与人员",
"value": "周剑轩"
}
]
},
"enable_id_trans": 0,
"enable_duplicate_check": 0,
"duplicate_check_interval": 1800
}
Java
2.3、参数说明
参数 |
是否必须 |
说明 |
touser |
否 |
成员ID列表(消息接收者,多个接收者用‘|’分隔,最多支持1000个) |
toparty |
否 |
部门ID列表,多个接收者用‘|’分隔,最多支持100个。 |
totag |
否 |
标签ID列表,多个接收者用‘|’分隔,最多支持100个。 |
msgtype |
是 |
消息类型,此时固定为:miniprogram_notice |
appid |
是 |
小程序appid,必须是与当前应用关联的小程序 |
page |
否 |
点击消息卡片后的小程序页面,仅限本小程序内的页面。该字段不填则消息点击后不跳转。 |
title |
是 |
消息标题,长度限制4-12个汉字(支持id转译) |
description |
否 |
消息描述,长度限制4-12个汉字(支持id转译) |
emphasis_first_item |
否 |
是否放大第一个content_item |
content_item |
否 |
消息内容键值对,最多允许10个item |
key |
是 |
长度10个汉字以内 |
value |
是 |
长度30个汉字以内(支持id转译) |
enable_id_trans |
否 |
表示是否开启id转译,0表示否,1表示是,默认0 |
enable_duplicate_check |
否 |
表示是否开启重复消息检查,0表示否,1表示是,默认0 |
duplicate_check_interval |
否 |
表示是否重复消息检查的时间间隔,默认1800s,最大不超过4小时 |
2.4、官方示例效果
三、整体改造过程
3.1、创建微信小程序
这个就不做过多的说明了…
3.2、创建小程序应用
这里选择关联已有的小程序,会自动跳转到微信登录平台,按说明一步步操作即可。
创建完成后如下:
一个是应用
一个是微信小程序
3.3、增加消息类型枚举类
MSG_TYPE_00(0, "文本消息"),
MSG_TYPE_01(1, "图片消息"),
MSG_TYPE_02(2, "语音消息"),
MSG_TYPE_03(3, "视频消息"),
MSG_TYPE_04(4, "文件消息"),
MSG_TYPE_05(5, "图文消息"),
MSG_TYPE_06(6, "卡片消息"),
MSG_TYPE_07(7, "小程序消息");
Java
3.4、增加小程序的业务分支
case 7:
/*小程序消息发送*/
MiniProgramDataDTO miniProgramDataDTO = new MiniProgramDataDTO();
miniProgramDataDTO.setMsgtype("miniprogram_notice");
miniProgramDataDTO.setTouser(msgHandlerVO.getToUser());
miniProgramDataDTO.setToparty(msgHandlerVO.getToparty());
miniProgramDataDTO.setMiniprogram_notice(msgHandlerVO.getMiniProgramDataVO());
rltStr = HttpClientUtil.sendJsonStr(url, JSONObject.toJSONString(miniProgramDataDTO));
break;
Java
3.5、附上我的微信小程序测试POJO
/**
* @author XA
* date 2020/11/18 14:30
* description 小程序内容DTO
* params
* return
*/
@Data
public class MiniProgramDataDTO implements Serializable {
/**
* 消息类型,此时固定为:miniprogram_notice
*/
private String msgtype;
/**
* 部门ID列表,多个接收者用‘|’分隔,最多支持100个。
*/
private String toparty;
/**
* 成员ID列表(消息接收者,多个接收者用‘|’分隔,最多支持1000个)
*/
private String touser;
/**
* 小程序消息内容
*/
private MiniProgramDataVO miniprogram_notice;
}
/**
* @author XA
* date 2020/11/18 14:30
* description 小程序内容VO
* params
* return
*/
@Data
public class MiniProgramDataVO implements Serializable {
/**
* appId
*/
@NotBlank(message = "appId不能为空!")
private String appid;
/**
* 小程序跳转页,不传则不跳转
*/
@NotBlank(message = "小程序跳转页不能为空!")
private String page;
/**
* 标题
*/
@NotBlank(message = "标题不能为空!")
private String title;
/**
* 消息描述
*/
private String description;
/**
* 是否放大一级标题
*/
private boolean emphasis_first_item;
/**
* 消息内容键值对,最多支持10个
*/
private List<JSONObject> content_item;
}
Java
3.6、测试发送
四、写在最后
4.1、效果展示
4.2、注意事项
① 首次进入要进行微信授权
② 可能因为小程序登录过期(按各自业务处理),导致要重新登录
如若转载,请注明出处:https://www.yiheng8.com/161531.html