准备工作
- 小程序配置正常,有appId
- 小程序和服务号已经关联
- 小程序用户已经关联的服务号
没有关联服务号,就要在业务上设计,引导用户完成服务号关联
代码
代码很简单,如下
WxMaService wxMaService = (WxMaService) ctx.getBean("wxMaService");
WxMaUniformMessage msg =
WxMaUniformMessage.builder()
.appid("wx************84") // 服务号的appId
.isMpTemplateMsg(true) // 要 true
.toUser("oN*******************60") // 小程序中用户的openId即可
.templateId("G*************98") // 服务号中的模板消息ID,不能是订阅消息ID
.url("https://www.baidu.com") // 点击消息,从微信中跳转的页面链接. 和 miniProgram 互斥,只能选一个
.miniProgram( // 点击消息,跳转小程序页面,和 url 互斥,只能选一个
new WxMaUniformMessage.MiniProgram(
"wx**************07", "pages/home/home-page", false, false))
.build()
.addData(new WxMaTemplateData("first", "您有一条待支付货款")) // 模板消息参数, 参数名不要带.DATA
.addData(new WxMaTemplateData("keyword1", "医用氧气"))
.addData(new WxMaTemplateData("keyword2", "货款"))
.addData(new WxMaTemplateData("keyword3", "9999.99"))
.addData(new WxMaTemplateData("remark", "如有疑问,请致电客服"));
wxMaService.getMsgService().sendUniformMsg(msg);
代码说明
注意代码中各参数的‘所属’是小程序还是服务号。addData 的参数不用细看,明显是消息内容,忽略之。
- 要给服务号发消息,注意 appId 是服务号的appId。
- 对应的 isMpTemplateMsg 要是true
- toUser 用小程序的openId就好,这也是这个接口最爽的地方,不用查来查去的做映射。
就这些,很简单。
参考资料
微信官方文档:小程序统一消息接口 developers.weixin.qq.com/miniprogram…
微信官方文旦:公众号模板消息 developers.weixin.qq.com/doc/offiacc…
使用的SDK:WxJava - 微信开发 Java SDK github.com/Wechat-Grou…