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

一,注册公众号

1,官网地址:申请测试公众号

地址: 微信公众平台 (qq.com)

文档地址:微信开放文档 (qq.com)

2,注册后可以查看自己的appId 和 appsecret
java实现 微信公众号推送消息 ,cv 就可运行!!!

3,创建模板

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

我创建的模板

早安!:{{name.DATA}}  天气:{{weather.DATA}}  距离破壳日:{{birthday.DATA}} 

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

二,代码部分

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

添加依赖

使用微信公众号需要的依赖

        <dependency>             <groupId>com.github.binarywang</groupId>             <artifactId>weixin-java-mp</artifactId>             <version>3.3.0</version>         </dependency> 

我这里把 也添上,等下可以在swagger测试

        <dependency>             <groupId>io.springfox</groupId>             <artifactId>springfox-swagger2</artifactId>             <version>2.9.2</version>         </dependency>         <dependency>             <groupId>io.springfox</groupId>             <artifactId>springfox-swagger-ui</artifactId>             <version>2.9.2</version>         </dependency>  <!--        knife4j 依赖-->         <dependency>             <groupId>com.github.xiaoymin</groupId>             <artifactId>knife4j-spring-boot-starter</artifactId>             <version>2.0.7</version>         </dependency> 

具体代码

controller 层

这里就两个部分,getToken() 方法 是获取token, pushMessage() 是推送消息(这里代码中没有模板id,需要修改成上面自己创建的模板id)

@Api(tags = "各项测试") @RestController @RequestMapping("/loginInfo") public class SendWeChatMessageController {  //    /* //     * 功能: 公众号:appid,这里也可以配置到yaml 文件里面 //     */ // //    @Value("${wx.appId}") //    private String appId; // //    /* //     * 功能: 公众号:appsecret //     */ // //    @Value("${wx.appsecret}") //    private String appsecret;     private final Logger logger = LoggerFactory.getLogger(SendWeChatMessageController.class);         @ApiOperation("获取token")     @GetMapping("/getToken")     public Object getToken(@PathParam("grantType") String grantType,@PathParam("appId") String appId,@PathParam("secret") String secret) throws Exception {         String tokenUrl = WeChatUrlEnum.TOKEN.getUrl();         String params = "grant_type=" + grantType + "&appid=" + appId + "&secret=" + secret;         logger.info("请求地址为:" + tokenUrl + params);         String tokenResponse = HttpUtils.sendGet(tokenUrl, params);         JSON parse = JSONUtil.parseObj(tokenResponse);         System.out.println(parse);         return parse;     }       @ApiOperation("发送消息")     @PostMapping("/testPushMessage")     public String pushMessage(@RequestBody PushMessageToUserVo pushMessageToUserVo) {         // 组装要发送的数据         JSONObject body = new JSONObject();         // 要推给谁         body.put("touser", pushMessageToUserVo.getTouser());         // 模板ID         body.put("template_id", "这里填写自己的模板id");          String accessToken = pushMessageToUserVo.getAccessToken();          // 创建消息和内容,这里可以自己定义,对应好模板就行         JSONObject data = new JSONObject();         data.put("name", new JSONObject().put("value", "做一个身体和心灵都勇敢的人,趁着身体未老,心灵还透明。晚安!"));         data.put("weather", new JSONObject().put("value", "阴天  19°c"));         data.put("birthday", new JSONObject().put("value", "53   天"));         body.put("data", data);          logger.info("body---->{}", body.toString());          String post = HttpUtil.post("https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + accessToken, body.toString());         logger.info("通知到用户--->{}", post);         return body.toString();     } }  

其他代码

config

这里使用 knife4j,等下好测试接口

@Configuration @EnableSwagger2 public class SwaggerConfiguration {      @Bean(value = "defaultApi2")     public Docket defaultApi2() {         return new Docket(DocumentationType.SWAGGER_2)                 .apiInfo(new ApiInfoBuilder()                         //.title("swagger-bootstrap-ui-demo RESTful APIs")                         .description("# swagger-bootstrap-ui-demo RESTful APIs")                         .termsOfServiceUrl("http://www.xx.com/")                         .contact("xx@qq.com")                         .version("1.0")                         .build())                 //分组名称                 .groupName("2.X版本")                 .select()                 //这里指定Controller扫描包路径,自行记得修改!!!!                 .apis(RequestHandlerSelectors.basePackage("com.example.springbootwechat.controller"))                 .paths(PathSelectors.any())                 .build();     } } 

entity

这个是推送消息vo,给那个用户推送消息,并带上token

@Data @ApiModel(description = "用户推送vo") public class PushMessageToUserVo {      @ApiModelProperty(value = "用户微信关注号", required = true)     private String touser;      @ApiModelProperty(value = "用户Token", required = true)     private String accessToken;  } 

enum

我这里是把地址都变成枚举,因为后面地址会比较多,便于维护,当然也可以配置在yaml ,或者定义在使用处。

public enum WeChatUrlEnum {      /**      * 获取token      */     TOKEN("获取微信 token的地址","https://api.weixin.qq.com/cgi-bin/token");      private String info;     private String url;      WeChatUrlEnum(String info,String url) {         this.info =info;         this.url = url;     }      public String getInfo() {         return info;     }      public void setInfo(String info) {         this.info = info;     }      public String getUrl() {         return url;     }      public void setUrl(String url) {         this.url = url;     } }  

utils

工具类:发送http get,post 请求

public class HttpUtils {     public static String sendGet(String url, String query) throws Exception {        String fullUrl = url + "?" + query;        HttpURLConnection connection = (HttpURLConnection) new URL(fullUrl).openConnection();        connection.setRequestMethod("GET");        connection.setRequestProperty("Accept", "application/json");         if (connection.getResponseCode()!= 200) {            throw new RuntimeException("Failed : HTTP error code : " + connection.getResponseCode());        }         BufferedReader br = new BufferedReader(new InputStreamReader((connection.getInputStream())));         StringBuilder sb = new StringBuilder();        String output;        while ((output = br.readLine())!= null) {            sb.append(output);        }        connection.disconnect();        return sb.toString();    }      public static String sendPost(String url, String data) throws Exception {        URL fullUrl = new URL(url);        HttpURLConnection connection = (HttpURLConnection) fullUrl.openConnection();        connection.setRequestMethod("POST");        connection.setRequestProperty("Content-Type", "application/json");        connection.setRequestProperty("Accept", "application/json");         connection.setDoOutput(true);        DataOutputStream wr = new DataOutputStream(connection.getOutputStream());        wr.writeBytes(data);        wr.flush();        wr.close();         if (connection.getResponseCode()!= 200) {            throw new RuntimeException("Failed : HTTP error code : " + connection.getResponseCode());        }         BufferedReader br = new BufferedReader(new InputStreamReader((connection.getInputStream())));         StringBuilder sb = new StringBuilder();        String output;        while ((output = br.readLine())!= null) {            sb.append(output);        }         connection.disconnect();         return sb.toString();    } }  

测试

接口swagger地址:http://127.0.0.1:1955/doc.html 自己注意端口

1,获取token

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

2,发送消息

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

手机端:接收到的消息

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

谢谢看到这!!!有不对地方,可以留言评论讨论哦!!!

希望可以动动小手,点个关注!!!

发表评论

评论已关闭。

相关文章