微信公众号分为订阅号和服务号,订阅号不支持模板消息,但是每天可以群发消息;而服务号一个月可以群发四次消息。认证过的服务号是可以使用模板消息的,认证需要 money,而订阅号就需要有内测的权限,微信对订阅号正在启用模板消息灰度测试,所以很多是不能自己测试的。但是可以使用测试号。不过值得注意的是,测试号只能用于测试,不能用于向正是号推送消息等。

功能实现

  1. 首先申请测试号,测试号申请地址
  2. 申请登录之后,可以看到已经生成的 appIDappsecret,这两个是获取公众号的 accessToken 信息必不可少的。
  3. 对于公众号模板消息测试而言,接口配置信息JS接口安全域名 可以略过不用配置。
  4. 测试号二维码需要关注,接收模板消息必须关注。模板消息接口需要按照要求增加一个模板。这样,准备工作就做好了,接下来可以进行代码了。
  5. 对应请求信息的 url 可以在 体验接口权限表 中点击对应的链接进行查看。
1
2
3
4
5
6
7
8
9
10
11
12
// 请求获取 accessToken
private static String tokenApi = "https://api.weixin.qq.com/cgi-bin/token?grant_type=" +
grant_type + "&appid=" + appid + "&secret=" + secret;

// 请求获取用户列表的 url GET请求:https://api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN&next_openid=NEXT_OPENID
private static String userListUrl = "https://api.weixin.qq.com/cgi-bin/user/get?access_token=";

// 请求获取用户基本信息(UnionID机制) GET请求:https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
private static String userInfoUrl = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=";

// 发送模板信息 url POST请求:https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN
private static String sendUrl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=";

问题解决

  1. 出现 "errcode":40003,"errmsg":"invalid openid rid: 61b87426-7ecce312-0478a848" 的错误:
    解决方案: 设置发送对象的键为 touser,不要为 toUser 或者 openid
    示例如下:
1
2
3
4
5
paramData.put("touser", openid);
paramData.put("template_id", templateId);
paramData.put("url", "xxx/login");
// data 为数据模板的 map
paramData.put("data", data);

本站由 江湖浪子 使用 Stellar 1.28.1 主题创建。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。