激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - java實現 微信公眾號推送消息 ,cv 就可運行?。?!

java實現 微信公眾號推送消息 ,cv 就可運行?。?!

2023-10-08 05:31未知服務器之家 Java教程

一,注冊公眾號 1,官網地址:申請測試公眾號 地址: 微信公眾平臺 (qq.com) 文檔地址:微信開放文檔 (qq.com) 2,注冊后可以查看自己的appId 和 appsecret 3,創建模板 請注意: 1、測試模板的模板ID僅用于測試,不能用來給正式帳號發

一,注冊公眾號

1,官網地址:申請測試公眾號

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

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

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

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("[email protected]")
                        .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 就可運行?。。? src=

2,發送消息

java實現 微信公眾號推送消息 ,cv 就可運行?。。? src=

手機端:接收到的消息

java實現 微信公眾號推送消息 ,cv 就可運行!??!

謝謝看到這?。。∮胁粚Φ胤?,可以留言評論討論哦?。?!

希望可以動動小手,點個關注?。。?/mark>

java實現 微信公眾號推送消息 ,cv 就可運行?。。? src=

延伸 · 閱讀

精彩推薦
  • Java教程基于UDP協議實現聊天系統

    基于UDP協議實現聊天系統

    這篇文章主要為大家詳細介紹了基于UDP協議實現聊天系統,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    CosperNXL12002021-09-10
  • Java教程Spring Boot 與 Kotlin 上傳文件的示例代碼

    Spring Boot 與 Kotlin 上傳文件的示例代碼

    這篇文章主要介紹了Spring Boot 與 Kotlin 上傳文件的示例代碼,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧...

    quanke10762021-03-25
  • Java教程Java實現的簡單網頁截屏功能示例

    Java實現的簡單網頁截屏功能示例

    這篇文章主要介紹了Java實現的簡單網頁截屏功能,涉及java網頁打開及屏幕截圖功能相關操作技巧,需要的朋友可以參考下...

    xxiaowen8452021-03-03
  • Java教程java開發環境的完整搭建過程

    java開發環境的完整搭建過程

    這篇文章主要給大家介紹了關于java開發環境的完整搭建過程,文中介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨...

    Rosalh11182021-08-08
  • Java教程Java延遲隊列原理與用法實例詳解

    Java延遲隊列原理與用法實例詳解

    這篇文章主要介紹了Java延遲隊列原理與用法,結合實例形式詳細分析了延遲隊列的概念、原理、功能及具體使用方法,需要的朋友可以參考下...

    QH_JAVA8122021-05-29
  • Java教程java實現文件變化監控的方法(推薦)

    java實現文件變化監控的方法(推薦)

    下面小編就為大家帶來一篇java實現文件變化監控的方法(推薦)。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧 ...

    jingxian2592020-06-05
  • Java教程Java對象創建內存案例解析

    Java對象創建內存案例解析

    這篇文章主要介紹了Java對象創建內存案例解析,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下...

    小炭在努力12342021-11-03
  • Java教程集群環境中使用ehcache_動力節點Java學院整理

    集群環境中使用ehcache_動力節點Java學院整理

    這篇文章主要為大家詳細介紹了集群環境中使用ehcache的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    劉炳成2762020-12-09
主站蜘蛛池模板: 国产激情视频在线 | 国产手机国产手机在线 | 99精品视频在线免费观看 | 日本欧美一区二区三区在线播 | 亚洲一区二区中文字幕在线观看 | 午夜国产精品成人 | 欧美亚洲国产一区二区三区 | a级黄色片视频 | 国产精品亚洲综合 | 精品免费国产一区二区三区 | 26uuu成人人网图片 | 成人午夜免费av | 久久av免费 | 成人爱爱电影 | 一级毛片真人免费播放视频 | 国产一级中文字幕 | 中文字幕在线观看亚洲 | 黄色视屏免费在线观看 | 欧美xxxwww| 久久精品亚洲一区二区三区观看模式 | 特色一级黄色片 | 国产高潮好爽受不了了夜色 | 国产精品一区二区三区在线 | 一级做a爰片性色毛片2021 | 久久草在线视频 | 久久经典国产视频 | 国产精品视频自拍 | 精品国产一区二区三区免费 | 青青草国产在线视频 | 国产欧美在线观看不卡一 | 国内毛片视频 | chinesexxxx刘婷hd 国产资源视频在线观看 | 亚洲小视频在线观看,com | 久久久经典视频 | 狠狠操电影 | 成人精品一区二区 | 娇妻被各种姿势c到高潮小说 | 九九热在线视频免费观看 | 久久艹综合| 久久综合一区二区 | 黄色片网站免费观看 |