微信公众号初次开发

    • 其他操作
  • 项目搭建
    • maven
    • application.yml
    • yml参数配置
    • 微信客户端配置
  • 搭建完成 实现业务
    • 模板消息推送
      • 准备工作
        • 模板消息填写要求
        • 图文消息填写要求
      • 推送模板消息
        • 推送模板消息结果——效果
      • 推送图文消息
        • 推送图文消息工具类
        • 问题和结果
    • 获取关注的用户openId
      • 既然有了openId集合和要发送的消息怎么群发

其他操作

书接上文:微信测试号申请步骤和调试.
书接下文:后台获取授权用户的openId.

项目搭建

maven

<dependencies><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.13</version></dependency><dependency><groupId>org.jolokia</groupId><artifactId>jolokia-core</artifactId><version>1.6.0</version></dependency><dependency><groupId>net.coobird</groupId><artifactId>thumbnailator</artifactId><version>0.4.8</version></dependency><dependency><groupId>com.github.binarywang</groupId><artifactId>weixin-java-mp</artifactId><version>3.6.0</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.16</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.1.10</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.0.0</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.61</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId><version>3.8.1</version></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-autoconfigure</artifactId><version>1.3.2</version></dependency><dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus</artifactId><version>3.1.2</version></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.7.0</version></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>2.7.0</version></dependency><dependency><groupId>javax.persistence</groupId><artifactId>persistence-api</artifactId><version>1.0</version></dependency><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.2.9</version></dependency></dependencies>

application.yml

###################  项目启动端口  ###################
server:port: 80# 微信公众号配置
wx:#微信公众号APPIDappid: 123#微信公众号SECRETsecret: 123#微信公众号模板IDtemplateId: 123

yml参数配置


import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;/*** 微信参数**/
@Data
@Component
@ConfigurationProperties(prefix = "wx")
public class WxMpProperties {/*** 公众号appId*/private String appId;/*** 公众号appSecret*/private String secret;/*** 公众号模板ID*/private String templateId;
}

微信客户端配置


import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.api.impl.WxMpServiceImpl;
import me.chanjar.weixin.mp.config.WxMpConfigStorage;
import me.chanjar.weixin.mp.config.impl.WxMpDefaultConfigImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** 微信配置**/
@Configuration
public class WxConfig {@AutowiredWxMpProperties wxMpProperties;/*** 构造注入** @param wxMpProperties*/WxConfig(WxMpProperties wxMpProperties) {this.wxMpProperties = wxMpProperties;}/*** 微信客户端配置存储** @return*/@Beanpublic WxMpConfigStorage wxMpConfigStorage() {WxMpDefaultConfigImpl configStorage = new WxMpDefaultConfigImpl();// 公众号appIdconfigStorage.setAppId(wxMpProperties.getAppId());// 公众号appSecretconfigStorage.setSecret(wxMpProperties.getSecret());// 公众号TokenconfigStorage.setToken(wxMpProperties.getToken());// 公众号EncodingAESKeyconfigStorage.setAesKey(wxMpProperties.getAesKey());return configStorage;}/*** 声明实例** @return*/@Beanpublic WxMpService wxMpService() {WxMpService wxMpService = new WxMpServiceImpl();wxMpService.setWxMpConfigStorage(wxMpConfigStorage());return wxMpService;}
}

搭建完成 实现业务

模板消息推送

准备工作


链接: 申请测试模板.

模板消息填写要求

first.DATA 跟上.DATA说明是数据

人员:{{first.DATA}}
地址:{{keyword1.DATA}}
区域:{{keyword2.DATA}}
告警类型:{{remark1.DATA}}
时间:{{remark2.DATA}}

图文消息填写要求

<xml>
<Articles> <item> <Title><![CDATA[title1]]></Title> <Description><![CDATA[description1]]></Description> <PicUrl><![CDATA[picurl]]></PicUrl> <Url><![CDATA[url]]></Url></item><item><Title><![CDATA[title]]></Title><Description><![CDATA[description]]></Description><PicUrl><![CDATA[picurl]]></PicUrl> <Url><![CDATA[url]]></Url> </item>
</Articles>
</xml>

推送模板消息

这里使用微信提供的serviceApi
链接: WxMpService.


import com.shangqu.datapush.buildsite.model.emnus.AlarmType;
import com.shangqu.datapush.buildsite.model.mysqlData.AlarmInfo;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.mp.api.WxMpAiOpenService;
import me.chanjar.weixin.mp.api.WxMpService;
import me.chanjar.weixin.mp.api.WxMpUserService;
import me.chanjar.weixin.mp.bean.result.WxMpUserList;
import me.chanjar.weixin.mp.bean.template.WxMpTemplateData;
import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PostMapping;/*** 微信消息推送***/
@Slf4j
@Component
@CrossOrigin
public class WxMsgPush {/*** 微信公众号API的Service*/private final WxMpService wxMpService;/*** 构造注入*/WxMsgPush(WxMpService wxMpService) {this.wxMpService = wxMpService;}/*** 发送微信模板信息** @param openId 接受者openId* @return 是否推送成功*/public Boolean SendWxMsg(String openId,String templateId) {// 发送模板消息接口WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder()// 接收者openid.toUser(openId)// 模板id.templateId(templateId)// 模板跳转链接.url("www.baidu.com").build();// 添加模板数据templateMessage.addData(new WxMpTemplateData("first", "null告警""#000000")).addData(new WxMpTemplateData("keyword1", "","#000000")).addData(new WxMpTemplateData("keyword2","", "#000000")).addData(new WxMpTemplateData("keyword3", "", "#000000")).addData(new WxMpTemplateData("keyword4", "", "#000000"));String msgId = null;try {// 发送模板消息msgId = wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage);} catch (WxErrorException e) {e.printStackTrace();}log.warn("·==++--·推送微信模板信息:{}·--++==·", msgId != null ? "成功" : "失败");return msgId != null;}}

推送模板消息结果——效果


点击详情会进入百度

推送图文消息

    /*** 获取token* @return*/public String getAccessToken() throws WxErrorException {String accessToken = wxMpService.getAccessToken();return accessToken;}@ApiOperation(value = "", notes = "")@ResponseBody@RequestMapping(value = "/findwx", method = RequestMethod.POST)public void SendQYMessageimg(@RequestParam("id") String id) throws WxErrorException {String Url = "http://www.baidu.com";String mp = getAccessToken();String strurl = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=" + mp;try {//图片地址String PicUrl = "https://img-blog.csdn.net/20160907155302548";String responeJsonStr = "{";//用户openIdresponeJsonStr += "\"touser\": \"" + "用户openId" + "\",";responeJsonStr += "\"msgtype\": \"news\",";responeJsonStr += "\"agentid\": \"wxd4aff8****\",";responeJsonStr += "\"news\": {";responeJsonStr += "\"articles\": [{";responeJsonStr += "  \"title\": \"" + "震惊外国一小伙竟然做出... ..." + "\",";responeJsonStr += "  \"description\": \" " + "今日一美国男子在家中,竟然做出... ..." + "\",";responeJsonStr += "  \"url\": \"" + Url + "\",";responeJsonStr += "  \"picurl\": \"" + PicUrl + "\"";responeJsonStr += "}]";responeJsonStr += "},";responeJsonStr += "\"safe\":\"0\"";responeJsonStr += "}";xstream.connectWeiXinInterface(strurl, responeJsonStr);} catch (Exception e) {e.printStackTrace();}}

推送图文消息工具类


import java.io.InputStream;
import java.io.OutputStream;import java.net.HttpURLConnection;
import java.net.URL;public class xstream {public static void connectWeiXinInterface(String action,String json){URL url;try {url = new URL(action);HttpURLConnection http = (HttpURLConnection) url.openConnection();http.setRequestMethod("POST");http.setRequestProperty("Content-Type","application/x-www-form-urlencoded");http.setDoOutput(true);http.setDoInput(true);System.setProperty("sun.net.client.defaultConnectTimeout", "30000");// 连接超时30秒System.setProperty("sun.net.client.defaultReadTimeout", "30000"); // 读取超时30秒http.connect();OutputStream os = http.getOutputStream();os.write(json.getBytes("UTF-8"));// 传入参数InputStream is = http.getInputStream();int size = is.available();byte[] jsonBytes = new byte[size];is.read(jsonBytes);String result = new String(jsonBytes, "UTF-8");System.out.println("请求返回结果:"+result);os.flush();os.close();} catch (Exception e) {e.printStackTrace();}}}

问题和结果

要用户先发送一条消息给公众号,你才能发送成功

点击消息会进入百度

获取关注的用户openId

    /*** 获得关注公众号所有openid* @return* @throws WxErrorException*/@Overridepublic List<String> getUserList() throws WxErrorException {WxMpUserList wxMpUserList = wxMpService.getUserService().userList(null);List<String> openids = wxMpUserList.getOpenids();return openids;}

既然有了openId集合和要发送的消息怎么群发

微信并没有提供群发接口–就在自己代码中迭代openId集合去循环发送

java向微信公众号---发送模板和图文消息相关推荐

  1. (Java)微信公众号发送模板消息

    模板消息仅用于公众号向用户发送重要的服务通知,只能用于符合其要求的服务场景中,如信用卡刷卡通知,商品购买成功通知等.不支持广告等营销类消息以及其它所有可能对用户造成骚扰的消息. 1.模板消息调用时主要 ...

  2. java端微信公众号发送模板信息乱码解决

    jdk1.8 windows环境,tomcat下,发送模板信息乱码 项目采用httpclient发送请求 解决方案 StringEntity s = new StringEntity(jsonStr, ...

  3. springboot微信公众号发送模板消息

    springboot微信公众号发送模板消息 1.准备工作 申请你所需要模板 配置ip白名单(你所需要部署的服务器ip) 2.编写模板消息的请求参数封装类 import java.util.HashMa ...

  4. 利用Java实现微信公众号发送信息提醒通知

    项目场景: 项目场景:利用Java实现微信公众号发送信息提醒通知! Java实现方法: 1.首先创建实现公众号消息发送的方法: public ReturnDO<String> sendTe ...

  5. 微信公众号 发送模板消息和获取关注公众号人数

    微信公众号发送模板消息 1.创建模板,拿到模板ID 2.创建发送消息工具类 import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JS ...

  6. php 微信模板消息url,【求助】php 微信公众号 发送模板消息改变不了颜色

    php 微信公众号 发送模板消息改变不了颜色 不知道为什么 1.模板消息内容: 2.发送的模板消息效果: 序列化的模板消息内容如下: 大家可以测试下,touser需要另外添加下 a:4:{s:11:& ...

  7. php之微信公众号发送模板消息

    讲一下开发项目中微信公众号发送模板消息的实现过程(我用的还是Thinkphp5.0).先看一下效果,如图: 就是类似于这样的,下面讲一下实现过程: 第一步:微信公众号申请模板消息权限: 立即申请: 申 ...

  8. php 公众号多图文消息,微信公众号怎样制作多图文消息?

    原标题:微信公众号怎样制作多图文消息? 废话不多说,先上一波图: 怎样可以把多篇文章同时发送? 当然,这个为题对于我们运营老司机来说不叫事儿,但是会者不难,难者不会,有很多新手小白就是不知道怎样可以群 ...

  9. 微信公众号 java发送消息_微信公众号发送模板消息 Java实现。

    本博文是测试公众号调用模板接口测试.请不要完全复制我的代码.里面的测试代码中有本人测试号的微信模板id.麻烦替换成自己的可以吗? 第一步:创建模板信息 第二步:准备模板代码实体类用到的属性自行加入就行 ...

最新文章

  1. HTML5 手写板签名
  2. POJ 2823 Sliding Window
  3. python基础===八大排序算法的 Python 实现
  4. Active Directory系列之十七:实战详解域信任关系
  5. 分享一个Go项目的整洁架构模板
  6. pycharm-python文件注释头
  7. 2016软考网络规划设计师论文写作
  8. sql设为简单模式sql_SQL模式演练
  9. sun.java2d.fontpath,java起用默认浏览器
  10. 【知识索引】【汇编语言】
  11. OSPF特殊区域和选路规则
  12. 今天的C位,必须是这位浙大卜教授!
  13. LINUX 远程复制
  14. mysql 存微信表情_MySQL保存 emoji 表情(微信昵称表情)
  15. 打破定制化语音技术落地怪圈?从讲一口标准英音的语音助手说起
  16. bugzilla mysql_使用Mysql 5.6.11安装Bugzilla 4.2.5
  17. [转]Apache Ignite——新一代数据库缓存系统
  18. PostgreSQL DBA(63) - Extension(pg_stat_statements)
  19. 跨域请求传递Cookie
  20. 仿脉脉PHP源码,php,mysql_如何实现类似脉脉网的二维人际关系,php,mysql,算法,社区,社交 - phpStudy...

热门文章

  1. 自制DynamicProxy开发成功,性能测试提升了1.4倍。(看来微软的realproxy并不弱!导致我无法提升一个数量级)...
  2. 电气绘图软件EPLAN在WIN10详细安装教程
  3. C++并发编程(C++11到C++17)
  4. ferguson博弈_组合博弈游戏
  5. Access-培训管理系统-03-建个数据库
  6. 抖音神曲《一百万个可能》:“在一瞬间,我们有一百万个可能”
  7. Android应用开发性能优化完全分析,移动应用开发课程报告
  8. 使用人性化的Linux防火墙CFW阻止DDOS攻击
  9. iOS 语音搜索通讯录算法
  10. 与计算机和网络有关的英语,网络的英语作文(通用10篇)