搜索
房产
装修
汽车
婚嫁
健康
理财
旅游
美食
跳蚤
二手房
租房
招聘
二手车
教育
茶座
我要买房
买东西
装修家居
交友
职场
生活
网购
亲子
情感
龙城车友
找美食
谈婚论嫁
美女
兴趣
八卦
宠物
手机

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

[复制链接]
查看: 110|回复: 0

1万

主题

1万

帖子

4万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
45263
发表于 2020-1-24 10:31 | 显示全部楼层 |阅读模式
内容有点多,请耐心!
近来公司的有这个营业需求,又很恰巧让我来完成:
首先想要对接,先要一个公众号,再就是斥地文档了:https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Overview.html
不外请留意这一点
Java对接微信公众号模板消息推送  热点新闻 1925536-20200121152650526-960198223


ok,我们继续:再来完成公众号的底子设备:  
Java对接微信公众号模板消息推送  热点新闻 1925536-20200121152821715-1245239111


    办事器地点(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

先来看看官方文档对于推送模板消息参数说明:
Java对接微信公众号模板消息推送  热点新闻 1925536-20200121150301921-52821735


刚起头看这个斥地文档的时候我还是有些懵的

openId怎样拿?   不晓得!那好吧,度娘一下、google一下,迷惑不就诊理了!
Java对接微信公众号模板消息推送  热点新闻 1925536-20200121150942020-181187154


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

我就省去没必要的麻烦朴直是个Demo,就挑选已有的:
Java对接微信公众号模板消息推送  热点新闻 1925536-20200121154132829-1508403962


挑选一个进去增加模板就行了:
Java对接微信公众号模板消息推送  热点新闻 1925536-20200121154310517-626585528


ok,模板id也拿到了,现在就起头

请大家也具体的看看 WxJava 的文档

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

导入wxjava公众号 对应的pom
Java对接微信公众号模板消息推送  热点新闻 1925536-20200121154619875-381444685

  1.    com.github.binarywang   weixin-java-mp   3.6.0
复制代码

然后就需要设备公众号相关的信息了,我小我比力喜幸亏 yml 里面设备
Java对接微信公众号模板消息推送  热点新闻 1925536-20200121155305608-1227117224

  1. # 微信公众号设备wx:  appid: 11111  secret: 22222  token: 33333  aeskey: 44444
复制代码
设备了这个就需要对应这个设备的Component了(实体类)
  1. /** * @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

-----------------------------好的,列位,我们现在起头-----------------------------

  我先给大家一步一步分析
Java对接微信公众号模板消息推送  热点新闻 1925536-20200121160143203-2055025551



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

好,再往返头看 WxJava
Java对接微信公众号模板消息推送  热点新闻 1925536-20200121160533709-936727988


恩,按照上面的示例代码,我写了个Demo
  1. /**
  2. * 微信消息推送
  3. *
  4. * @ClassName WxMsgPush
  5. * @Author chenghao
  6. * @Date 2020/1/10 16:20
  7. **/
  8.     @Slf4j
  9.     @Component
  10.     public class WxMsgPush {
  11.     /**
  12.      * 微信公众号API的Service
  13.      */
  14.     private final WxMpService wxMpService;
  15.     /**
  16.      * 机关注入
  17.      */
  18.     WxMsgPush(WxMpService wxMpService) {
  19.         this.wxMpService = wxMpService;
  20.     }
  21.     /**
  22.      * 发送微信模板信息
  23.      *
  24.      * @param openId 继续者openId
  25.      * @return 能否推送乐成
  26.      */
  27.     public Boolean SendWxMsg(String openId) {
  28.         // 发送模板消息接口
  29.         WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder()
  30.                 // 吸收者openid
  31.                 .toUser(openId)
  32.                 // 模板id
  33.                 .templateId("xxxxxxxxxxxxxxxxxxxxxxxxxxx")
  34.                 // 模板跳转链接
  35.                 .url("http://www.baidu.com")
  36.                 .build();
  37.         // 增加模板数据
  38.         templateMessage.addData(new WxMpTemplateData("first", "您好", "#FF00FF"))
  39.                 .addData(new WxMpTemplateData("keyword1", "这是个测试", "#A9A9A9"))
  40.                 .addData(new WxMpTemplateData("keyword2", "这又是个测试", "#FF00FF"))
  41.                 .addData(new WxMpTemplateData("remark", "这还是个测试", "#000000"));
  42.         String msgId = null;
  43.         try {
  44.             // 发送模板消息
  45.             msgId = wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage);
  46.         } catch (WxErrorException e) {
  47.             e.printStackTrace();
  48.         }
  49.         log.warn("·==++--·推送微信模板信息:{}·--++==·", msgId != null ? "乐成" : "失利");
  50.         return msgId != null;
  51.     }
  52. }
复制代码

wdnmd!一上来就发现报错!!!   
Could not autowire. No beans of 'WxMpService' type found. -------> 没法自动接线。找不到“ WxMpService”典范的bean
  一脸懵逼,然后看了下这个WxMpService接口
Java对接微信公众号模板消息推送  热点新闻 1925536-20200121163021227-995765229
我靠,这些实现类,淦!


后来细致研讨了下需要自己写个Configuration
  1. /** * @ClassName WxConfig * @Author chenghao * @Date 2020/1/11 09:23 **/@Configurationpublic class WxConfig {    /**     * 声明实例     *     * @return     */    @Bean    public WxMpService wxMpService() {        WxMpService wxMpService = new WxMpServiceImpl();        return wxMpService;    }
复制代码

ok,起头分析代码

首先这个
Java对接微信公众号模板消息推送  热点新闻 1925536-20200121161751763-1393180656


点进去瞅一眼有四个属性:
      
  1. /** * 吸收者openid. */private String toUser;/** * 模板ID. */private String templateId;/**   * 模板跳转链接.   * [code]   * url和miniprogram都好坏必填字段,若都不传则模板无跳转;若都传,会优先跳转至小步伐。   * 斥地者可按照现实需要挑选其中一种跳转方式即可。当用户的微信客户端版本不支持跳小步伐时,将会跳转至url。   *
复制代码
  */  private String url;  /**   * 跳小步伐所需数据,不需跳小步伐可不用传该数据.   *   * @see #url   */  private MiniProgram miniProgram;[/code]
ok,我们继续分析

留意一下这个
Java对接微信公众号模板消息推送  热点新闻 1925536-20200121161229386-373330001

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

Java对接微信公众号模板消息推送  热点新闻 1925536-20200121161507844-1051760
这个就是赋值的内容了
Java对接微信公众号模板消息推送  热点新闻 1925536-20200121161550867-1261519611
翰墨对应的色彩
末端一步:推送
Java对接微信公众号模板消息推送  热点新闻 1925536-20200121162138018-279372566


懵逼中·········
点进去,
Java对接微信公众号模板消息推送  热点新闻 1925536-20200121163626628-1238993878
Java对接微信公众号模板消息推送  热点新闻 1925536-20200121163644056-1726806190
又来个接口

Java对接微信公众号模板消息推送  热点新闻 1925536-20200121163713968-1498167559
看到响应的方式了

好了,晓得了对应方式的感化,终究可以推送了。可是可是,到现在,我才想起一件事变,我设备的公众号信息,他能自己读?很明显我们少设备了信息。
Java对接微信公众号模板消息推送  热点新闻 1925536-20200121164806885-1555203207


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,大家要留意这个!!!
  1. [/code][code]/**
  2. * @ClassName WxConfig
  3. * @Author chenghao
  4. * @Date 2020/1/11 09:23
  5. **/
  6. @Configuration
  7. public class WxConfig {
  8.     private final WxMpProperties wxMpProperties;
  9.     /**
  10.      * 机关注入
  11.      *
  12.      * @param wxMpProperties
  13.      */
  14.     WxConfig(WxMpProperties wxMpProperties) {
  15.         this.wxMpProperties = wxMpProperties;
  16.     }
  17.     /**
  18.      * 微信客户端设备存储
  19.      *
  20.      * @return
  21.      */
  22.     @Bean
  23.     public WxMpConfigStorage wxMpConfigStorage() {
  24.         WxMpDefaultConfigImpl configStorage = new WxMpDefaultConfigImpl();
  25.         // 公众号appId
  26.         configStorage.setAppId(wxMpProperties.getAppId());
  27.         // 公众号appSecret
  28.         configStorage.setSecret(wxMpProperties.getSecret());
  29.         // 公众号Token
  30.         configStorage.setToken(wxMpProperties.getToken());
  31.         // 公众号EncodingAESKey
  32.         configStorage.setAesKey(wxMpProperties.getAesKey());
  33.         return configStorage;
  34.     }
  35.     /**
  36.      * 声明实例
  37.      *
  38.      * @return
  39.      */
  40.     @Bean
  41.     public WxMpService wxMpService() {
  42.         WxMpService wxMpService = new WxMpServiceImpl();
  43.         wxMpService.setWxMpConfigStorage(wxMpConfigStorage());
  44.         return wxMpService;
  45.     }
复制代码
复制代码

ok,重要 code 部分都完成了,起头测试吧。请自己建一个Controller
  1. [/code][code]/**
  2. * 微信消息推送
  3. */
  4. private final WxMsgPush wxMsgPush;
  5. /**
  6. * 机关注入
  7. */
  8. protected PushMsgApi(WxMsgPush wxMsgPush) {
  9.     this.wxMsgPush = wxMsgPush;
  10. }
复制代码
  1. /**     * 发送微信模板消息     */    @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);    }
复制代码
Java对接微信公众号模板消息推送  热点新闻 1925536-20200121170549398-472059965
Java对接微信公众号模板消息推送  热点新闻 1925536-20200121170435856-1304602128


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

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

免责声明:假如加害了您的权益,请联系站长,我们会实时删除侵权内容,感谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright © 2006-2014 全椒百姓网-全椒知名**,发布及时新鲜的全椒新闻资讯 生活信息 版权所有 法律顾问:高律师 客服电话:0791-88289918
技术支持:迪恩网络科技公司  Powered by Discuz! X3.2
快速回复 返回顶部 返回列表