最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java實現(xiàn)微信公眾號消息推送的方法詳解

 更新時間:2023年10月07日 14:35:26   作者:古渡藍按  
這篇文章主要為大家詳細介紹了如何利用java實現(xiàn)微信公眾號消息推送的功能,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下

一、注冊公眾號

1,官網(wǎng)地址:申請測試公眾號

地址: 微信公眾平臺 (qq.com)

文檔地址:微信開放文檔 (qq.com)

2,注冊后可以查看自己的appId 和 appsecret

3,創(chuàng)建模板

請注意:

1、測試模板的模板ID僅用于測試,不能用來給正式帳號發(fā)送模板消息

2、為方便測試,測試模板可任意指定內(nèi)容,但實際上正式帳號的模板消息,只能從模板庫中獲得

3、需為正式帳號申請新增符合要求的模板,需使用正式號登錄公眾平臺,按指引申請

4、模板內(nèi)容可設(shè)置參數(shù)(模板標題不可),供接口調(diào)用時使用,參數(shù)需以{{開頭,以.DATA}}結(jié)尾

我創(chuàng)建的模板

早安!:{{name.DATA}} 
天氣:{{weather.DATA}} 
距離破殼日:{{birthday.DATA}}

二、代碼部分

? 發(fā)送消息和推送消息都是需要 token 的,所以第一步就可以獲取token,再拿獲取的token 進行發(fā)送消息,每天獲取token的是有次數(shù)限制的(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,需要修改成上面自己創(chuàng)建的模板id)

@Api(tags = "各項測試")
@RestController
@RequestMapping("/loginInfo")
public class SendWeChatMessageController {
//    /*
//     * 功能: 公眾號:appid,這里也可以配置到y(tǒng)aml 文件里面
//     */
//
//    @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("發(fā)送消息")
    @PostMapping("/testPushMessage")
    public String pushMessage(@RequestBody PushMessageToUserVo pushMessageToUserVo) {
        // 組裝要發(fā)送的數(shù)據(jù)
        JSONObject body = new JSONObject();
        // 要推給誰
        body.put("touser", pushMessageToUserVo.getTouser());
        // 模板ID
        body.put("template_id", "這里填寫自己的模板id");
        String accessToken = pushMessageToUserVo.getAccessToken();
        // 創(chuàng)建消息和內(nèi)容,這里可以自己定義,對應(yīng)好模板就行
        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 = "用戶微信關(guān)注號", 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

工具類:發(fā)送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

2,發(fā)送消息

手機端:接收到的消息

到此這篇關(guān)于java實現(xiàn)微信公眾號消息推送的方法詳解的文章就介紹到這了,更多相關(guān)java微信公眾號推送內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot項目中使用@Scheduled讀取動態(tài)參數(shù)

    SpringBoot項目中使用@Scheduled讀取動態(tài)參數(shù)

    這篇文章主要介紹了SpringBoot項目中使用@Scheduled讀取動態(tài)參數(shù),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 解決spring-integration-mqtt頻繁報Lost connection錯誤問題

    解決spring-integration-mqtt頻繁報Lost connection錯誤問題

    這篇文章主要介紹了解決spring-integration-mqtt頻繁報Lost connection錯誤問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Java中線程上下文類加載器超詳細講解使用

    Java中線程上下文類加載器超詳細講解使用

    這篇文章主要介紹了Java中線程上下文類加載器,類加載器負責讀取Java字節(jié)代碼,并轉(zhuǎn)換成java.lang.Class類的一個實例的代碼模塊。本文主要和大家聊聊JVM類加載器ClassLoader的使用,需要的可以了解一下
    2022-12-12
  • GraphQL入門總體創(chuàng)建教程

    GraphQL入門總體創(chuàng)建教程

    這篇文章主要為大家介紹了GraphQL入門總體創(chuàng)建教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • Springboot引入多個yml方法(多種方案)

    Springboot引入多個yml方法(多種方案)

    SpringBoot默認加載的是application.yml文件,所以想要引入其他配置的yml文件,就要在application.yml中激活該文件這篇文章主要介紹了Springboot引入多個yml方法,需要的朋友可以參考下
    2019-10-10
  • 使用?Spring?AI?+?Ollama?構(gòu)建生成式?AI?應(yīng)用的方法

    使用?Spring?AI?+?Ollama?構(gòu)建生成式?AI?應(yīng)用的方法

    通過集成SpringBoot和Ollama,本文詳細介紹了如何構(gòu)建生成式AI應(yīng)用,首先,介紹了AI大模型服務(wù)的兩種實現(xiàn)方式,選擇使用ollama進行部署,隨后,通過SpringBoot+SpringAI來實現(xiàn)應(yīng)用構(gòu)建,本文為開發(fā)者提供了一個實用的指南,幫助他們快速入門生成式AI應(yīng)用的開發(fā)
    2024-11-11
  • Springboot?集成spring?cache緩存的解決方案

    Springboot?集成spring?cache緩存的解決方案

    這篇文章主要介紹了Springboot?集成spring?cache緩存,使用緩存最關(guān)鍵的一點就是保證緩存與數(shù)據(jù)庫的數(shù)據(jù)一致性,本文給大家介紹最常用的緩存操作模式,對Springboot?集成spring?cache緩存操作流程感興趣的朋友一起看看吧
    2022-06-06
  • java向上轉(zhuǎn)型發(fā)生的時機知識點詳解

    java向上轉(zhuǎn)型發(fā)生的時機知識點詳解

    在本篇文章里小編給大家整理分享的是關(guān)于java向上轉(zhuǎn)型發(fā)生的時機知識點內(nèi)容,有興趣的讀者們可以參考下。
    2021-05-05
  • 提交gRPC-spring-boot-starter項目bug修復的pr說明

    提交gRPC-spring-boot-starter項目bug修復的pr說明

    這篇文章主要介紹了這篇文章主要為大家介紹了gRPC-spring-boot-starter項目提交bug修復的pr的原因說明,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2022-02-02
  • Java線程死鎖代碼詳解

    Java線程死鎖代碼詳解

    本篇文章主要介紹了Java線程死鎖代碼詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2021-11-11

最新評論

平和县| 酒泉市| 金昌市| 威远县| 清远市| 安多县| 织金县| 甘谷县| 辉县市| 达孜县| 福安市| 原阳县| 惠东县| 长顺县| 祁东县| 宜章县| 望谟县| 休宁县| 五常市| 寻甸| 香港| 田林县| 岳普湖县| 博兴县| 广德县| 临泉县| 台前县| 梓潼县| 罗田县| 遂宁市| 泗水县| 梅州市| 辽阳县| 青田县| 雅安市| 天台县| 石首市| 从江县| 仁寿县| 册亨县| 应城市|