java实现 微信公众号推送消息 ,cv 就可运行!!!

打印 上一主题 下一主题

主题 867|帖子 867|积分 2601

一,注册公众号

1,官网地址:申请测试公众号
地址: 微信公众平台 (qq.com)
文档地址:微信开放文档 (qq.com)
2,注册后可以查看自己的appId 和 appsecret

3,创建模板

  • 请注意:
  • 1、测试模板的模板ID仅用于测试,不能用来给正式帐号发送模板消息
  • 2、为方便测试,测试模板可任意指定内容,但实际上正式帐号的模板消息,只能从模板库中获得
  • 3、需为正式帐号申请新增符合要求的模板,需使用正式号登录公众平台,按指引申请
  • 4、模板内容可设置参数(模板标题不可),供接口调用时使用,参数需以{{开头,以.DATA}}结尾
我创建的模板
  1. 早安!:{{name.DATA}}
  2. 天气:{{weather.DATA}}
  3. 距离破壳日:{{birthday.DATA}}
复制代码

二,代码部分

​        发送消息和推送消息都是需要 token  的,所以第一步就可以获取token,再拿获取的token 进行发送消息,每天获取token的是有次数限制的(2000次)
添加依赖

使用微信公众号需要的依赖
  1.         <dependency>
  2.             <groupId>com.github.binarywang</groupId>
  3.             <artifactId>weixin-java-mp</artifactId>
  4.             <version>3.3.0</version>
  5.         </dependency>
复制代码
我这里把  也添上,等下可以在swagger测试
  1.         <dependency>
  2.             <groupId>io.springfox</groupId>
  3.             <artifactId>springfox-swagger2</artifactId>
  4.             <version>2.9.2</version>
  5.         </dependency>
  6.         <dependency>
  7.             <groupId>io.springfox</groupId>
  8.             <artifactId>springfox-swagger-ui</artifactId>
  9.             <version>2.9.2</version>
  10.         </dependency>
  11.         <dependency>
  12.             <groupId>com.github.xiaoymin</groupId>
  13.             <artifactId>knife4j-spring-boot-starter</artifactId>
  14.             <version>2.0.7</version>
  15.         </dependency>
复制代码
具体代码

controller 层
这里就两个部分,getToken() 方法 是获取token,   pushMessage() 是推送消息(这里代码中没有模板id,需要修改成上面自己创建的模板id)
  1. @Api(tags = "各项测试")
  2. @RestController
  3. @RequestMapping("/loginInfo")
  4. public class SendWeChatMessageController {
  5. //    /*
  6. //     * 功能: 公众号:appid,这里也可以配置到yaml 文件里面
  7. //     */
  8. //
  9. //    @Value("${wx.appId}")
  10. //    private String appId;
  11. //
  12. //    /*
  13. //     * 功能: 公众号:appsecret
  14. //     */
  15. //
  16. //    @Value("${wx.appsecret}")
  17. //    private String appsecret;
  18.     private final Logger logger = LoggerFactory.getLogger(SendWeChatMessageController.class);
  19.     @ApiOperation("获取token")
  20.     @GetMapping("/getToken")
  21.     public Object getToken(@PathParam("grantType") String grantType,@PathParam("appId") String appId,@PathParam("secret") String secret) throws Exception {
  22.         String tokenUrl = WeChatUrlEnum.TOKEN.getUrl();
  23.         String params = "grant_type=" + grantType + "&appid=" + appId + "&secret=" + secret;
  24.         logger.info("请求地址为:" + tokenUrl + params);
  25.         String tokenResponse = HttpUtils.sendGet(tokenUrl, params);
  26.         JSON parse = JSONUtil.parseObj(tokenResponse);
  27.         System.out.println(parse);
  28.         return parse;
  29.     }
  30.     @ApiOperation("发送消息")
  31.     @PostMapping("/testPushMessage")
  32.     public String pushMessage(@RequestBody PushMessageToUserVo pushMessageToUserVo) {
  33.         // 组装要发送的数据
  34.         JSONObject body = new JSONObject();
  35.         // 要推给谁
  36.         body.put("touser", pushMessageToUserVo.getTouser());
  37.         // 模板ID
  38.         body.put("template_id", "这里填写自己的模板id");
  39.         String accessToken = pushMessageToUserVo.getAccessToken();
  40.         // 创建消息和内容,这里可以自己定义,对应好模板就行
  41.         JSONObject data = new JSONObject();
  42.         data.put("name", new JSONObject().put("value", "做一个身体和心灵都勇敢的人,趁着身体未老,心灵还透明。晚安!"));
  43.         data.put("weather", new JSONObject().put("value", "阴天  19°c"));
  44.         data.put("birthday", new JSONObject().put("value", "53   天"));
  45.         body.put("data", data);
  46.         logger.info("body---->{}", body.toString());
  47.         String post = HttpUtil.post("https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken, body.toString());
  48.         logger.info("通知到用户--->{}", post);
  49.         return body.toString();
  50.     }
  51. }
复制代码
其他代码

config
这里使用 knife4j,等下好测试接口
  1. @Configuration
  2. @EnableSwagger2
  3. public class SwaggerConfiguration {
  4.     @Bean(value = "defaultApi2")
  5.     public Docket defaultApi2() {
  6.         return new Docket(DocumentationType.SWAGGER_2)
  7.                 .apiInfo(new ApiInfoBuilder()
  8.                         //.title("swagger-bootstrap-ui-demo RESTful APIs")
  9.                         .description("# swagger-bootstrap-ui-demo RESTful APIs")
  10.                         .termsOfServiceUrl("http://www.xx.com/")
  11.                         .contact("xx@qq.com")
  12.                         .version("1.0")
  13.                         .build())
  14.                 //分组名称
  15.                 .groupName("2.X版本")
  16.                 .select()
  17.                 //这里指定Controller扫描包路径,自行记得修改!!!!
  18.                 .apis(RequestHandlerSelectors.basePackage("com.example.springbootwechat.controller"))
  19.                 .paths(PathSelectors.any())
  20.                 .build();
  21.     }
  22. }
复制代码
entity
这个是推送消息vo,给那个用户推送消息,并带上token
  1. @Data
  2. @ApiModel(description = "用户推送vo")
  3. public class PushMessageToUserVo {
  4.     @ApiModelProperty(value = "用户微信关注号", required = true)
  5.     private String touser;
  6.     @ApiModelProperty(value = "用户Token", required = true)
  7.     private String accessToken;
  8. }
复制代码
enum
我这里是把地址都变成枚举,因为后面地址会比较多,便于维护,当然也可以配置在yaml ,或者定义在使用处。
  1. public enum WeChatUrlEnum {
  2.     /**
  3.      * 获取token
  4.      */
  5.     TOKEN("获取微信 token的地址","https://api.weixin.qq.com/cgi-bin/token");
  6.     private String info;
  7.     private String url;
  8.     WeChatUrlEnum(String info,String url) {
  9.         this.info =info;
  10.         this.url = url;
  11.     }
  12.     public String getInfo() {
  13.         return info;
  14.     }
  15.     public void setInfo(String info) {
  16.         this.info = info;
  17.     }
  18.     public String getUrl() {
  19.         return url;
  20.     }
  21.     public void setUrl(String url) {
  22.         this.url = url;
  23.     }
  24. }
复制代码
utils
工具类:发送http get,post 请求
  1. public class HttpUtils {
  2.    public static String sendGet(String url, String query) throws Exception {
  3.        String fullUrl = url + "?" + query;
  4.        HttpURLConnection connection = (HttpURLConnection) new URL(fullUrl).openConnection();
  5.        connection.setRequestMethod("GET");
  6.        connection.setRequestProperty("Accept", "application/json");
  7.        if (connection.getResponseCode()!= 200) {
  8.            throw new RuntimeException("Failed : HTTP error code : " + connection.getResponseCode());
  9.        }
  10.        BufferedReader br = new BufferedReader(new InputStreamReader((connection.getInputStream())));
  11.        StringBuilder sb = new StringBuilder();
  12.        String output;
  13.        while ((output = br.readLine())!= null) {
  14.            sb.append(output);
  15.        }
  16.        connection.disconnect();
  17.        return sb.toString();
  18.    }
  19.    public static String sendPost(String url, String data) throws Exception {
  20.        URL fullUrl = new URL(url);
  21.        HttpURLConnection connection = (HttpURLConnection) fullUrl.openConnection();
  22.        connection.setRequestMethod("POST");
  23.        connection.setRequestProperty("Content-Type", "application/json");
  24.        connection.setRequestProperty("Accept", "application/json");
  25.        connection.setDoOutput(true);
  26.        DataOutputStream wr = new DataOutputStream(connection.getOutputStream());
  27.        wr.writeBytes(data);
  28.        wr.flush();
  29.        wr.close();
  30.        if (connection.getResponseCode()!= 200) {
  31.            throw new RuntimeException("Failed : HTTP error code : " + connection.getResponseCode());
  32.        }
  33.        BufferedReader br = new BufferedReader(new InputStreamReader((connection.getInputStream())));
  34.        StringBuilder sb = new StringBuilder();
  35.        String output;
  36.        while ((output = br.readLine())!= null) {
  37.            sb.append(output);
  38.        }
  39.        connection.disconnect();
  40.        return sb.toString();
  41.    }
  42. }
复制代码
测试

接口swagger地址:http://127.0.0.1:1955/doc.html   自己注意端口
1,获取token

2,发送消息

手机端:接收到的消息

谢谢看到这!!!有不对地方,可以留言评论讨论哦!!!
希望可以动动小手,点个关注!!!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

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

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

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

本版积分规则

冬雨财经

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表