微信公众号开发学习笔记3

Posted by Young Sheep on July 4, 2023

为了实现向特定的用户群体推送模板消息,需要先给微信用户添加标签,之后通过标签筛选出特定的用户组,最后通过微信的模板消息接口向特定用户推送模板消息。 微信公众号的用户管理中已经实现了标签管理,所有并不需要我们在本地建立标签数据库,同时WxJava也实现的标签管理和模板发送的接口,我们只需要简单调用即可。

用户&标签管理

获取用户列表接口

微信有获取所有关注用户openid的接口,但默认最多只能拉取10000个用户的openid,当用户数量多于10000个时,会返还一个nextOpenid参数,表示拉取到的用户列表的最后一个用户的openid,在之后拉取可以设置这个参数表示从这个用户的位置开始拉取。 在WxJava中可以通过调用:

1
WxMpUserList wxUserList = wxMpService.getUserService().userList(next_openid);

获取到用户列表对象,next_oenpid表示指定开始获取的用户openid,返回值WxMpUserList其中包括一个List openids,即关注用户openid的列表,和String nextOpenid,即列表的最后一个用户的openid,用于获取下10000个用户openid。

获取用户信息接口

获取openid的列表之后可以循环调用获取用户信息接口:

1
2
String lang = "zh_CN"; //语言
WxMpUser user = wxMpService.getUserService().userInfo(openid,lang);

根据openid获取每个用户的信息,由于微信的接口调用次数限制以及花费的时间较长,所以最好同步将数据保存在本地。

创建标签接口

创建标签可调用:

1
WxUserTag res = this.wxService.getUserTagService().tagCreate(tagName);

返回值是一个创建成功的标签对象,包括id,name,count三个属性。

获取标签列表接口

1
List<WxUserTag> res = this.wxService.getUserTagService().tagGet();

返回值是一个标签对象的列表

批量绑定用户标签的接口

1
wxMpService.getUserTagService().batchTagging(tagid,openids);

tagid是一个Long型标签id,openids是一个需要绑定的用户openid字符串列表。

模板管理

获取模板接口

1
List<WxMpTemplate> wxMpTemplateList = wxMpService.getTemplateMsgService().getAllPrivateTemplate();

返回一个模板对象的列表,包括templateId模板id、title模板标题、primaryIndustry主要行业代码、deputyIndustry附属行业代码、content模板内容、example模板案例

批量发送模板信息

可以循环创建模板builder,在调用发送接口:

1
2
3
4
5
6
7
8
WxMpTemplateMessage.WxMpTemplateMessageBuilder builder = WxMpTemplateMessage.builder()
                .templateId(templateId)
                .url(url)
                .data(data);
openids.forEach(openid->{
	WxMpTemplateMessage msg = builder.toUser(openid).build();
	wxMpService.getTemplateMsgService().sendTemplateMsg(msg);
});