使用微信统一消息接口从小程序发送消息到公众号

1,668 阅读1分钟

准备工作

  1. 小程序配置正常,有appId
  2. 小程序和服务号已经关联
  3. 小程序用户已经关联的服务号

没有关联服务号,就要在业务上设计,引导用户完成服务号关联

代码

代码很简单,如下

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…