热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

内容有点多,请耐心!最近公司的有这个业务需求,又很凑巧让我来完成:首先想要对接,先要一个公众号,再就是开发文档了:https:developers.weixin.qq.

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

内容有点多,请耐心!

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

首先想要对接,先要一个公众号,再就是开发文档了: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

 



   com.github.binarywang
   weixin-java-mp
   3.6.0

 

然后就需要配置公众号相关的信息了,我个人比较喜欢在 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;

/**
   * 模板跳转链接.
   * 
   * url和miniprogram都是非必填字段,若都不传则模板无跳转;若都传,会优先跳转至小程序。
   * 开发者可根据实际需要选择其中一种跳转方式即可。当用户的微信客户端版本不支持跳小程序时,将会跳转至url。
   * 
*/ 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
**/
@Configuration
public 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!推送完成!!请大家自行去编写!!!

 

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


推荐阅读
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • 概述H.323是由ITU制定的通信控制协议,用于在分组交换网中提供多媒体业务。呼叫控制是其中的重要组成部分,它可用来建立点到点的媒体会话和多点间媒体会议 ... [详细]
  • Echarts图表重复加载、axis重复多次请求问题解决记录
    文章目录1.需求描述2.问题描述正常状态:问题状态:3.解决方法1.需求描述使用Echats实现了一个中国地图:通过选择查询周期&#x ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • 标题: ... [详细]
  • 工作经验谈之-让百度地图API调用数据库内容 及详解
    这段时间,所在项目中要用到的一个模块,就是让数据库中的内容在百度地图上展现出来,如经纬度。主要实现以下几点功能:1.读取数据库中的经纬度值在百度上标注出来。2.点击标注弹出对应信息。3 ... [详细]
  • 在一对一直播源码使用过程中,有时会出现软键盘切换闪屏问题,就是当切换表情的时候屏幕会跳动,因此要对一对一直播源码表情面板无缝切换进行优化。 ... [详细]
  • 校园表白墙微信小程序,校园小情书、告白墙、论坛,大学表白墙搭建教程
    小程序的名字必须和你微信注册的名称一模一样在后台注册好小程序。mp.wx-union.cn后台域名https。mp.wx-union.cn ... [详细]
author-avatar
mobiledu2502860957
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有