Java对接微信公众号模板消息推送

内容有点多,请耐心!

最近公司的有这个业务需求,又很凑巧让我来完成:

首先想要对接,先要一个公众号,再就是开发文档了:https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Overview.html

不过请注意这一点

ok,我们继续:再来完成公众号的基本配置:  

    服务器地址(URL):必须以http://或https://开头,分别支持80端口和443端口。这个URL是很重要的,需要响应微信发送的token验证

    令牌(Token):必须为英文或数字,长度为3-32字符。上面说过做验证的

    消息加解密密钥:可以直接随机生成

    消息加解密方式:明文、兼容、安全  看业务需求选择:我觉得明文省事点(个人见解)

详解微信开发文档:https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Overview.html

如果一直用微信的接口调用,会有点麻烦所以这边我就引用了     ---》WxJava《---

gitub:https://github.com/Wechat-Group/WxJava

gitee:https://gitee.com/binary/weixin-java-tools

先来看看官方文档对于推送模板消息参数说明:

刚开始看这个开发文档的时候我还是有些懵的

openId怎么拿?   不知道!那好吧,度娘一下、google一下,疑惑不就解决了!

ok,下一步template_id:模板Id;对于这个可以自己申请 or 选用已有的

我就省去没必要的麻烦方正是个Demo,就选择已有的:

选择一个进去添加模板就行了:

ok,模板id也拿到了,现在就开始

请大家也详细的看看 WxJava 的文档

---先建立 SpringBoot 项目---

导入wxjava公众号 对应的pom

<!-- WxJava公众号 -->
<dependency>
   <groupId>com.github.binarywang</groupId>
   <artifactId>weixin-java-mp</artifactId>
   <version>3.6.0</version></dependency>

然后就需要配置公众号相关的信息了,我个人比较喜欢在 yml 里面配置

# 微信公众号配置
wx:
  appid: 11111
  secret: 22222
  token: 33333
  aeskey: 44444

配置了这个就需要对应这个配置的Component了(实体类)

/**
 * @ClassName WXProperties
 * @Author chenghao
 * @Date 2020/1/10 15:44
 **/
@Data
@Component
@ConfigurationProperties(prefix = "wx")
public class WxMpProperties {

    /**
     * 公众号appId
     */
    private String appId;

    /**
     * 公众号appSecret
     */
    private String secret;

    /**
     * 公众号token
     */
    private String token;

    /**
     * 公众号aesKey
     */
    private String aesKey;
}

关于注解啥的我就不去详解了 不明白的自己去看看官方文档

SpringBoot:

https://docs.spring.io/spring-boot/docs/2.2.4.RELEASE/reference/html/spring-boot-features.html#boot-features-external-config-yaml

Lombok:

https://projectlombok.org/features/all

-----------------------------好的,各位,我们现在开始-----------------------------

  我先给大家一步一步分析

刚刚我们选择的模板,这些key都一个一个参数,文档上面说的很明白,赋值替换!!! 明白了这点就ok了。

好,再来回头看 WxJava 

恩,根据上面的示例代码,我写了个Demo

/** * 微信消息推送 * * @ClassName WxMsgPush * @Author chenghao * @Date 2020/1/10 16:20 **/    @Slf4j    @Component    public class WxMsgPush {

    /**     * 微信公众号API的Service     */    private final WxMpService wxMpService;

    /**     * 构造注入     */    WxMsgPush(WxMpService wxMpService) {        this.wxMpService = wxMpService;    }

    /**     * 发送微信模板信息     *     * @param openId 接受者openId     * @return 是否推送成功     */    public Boolean SendWxMsg(String openId) {        // 发送模板消息接口        WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder()                // 接收者openid                .toUser(openId)                // 模板id                .templateId("xxxxxxxxxxxxxxxxxxxxxxxxxxx")                // 模板跳转链接                .url("http://www.baidu.com")                .build();        // 添加模板数据        templateMessage.addData(new WxMpTemplateData("first", "您好", "#FF00FF"))                .addData(new WxMpTemplateData("keyword1", "这是个测试", "#A9A9A9"))                .addData(new WxMpTemplateData("keyword2", "这又是个测试", "#FF00FF"))                .addData(new WxMpTemplateData("remark", "这还是个测试", "#000000"));        String msgId = null;        try {            // 发送模板消息            msgId = wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage);        } catch (WxErrorException e) {            e.printStackTrace();        }        log.warn("·==++--·推送微信模板信息:{}·--++==·", msgId != null ? "成功" : "失败");        return msgId != null;    }}

wdnmd!一上来就发现报错!!!

Could not autowire. No beans of ‘WxMpService‘ type found. -------> 无法自动接线。找不到“ WxMpService”类型的bean

  一脸懵逼,然后看了下这个WxMpService接口 我靠,这些实现类,淦!

后来仔细研究了下需要自己写个Configuration

/**
 * @ClassName WxConfig
 * @Author chenghao
 * @Date 2020/1/11 09:23
 **/
@Configuration
public class WxConfig {

    /**
     * 声明实例
     *
     * @return
     */
    @Bean
    public WxMpService wxMpService() {
        WxMpService wxMpService = new WxMpServiceImpl();
        return wxMpService;
    }

ok,开始分析代码

首先这个

点进去瞅一眼有四个属性:

      

/**
 * 接收者openid.
 */
private String toUser;

/**
 * 模板ID.
 */
private String templateId;

/**
   * 模板跳转链接.
   * <pre>
   * url和miniprogram都是非必填字段,若都不传则模板无跳转;若都传,会优先跳转至小程序。
   * 开发者可根据实际需要选择其中一种跳转方式即可。当用户的微信客户端版本不支持跳小程序时,将会跳转至url。
   * </pre>
   */
  private String url;

  /**
   * 跳小程序所需数据,不需跳小程序可不用传该数据.
   *
   * @see #url
   */
  private MiniProgram miniProgram;

ok,我们继续分析

留意一下这个

需要跟你自己申请的模板那些key对应!!!

这个就是赋值的内容了

文字对应的颜色

最后一步:推送

懵逼中·········

点进去,又来个接口

看到相应的方法了

好了,知道了对应方法的作用,终于可以推送了。但是但是,到现在,我才想起一件事情,我配置的公众号信息,他能自己读?很显然我们少配置了信息。

https://gitee.com/binary/weixin-java-mp-demo-springboot/blob/master/src/main/java/com/github/binarywang/demo/wx/mp/config/WxMpConfiguration.java

真的是让我一顿好找啊

他用是Lambda表达式+Stream 这里我就不用了,我不想太骚(主要是不会)

改了一下自己写的config,大家要注意这个!!!


/** * @ClassName WxConfig * @Author chenghao * @Date 2020/1/11 09:23 **/@Configurationpublic class WxConfig {

    private final WxMpProperties wxMpProperties;

    /**     * 构造注入     *     * @param wxMpProperties     */    WxConfig(WxMpProperties wxMpProperties) {        this.wxMpProperties = wxMpProperties;    }

    /**     * 微信客户端配置存储     *     * @return     */    @Bean    public WxMpConfigStorage wxMpConfigStorage() {        WxMpDefaultConfigImpl configStorage = new WxMpDefaultConfigImpl();        // 公众号appId        configStorage.setAppId(wxMpProperties.getAppId());        // 公众号appSecret        configStorage.setSecret(wxMpProperties.getSecret());        // 公众号Token        configStorage.setToken(wxMpProperties.getToken());        // 公众号EncodingAESKey        configStorage.setAesKey(wxMpProperties.getAesKey());        return configStorage;    }

    /**     * 声明实例     *     * @return     */    @Bean    public WxMpService wxMpService() {        WxMpService wxMpService = new WxMpServiceImpl();        wxMpService.setWxMpConfigStorage(wxMpConfigStorage());        return wxMpService;    }
 

ok,主要 code 部分都完成了,开始测试吧。请自己建一个Controller


/** * 微信消息推送 */private final WxMsgPush wxMsgPush;

/** * 构造注入 */protected PushMsgApi(WxMsgPush wxMsgPush) {    this.wxMsgPush = wxMsgPush;}
/**
     * 发送微信模板消息
     */
    @ApiOperation("发送微信模板消息")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "openId", value = "接受者openId", dataType = "String", paramType = "query")
    })
    @PostMapping("/sendWxInfo")
    public void sendWxInfo(String openId) {
        // 执行发送
        Boolean aBoolean = wxMsgPush.SendWxMsg(openId);
        System.out.println(aBoolean);
    }

ok!推送完成!!请大家自行去编写!!!

(下篇出个微信登录详解)

原文地址:https://www.cnblogs.com/chenghao24/p/12221878.html

时间: 2024-10-17 02:39:09

Java对接微信公众号模板消息推送的相关文章

ASP.NET 微信公众平台模板消息推送功能完整开发

最近公众平台的用户提出了新需求,他们希望当收到新的邮件或者日程的时候,公众平台能主动推送一条提醒给用户.看了看平台提供的接口,似乎只有[模板消息]能尽量满足这一需求,但不得不说微信提供的实例太少,而且只有PHP的,不过摸索了一下还是成功的实现了. 首先是准备工作,需要申请开通[模板消息]功能,网上教程很多.然后申请通过之后,用户可以从现有的模板里选择15个使用,也可以自己添加模板使用.这里吐槽一下:申请添加新的模板时,微信出于保护用户的目的禁止了一些“看起来会很频繁”的消息类型,比如这图里的——

PHP 微信公众号开发 - 消息推送

项目微信公众号开发,需要做用户消息推送,记录下来以便日后使用 1,接上一篇文章,可以查看如何获取用户openid PHP 微信公众号开发 - 获取用户信息 2,添加模板消息 3,查看模板详情 根据模板详情设置对应推送消息 4,代码实现 1 <?php 2 // 字符编码 3 header("Content-Type:text/html; charset=utf-8"); 4 5 // 微信接口类 6 class WeChat{ 7 private static $appid; 8

小程序绑定公众号进行消息推送,公众号授权功能

小程序绑定公众号,通过公众号进行消息推送,首先要在小程序上进行公众号的授权 授权不可以直接在小程序上打开,所以必须要小程序先跳到其他网页,再跳回小程序 1.我们是做了一个先做账号绑定小程序,再做公众号绑定小程序,没有绑定的话,就跳到外部链接 wxBind () { // 绑定账号之后,再绑定小程序 let that = this.data; const data = { account: that.userInfo.account, openid: wx.getStorageSync('open

个人微信公众号,每天推送一篇高质量文章

个人微信公众号,每天推送一篇高质量文章,喜欢的就订阅吧

微信公众号实现无限制推送模板消息!可向指定openID群发

公众号提供模板消息接口,除了公众号规定的上限次数,一般情况下不能无限制推送,每次最多调用10万次,具体的看公众号后台开发接口权限>发送消息>模版消息(业务通知),可以看到每天最大的推送次数. 公众号后台没有提供模板消息推送的操作界面,需要通过微号帮公众号第三平台实现,支持全部粉丝推送.分组推送,暂不支持使用粉丝openID群发. 1.模板消息群发功能 操作界面设置,模板消息发送任务和创建模板消息,只有服务号才能使用模板消息群发功能,首次使用先在公众号后台申请模版功能. 2.创建模板消息 首次点

微信公众号 模板消息 定时推送 java

前提:业务需要,要做一个关于月报的微信消息推送.即每个月定时自动发送一条消息 给关注 公众号的人 用的是 公众号的测试账号(实际开发需要认证的公众号) 微信官网的 模板消息接口规则: 1.所有服务号都可以在功能->添加功能插件处看到申请模板消息功能的入口,但只有认证后的服务号才可以申请模板消息的使用权限并获得该权限:2.需要选择公众账号服务所处的2个行业,每月可更改1次所选行业:3.在所选择行业的模板库中选用已有的模板进行调用:4.每个账号可以同时使用25个模板.5.当前每个账号的模板消息的日调

asp群发微信公众号模板消息代码

刚刚做的一个项目需要用到asp群发微信公众号的模板消息, 以前没做过,想了一会用了下面这种方法实现的模板消息群发推送,效果很好. 原文地址:https://www.cnblogs.com/yjed/p/10843634.html

微信公众号模板消息开发小结

总结: 遇到的坑: ①要想调用微信的模版消息,我们就需要获取该用户关注的这个公众号openId, 要获取openId就要获取进入时候的code参数,code参数通过一个链接获取.那么我们在进入公众号后的时候就需要回调这个链接,然后获取到openId. 这里回调里面有一个redirect_uri参数,这个是回调的URL编码后的值.我们既然要回调,就需要在公众号管理端将回调域名设置为我们请求的域名(注意域名一个月只能修改三次). ②在调用微信获取code的链接时,不能是ajax请求,否则回调将无法完

微信公众号模版消息与小程序消息推送不同场景不同应用

1.公众号-插件-模板消息 图1.1 图1.2 图1.3 2.小程序-模板消息 图2.1 图2.2 图2.3 3.区别   1.推送条数不同 公众号的消息推送(以下简称公推)可以采用接口在后台调用接口无限向用户推送消息 小程序的消息推送(一下简称微推)只能允许开发者向用户在7天内推送有限条数的模板消息(引用官方的话)解释过来是:很难实现无限制推送用户消息(但是可以实现) 2.出现位置不同 公推消息形式会在该公众号下,与微信消息等级相同(如图1.2形式) 微推且消息出现在位置如图2.2,在"服务通