欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

教你用java完美封裝微信模板消息的發(fā)送動(dòng)態(tài)

 更新時(shí)間:2021年04月15日 09:44:49   作者:languageStudent  
這篇文章主要介紹了教你用java完美封裝微信模板消息的發(fā)送動(dòng)態(tài),文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有很好的幫助,需要的朋友可以參考下

導(dǎo)入maven依賴

<dependency>
            <groupId>org.dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>2.1.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/jaxen/jaxen -->
        <dependency>
            <groupId>jaxen</groupId>
            <artifactId>jaxen</artifactId>
            <version>1.2.0</version>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.thoughtworks.xstream/xstream -->
        <dependency>
            <groupId>com.thoughtworks.xstream</groupId>
            <artifactId>xstream</artifactId>
            <version>1.4.15</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.75</version>
        </dependency>

通過(guò)查看微信模板消息文檔發(fā)現(xiàn)

發(fā)送模板消息需要的json數(shù)據(jù)

{
           "touser":"OPENID",
           "template_id":"ngqIpbwh8bUfcSsECmogfXcV14J0tQlEpBO27izEYtY",
           "url":"http://weixin.qq.com/download",  
           "miniprogram":{
             "appid":"xiaochengxuappid12345",
             "pagepath":"index?foo=bar"
           },          
           "data":{
                   "first": {
                       "value":"恭喜你購(gòu)買成功!",
                       "color":"#173177"
                   },
                   "keyword1":{
                       "value":"巧克力",
                       "color":"#173177"
                   },
                   "keyword2": {
                       "value":"39.8元",
                       "color":"#173177"
                   },
                   "keyword3": {
                       "value":"2014年9月22日",
                       "color":"#173177"
                   },
                   "remark":{
                       "value":"歡迎再次購(gòu)買!",
                       "color":"#173177"
                   }
           }
       }

模板實(shí)例

在這里插入圖片描述

包含多種數(shù)據(jù)類型,并且以json數(shù)據(jù)格式請(qǐng)求接口便可以發(fā)送模板消息,發(fā)送成功效果。

在這里插入圖片描述

我們看到first中的value對(duì)應(yīng)的第一部分需要填充{{first.DATA}}占位符的數(shù)據(jù),color對(duì)應(yīng)字體的顏色keyword可能包含一個(gè)或者多個(gè),所以我們需要?jiǎng)討B(tài)創(chuàng)建,根據(jù)模板中的消息提供。remark填充最后一條數(shù)據(jù)

我們先創(chuàng)建六個(gè)實(shí)體類,對(duì)應(yīng)模板消息用到的數(shù)據(jù)類型。

實(shí)體類代碼

Remark

存儲(chǔ)remark中的數(shù)據(jù)與顏色

package cn.xjt.wx.MessageEntity;


import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;


@Data
@AllArgsConstructor
@NoArgsConstructor
public class Remark {

    private String value;
    private String color;
}

Miniprogram //小程序相關(guān)數(shù)據(jù),無(wú)小程序可以不填,或者填充空串

package cn.xjt.wx.MessageEntity;


import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Miniprogram {

    private String appid;
    private String pagepath;

}

Keyword,中間keyword部分

package cn.xjt.wx.MessageEntity;


import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;


@Data
@AllArgsConstructor
@NoArgsConstructor
public class Keyword {

    private String value;
    private String color;
}

First 首個(gè)數(shù)據(jù)

package cn.xjt.wx.MessageEntity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;

/**
 * @author xu
 * @Description
 * @createTime 2021年04月02日 17:02:00
 */

@Data
@AllArgsConstructor
@NoArgsConstructor
public class First {

    private String value;
    private String color;

}

data 包含first、keyword、remark

由于keyword不固定,所以我在實(shí)體類創(chuàng)建多個(gè)提供使用,根據(jù)需要,構(gòu)造需要個(gè)數(shù)

package cn.xjt.wx.MessageEntity;

import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;

import java.util.List;

@lombok.Data
@AllArgsConstructor
@NoArgsConstructor
public class data {

    private First first;

    private Keyword keyword1;
    private Keyword keyword2;
    private Keyword keyword3;
    private Keyword keyword4;
    private Keyword keyword5;
    private Remark remark;


    public data(First first,Remark remark,Keyword ... keyword){
        this.first=first;
        int count=1;
        for (Keyword keyword1 : keyword) {
            if (count==1){
                this.keyword1=keyword1;
            }else if (count==2){
                this.keyword2=keyword1;
            }else if (count==3){
                this.keyword3=keyword1;
            }else if (count==4){
                this.keyword4=keyword1;
            }else if (count==5){
                this.keyword5=keyword1;
            }
            count++;
        }
        this.remark=remark;
    }

}

JsonRootBean ,整合實(shí)體類所有數(shù)據(jù)

package cn.xjt.wx.MessageEntity;

import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import lombok.Data;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class JsonRootBean {

    private String touser;
    private String template_id;
    private String url;
    private Miniprogram miniprogram;
    private data data;

}

實(shí)體類創(chuàng)建完成,所以當(dāng)我們需要發(fā)送模板消息的時(shí)候,我們只需要一個(gè)JsonRootBean對(duì)象,就可以完成發(fā)送。

由于我在data實(shí)體類中的keyword只有五個(gè),所以適用的模板消息中keyword最多只能有5個(gè),跟一根據(jù)需要,酌情添加

發(fā)送模板消息用到的工具類

發(fā)送消息工具類

private static String grantType="client_credential";  

private static String appid="你的微信公眾號(hào)appid";

private static String secret="你的開(kāi)發(fā)者密碼appsercet";

 public static Map<String,String> sendMessage2(String AccessToken, JsonRootBean jsonRootBean){
        JSONObject json = (JSONObject) JSON.parseObject(JSON.toJSONString(jsonRootBean));       //把JsonRootBean轉(zhuǎn)成JSONObject對(duì)象
        String info = HttpUtil.sendPostJson(json, "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" + AccessToken);
        Map<String,String> map = (Map) JSON.parse(info);
        System.out.println(map);
        return map;
    }

(攜帶json格式數(shù)據(jù)發(fā)送post請(qǐng)求工具類),請(qǐng)前往我的另一篇HttpUtil工具類獲取

HttpUtil發(fā)送post攜帶Json數(shù)據(jù)工具類傳送門

獲取access_token (注意access_token有效期為兩小時(shí),過(guò)期后需重新獲取)

public static Map<String,String> getAccessToken(){
        String s = HttpUtil.sendGet("https://api.weixin.qq.com/cgi-bin/token?grant_type=" + grantType + "&appid=" + appid + "&secret=" + secret);
        Map<String,String> map = (Map) JSON.parse(s);
        System.out.println(map);
        return map;
    }

發(fā)送模板案例

Miniprogram miniprogram = new Miniprogram("", "");
		First first = new First("你在虛擬仿真系統(tǒng)有一筆消息待處理", "");
		Keyword[] keywords = new Keyword[5];
		Keyword keyword1 = new Keyword("測(cè)試名稱", "#173177");
		Keyword keyword2 = new Keyword("考試評(píng)價(jià)", "#173177");
		Keyword keyword3 = new Keyword(LocalDateTime.now().toString(), "#173177");
		Keyword keyword4 = new Keyword("考試成績(jī)?cè)u(píng)分", "#173177");

		keywords[0] = keyword1;
		keywords[1] = keyword2;
		keywords[2] = keyword3;
		keywords[3] = keyword4;
		
		Remark remark = new Remark("請(qǐng)及時(shí)前往處理", "");
//		data data = new data(first, remark, keyword1, keyword2, keyword3, keyword4);
		data data = new data(first, remark, keywords);
		JsonRootBean jsonRootBean = new JsonRootBean("發(fā)個(gè)用戶的openid", "你在微信公眾號(hào)綁定的模板消息id", "單擊模板會(huì)跳轉(zhuǎn)的鏈接(https://www.baidu.com/實(shí)例)", miniprogram, data);
		WeiXinUtil.sendMessage2(WeiXinUtil.getAccessToken().get("access_token"), jsonRootBean);

效果

在這里插入圖片描述

發(fā)送成功了?。?/p>

通過(guò)前端發(fā)送接受一個(gè)map數(shù)據(jù)類型的參數(shù),發(fā)送模板消息,方法體👇👇

/**
     * 動(dòng)態(tài)接受參數(shù)發(fā)送消息
     * @param param
     */
    public static Map<String,String> sendMessagetop(Map<String,Object> param){
        Map<String,String> res = new HashMap<>();
        String accessToken = WeiXinUtil.getAccessToken();		//通過(guò)工具類方法獲取accesstoken
        Miniprogram miniprogram=null;
        String firstColor=null;
        String remarkColor=null;
        if (param.get("appid")!=null && param.get("pagepath")!=null){
            miniprogram = new Miniprogram(param.get("appid").toString(), param.get("pagepath").toString());		//如果appid和pagepath都不為空,才進(jìn)行初始化
        }
        String firstValue = param.get("firstValue").toString();		//獲取firstvalue
        if (param.get("firstColor")!=null){
            firstColor = param.get("firstColor").toString();		//如果顏色不為空,則獲取
        }
        First first = new First(firstValue, firstColor);
        Integer keywordCount = Integer.valueOf(param.get("keywordCount").toString());		//得到有幾個(gè)keyword
        Keyword[] keywords = new Keyword[5];
        for (int i=0;i<keywordCount;i++){		//動(dòng)態(tài)創(chuàng)建kewword
            Map kw = (Map) param.get(i+"");
            String color = null;
            if (kw.get("color")!=null){				//得到key對(duì)象里面的value與color
                color=kw.get("color").toString();		//如果color不為空,則獲取
            }
            keywords[i]=new Keyword(kw.get("value").toString(), color);
        }
        String remarkValue = param.get("remarkValue").toString();
        if (param.get("remarkColor")!=null){
            remarkColor = param.get("remarkColor").toString();
        }
        Remark remark = new Remark(remarkValue, remarkColor);
        data data = new data(first, remark, keywords);		
        Map<String, Object> allOpenId = WeiXinUtil.getAllOpenId();		//獲取關(guān)注公眾號(hào)的所有openid
        Map datas = (Map) allOpenId.get("data");
        List<String> openid = (List) datas.get("openid");//得到openid數(shù)組
        for (String o : openid) {		//遍歷依次發(fā)送模板消息
            System.out.println(o);
            JsonRootBean jsonRootBean = new JsonRootBean(o, TEMPLATE_ID, URL, miniprogram, data);
            Map<String, String> result = WeiXinUtil.sendMessage2(accessToken, jsonRootBean);
            res.put("errmsg", result.get("errmsg"));
        }
        return res;
    }

以上是給所有關(guān)注了該公眾號(hào)的用戶都發(fā)送消息

到此這篇關(guān)于教你用java完美封裝微信模板消息的發(fā)送動(dòng)態(tài)的文章就介紹到這了,更多相關(guān)java封裝微信消息的發(fā)送內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java  解決死鎖的方法實(shí)例詳解

    Java 解決死鎖的方法實(shí)例詳解

    這篇文章主要介紹了java 多線程死鎖詳解及簡(jiǎn)單實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • 手把手寫Spring框架

    手把手寫Spring框架

    Spring是于2003 年興起的一個(gè)輕量級(jí)的Java 開(kāi)發(fā)框架,由Rod Johnson創(chuàng)建。簡(jiǎn)單來(lái)說(shuō),Spring是一個(gè)分層的JavaSE/EE full-stack(一站式) 輕量級(jí)開(kāi)源框架
    2021-08-08
  • SpringBoot集成Flink-CDC實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)的監(jiān)聽(tīng)問(wèn)題

    SpringBoot集成Flink-CDC實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)的監(jiān)聽(tīng)問(wèn)題

    Flink CDC(Flink Change Data Capture)是一種基于數(shù)據(jù)庫(kù)日志的CDC技術(shù),它實(shí)現(xiàn)了一個(gè)全增量一體化的數(shù)據(jù)集成框架,這篇文章主要介紹了SpringBoot集成Flink-CDC,實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)數(shù)據(jù)的監(jiān)聽(tīng),需要的朋友可以參考下
    2024-07-07
  • httpclient提交json參數(shù)的示例詳解

    httpclient提交json參數(shù)的示例詳解

    httpclient使用post提交json參數(shù),和使用表單提交區(qū)分,本文結(jié)合示例代碼講解的非常詳細(xì),補(bǔ)充介紹了HttpClient請(qǐng)求傳json參數(shù)的案例代碼,感興趣的朋友一起看看吧
    2024-02-02
  • MyBatis Plus 實(shí)現(xiàn)多表分頁(yè)查詢功能的示例代碼

    MyBatis Plus 實(shí)現(xiàn)多表分頁(yè)查詢功能的示例代碼

    這篇文章主要介紹了MyBatis Plus 實(shí)現(xiàn)多表分頁(yè)查詢功能,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • 聊聊@RequestBody和Json之間的關(guān)系

    聊聊@RequestBody和Json之間的關(guān)系

    這篇文章主要介紹了@RequestBody和Json之間的關(guān)系,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • SpringBoot深入刨析數(shù)據(jù)層技術(shù)

    SpringBoot深入刨析數(shù)據(jù)層技術(shù)

    這篇文章主要介紹了SpringBoot數(shù)據(jù)層技術(shù)的解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Redis框架Jedis及Redisson對(duì)比解析

    Redis框架Jedis及Redisson對(duì)比解析

    這篇文章主要介紹了Redis框架Jedis及Redisson對(duì)比解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • 為什么Java要把字符串設(shè)計(jì)成不可變的

    為什么Java要把字符串設(shè)計(jì)成不可變的

    為什么Java要把字符串設(shè)計(jì)成不可變的,這篇文章給出了Java字符串設(shè)計(jì)成不可變的原因,感興趣的小伙伴們可以參考一下
    2017-06-06
  • 在Java中讀取CSV文件的方式

    在Java中讀取CSV文件的方式

    在項(xiàng)目開(kāi)發(fā)中我們經(jīng)常需要讀取csv的內(nèi)容的操作,讀取的邏輯并不復(fù)雜,下面這篇文章主要給大家介紹了關(guān)于在Java中讀取CSV文件的方式,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06

最新評(píng)論