记企业微信发送消息点击跳转到微信小程序

2021-03-23 17:47:30  卢浮宫  版权声明:本文为站长原创文章,转载请写明出处


一、写在前面的话


    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
}


    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, "小程序消息");


    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;


    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;

}


    3.6、测试发送


        


四、写在最后


    4.1、效果展示

    

            

    4.2、注意事项

        ① 首次进入要进行微信授权

        ② 可能因为小程序登录过期(按各自业务处理),导致要重新登录



最新评论: