1. 程式人生 > >java微信模板訊息傳送功能。activeMq監聽訊息,返回模板併發送

java微信模板訊息傳送功能。activeMq監聽訊息,返回模板併發送

傳送模板訊息介面:

http請求方式: POST
https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN

獲取accessToken的介面:

https請求方式: GET
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

傳送模板訊息的引數說明:

 結果圖:

 ####################################### 程式碼部分 ############################################

1.首先建立相關實體類:存放AccessToken的類

public class AccessToken {

    /**
     * 獲取到的憑證
     */
    private String access_token;

    /**
     * 憑證有效時間,單位:秒
     */
    private int expires_in;

    public String getAccess_token() {
        return access_token;
    }

    public void setAccess_token(String access_token) {
        this.access_token = access_token;
    }

    public int getExpires_in() {
        return expires_in;
    }

    public void setExpires_in(int expires_in) {
        this.expires_in = expires_in;
    }
}

微信模板類:

/**
 * Created by yxz on 2018/7/12.
 *
 * 微信模板類
 */
public class WeChatTemplate {

    /**
     * 模板id
     */
    private String template_id;

    /**
     * 接收者 openId
     */
    private String touser;

    /**
     * 模板跳轉連結
     */
    private String url;

    /**
     * data的資料
     */
    private TreeMap<String, TreeMap<String, String>> data;

    /**
     * data 裡的資料
     * @param value :模板引數
     * @param color :顏色 可選
     * @return
     */
    public static TreeMap<String, String> item(String value, String color) {
        TreeMap<String, String> params = new TreeMap<String, String>();
        params.put("value", value);
        params.put("color", color);
        return params;
    }

}

2.提供方法的service類:

/**
 * Created by yxz on 2018/7/12.
 *
 * 微信模板訊息
 */
@Component
public class WeChatTemplateService {

    @Autowired
    RestTemplate restTemplate;

    private static Logger logger = LoggerFactory.getLogger(WeChatTemplateService.class);

    /**
     * 獲取access_token的介面地址
     */
    public final static String access_token_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";

    /**傳送模板訊息*/
    public static final String SEND_TEMPLATE_MESSAGE = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN";

    /**
     * 通過APPID 和 APPSECRET
     * 獲取assess_token
     * @return
     */
    public AccessToken getAccessToken(String appid, String appsecret) {
        AccessToken accessToken = null;
        String requestUrl = access_token_url.replace("APPID", appid).replace("APPSECRET", appsecret);
        JSONObject jsonObject = restTemplate.getForObject(requestUrl,JSONObject.class);
        // 如果請求成功
        if (null != jsonObject) {
            try {
                accessToken = new AccessToken();
                accessToken.setAccess_token(jsonObject.getString("access_token"));
                accessToken.setExpires_in(jsonObject.getInt("expires_in"));
            } catch (JSONException e) {
                accessToken = null;
                // 獲取token失敗
                logger.error("獲取token失敗 errcode:{} errmsg:{}", jsonObject.getInt("errcode"), jsonObject.getString("errmsg"));
            }
        }
        return accessToken;
    }

    /**
     * 傳送模板訊息
     * @param accessToken
     * @param data
     * @return
     */
    public void sendTemplateMsg(String accessToken, WeChatTemplate data){
        String jsonString =new Gson().toJson(data.toString());
        String requestUrl =SEND_TEMPLATE_MESSAGE.replace("ACCESS_TOKEN",accessToken);
        JSONObject jsonObject = restTemplate.postForObject(requestUrl,jsonString,JSONObject.class);
        logger.error("jsonObject值:"+jsonObject);
        if (null != jsonObject) {
            int errorCode = jsonObject.getInt("errcode");
            if (0 == errorCode) {
                logger.info("模板訊息傳送成功");
            } else {
                String errorMsg = jsonObject.getString("errmsg");
                logger.info("模板訊息傳送失敗,錯誤是 "+errorCode+",錯誤資訊是"+ errorMsg);
            }
        }
    }

}

3.消費者類:(監聽activeMq的訊息,呼叫傳送模板的方法,傳送)

/**
 *
 * @author yxz
 * @date 2018/7/13
 */
@Component
public class WxTemplateConsumer {

    Logger logger = LoggerFactory.getLogger(WxTemplateConsumer.class);

    @Autowired
    WeChatTemplateService weChatTemplateService;

    @Value("${weixin.appid}")
    public String appId;  //spring讀取配置檔案

    @Value("${weixin.appsecret}")
    public String appsecret;

    /**
     * 內網傳送模板
     *
     * @param data
     * @param data
    */
    @JmsListener(destination = "WxMsg", containerFactory = "outConnectionFactory")
    public void sendWxTemplate(String data) {
        sendWxMsg(data);
    }

    private void sendWxMsg(String data) {
        AccessToken access = weChatTemplateService.getAccessToken(appId,appsecret);
        logger.error("accessToken:" + access.getAccess_token(),"data:" + data);
        JSONObject jsonObject = (JSONObject) JSONObject.parse(data);
        //獲取openid
        String touser = null;
        if (jsonObject.containsKey("touser")){
            touser= jsonObject.get("touser").toString();
        }else {
            logger.error("touser鍵為空");
        }
        //獲取template_id
        String templateId= null;
        if (jsonObject.containsKey("template_id")){
            templateId = jsonObject.get("template_id").toString();
        }else {
            logger.error("template_id鍵為空");
        }
        //獲取模板跳轉url
        String url =null;
        if (jsonObject.containsKey("url")){
            url =jsonObject.get("url").toString();
        }
        //獲取data
        String params =null;
        if (jsonObject.containsKey("data")){
            params =jsonObject.get("data").toString();
        }else {
            logger.error("data鍵為空");
        }
        JSONObject jsonObjectData =null;
        String firstValue =null;
        JSONObject jsonObjectValue1 = null;
        String value2 =null;
        String keyword1Value =null;
        String value3 =null;
        String value4 =null;
        String keyword2Value =null;
        String remarkValue =null;
        String firstColor =null;
        String keyword1Color =null;
        String keyword2Color =null;
        String remarkColor =null;
        if (params != null){
            jsonObjectData = (JSONObject) JSONObject.parse(params);
            if (jsonObjectData != null){
                //獲取first值
                String value1 = null;
                if (jsonObjectData.containsKey("first")){   //判斷是否有鍵,否則會報異常
                    value1=jsonObjectData.get("first").toString();
                    if (value1 != null){
                        JSONObject jsonObjectValue = (JSONObject) JSONObject.parse(value1);
                        if (jsonObjectValue.containsKey("value")){
                            firstValue = jsonObjectValue.get("value").toString();
                        }else {
                            logger.error("first缺少value鍵");
                        }
                        if (jsonObjectValue.containsKey("color")){
                            firstColor = jsonObjectValue.get("color").toString();
                        }else {
                            logger.error("first缺少color鍵");
                        }
                    }
                }else {
                    logger.error("first鍵為空");
                }
                //獲取keyword1值
                if (jsonObjectData.containsKey("keyword1")){
                    value2 = jsonObjectData.get("keyword1").toString();
                    if (value2 != null){
                        jsonObjectValue1 = (JSONObject) JSONObject.parse(value2);
                        if (jsonObjectValue1.containsKey("value")){
                            keyword1Value = jsonObjectValue1.get("value").toString();
                        }else {
                            logger.error("keyword1缺少value鍵");
                        }
                        if (jsonObjectValue1.containsKey("color")){
                            keyword1Color = jsonObjectValue1.get("color").toString();
                        }else {
                            logger.error("keyword1缺少color鍵");
                        }
                    }
                }else {
                    logger.error("keyword1鍵為空");
                }
                //獲取keyword2值
                if (jsonObjectData.containsKey("keyword2")){
                    value3 = jsonObjectData.get("keyword2").toString();
                    if (value3 != null){
                        JSONObject jsonObjectValue2 = (JSONObject) JSONObject.parse(value3);
                        if (jsonObjectValue2.containsKey("value")){
                            keyword2Value = jsonObjectValue2.get("value").toString();
                        }else {
                            logger.error("keyword2缺少value鍵");
                        }
                        if (jsonObjectValue2.containsKey("color")) {
                            keyword2Color = jsonObjectValue2.get("color").toString();
                        }else {
                            logger.error("keyword2缺少color鍵");
                        }
                    }
                }else {
                    logger.error("keyword2鍵為空");
                }
                //獲取remark值
                if (jsonObjectData.containsKey("remark")){
                    value4 = jsonObjectData.get("remark").toString();
                    if (value4 != null){
                        JSONObject jsonObjectValue3 = (JSONObject) JSONObject.parse(value4);
                        if (jsonObjectValue3.containsKey("value")) {
                            remarkValue = jsonObjectValue3.get("value").toString();
                        } else {
                            logger.error("remark缺少value鍵");
                        }
                        if (jsonObjectValue3.containsKey("color")) {
                            remarkColor = jsonObjectValue3.get("color").toString();
                        }else {
                            logger.error("remark缺少color鍵");
                        }
                    }
                }else {
                    logger.error("remark鍵為空");
                }
            }
        }else {
            logger.error("引數data為null");
        }

        TreeMap<String ,TreeMap<String ,String>> allData =new TreeMap<>();
        allData.put("first",WeChatTemplate.item(firstValue,firstColor));
        allData.put("keyword1",WeChatTemplate.item(keyword1Value,keyword1Color));
        allData.put("keyword2",WeChatTemplate.item(keyword2Value,keyword2Color));
        allData.put("remark",WeChatTemplate.item(remarkValue,remarkColor));
        WeChatTemplate template =new WeChatTemplate();
        if (touser != null){
            template.setTouser(touser);
        }else{
            logger.error("openId為null");
        }
        if (templateId != null){
            template.setTemplate_id(templateId);
        }else{
            logger.error("template_id為null");
        }
        template.setUrl(url);
        template.setData(allData);
        weChatTemplateService.sendTemplateMsg(access.getAccess_token(),template);
    }

}

關於ActiveMq:下載ActiveMq,解壓到本地,啟動(bin下的32/64位,activemq.bat),瀏覽器開啟localhost:8161進入介面,輸入使用者名稱密碼。

點選queues,進入傳送訊息的頁面:

 在message body傳送訊息測試。

相關推薦

java模板訊息傳送功能activeMq訊息返回模板併發

傳送模板訊息介面: http請求方式: POST https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN 獲取accessToken的介面: https請求方

android-----------實現登入和分享功能

1.通過微信官網獲得APPID和.jks檔案。 (.jks檔案的獲得是通過AS中的Build-Generate Signed APK-如果已有.jks就選擇已有的路徑,對應好兩次的密碼。 ) 2.導依賴 compile 'com.tencent.mm.opensdk:wec

小程式image圖片載入完成

需求    在應用中顯示的圖片很多情況不滿足業務需求,我們需要動態根據圖片的寬高進行縮放或載入中顯示的預設圖片,這是我沒就需要監聽圖片載入完成回撥,來看看微信小程式怎麼實現圖片載入完成回撥。實現  1. 繫結回撥    通過image標籤的bindload屬性繫結圖片載入完成

公眾號開發教程(七)JSSDK-分享朋友圈事件

作者:陳惠,叩丁狼教育高階講師。原創文章,轉載請註明出處。微信JS-SDK是微信公眾平臺 面向網頁開發者提供的基於微信內的網頁開發工具包。通過使用微信JS-SDK,網頁開發者可藉助微信高效地使用拍照、選圖、語音、位置等手機系統的能力,同時可以直接使用微信分享、掃一掃、卡券、支

iOS瀏覽器回退不重新整理(瀏覽器回退事件)

iOS在微信瀏覽器回退是不重新載入頁面的,有些時候是需要重新載入的,所以需要監聽回退事件 $(function(){ pushHistory(); }); function pushHistory(){ window.addEventLis

JAVA公眾號通過openid傳送模板訊息~

1,問題產生  在微信公眾號開發過程中,我們有時候做不同許可權的時候,比如在註冊的時候,需要稽核,然後我們要想辦法讓對方知道稽核的結果。這時候我們可以通過模板訊息來通知。 2,第一步,首先在微信公眾號上獲取模板訊息 首先,登入微信公眾平臺,看有沒有模板訊息這一塊,沒有的話點選新增功能外掛,

Java 傳送模板訊息

/** * 建立模板訊息 * @param openId * @param template_id * @param url * @param topcolor * @param carrierName * @param waybillCode

JAVA公眾號開發第10篇傳送模板訊息

簡介 模板訊息僅用於公眾號向用戶傳送重要的服務通知,只能用於符合其要求的服務場景中,如信用卡刷卡通知,商品購買成功通知等。不支援廣告等營銷類訊息以及其它所有可能對使用者造成騷擾的訊息。 關於使用規則,請注意: 1、所有服務號都可以在功能-&g

Java公眾平臺開發之傳送模板訊息

模板訊息僅用於公眾號向用戶傳送重要的服務通知,只能用於符合其要求的服務場景中,如信用卡刷卡通知,商品購買成功通知等。不支援廣告等營銷類訊息以及其它所有可能對使用者造成騷擾的訊息。對於一般的服務號而言,模板ID行業之類會事先配置好,所以用程式碼控制的只有傳送了。準備工作:已通過

公眾號傳送模板訊息給使用者

步驟 1.新增模板訊息功能  2.從模板庫中選擇自己合適的模板 3. 公共方法funtion.php中(thinkphp3.2框架) //模板公共方法 function rz_msg($openid,$temid,$first,$keyword1,$keywor

小程式——傳送模板訊息

步驟一:獲取模板ID 1、通過模版訊息管理介面獲取模版ID(詳見模版訊息管理) 2、在微信公眾平臺手動配置獲取模版ID     登入 https://mp.weixin.qq.com  獲取模板,如果沒有合

小程式傳送模板訊息

 小程式下發模板訊息統一通過微信“服務通知”傳送,如下圖   1. 獲取 access_token access_token 是全域性唯一介面呼叫憑據,開發者呼叫各介面時都需使用 access_token,需妥善儲存。 2. 新增模板訊息 跟公眾號一樣,需要現在小程式後

java模板訊息介面的使用

通過之前的微信開發分享我們應該知道微信如果要給使用者主動傳送訊息可以使用客服訊息或多客服,但是傳送客服訊息使用者需在48小時內和微信公眾號有過互動,也就是說如果48小時內使用者沒和公眾號互動過,即使發了客服訊息使用者也可能接不到。除了上面的訊息形式外,其實微信還提供了一種模

公眾號傳送模板訊息範例

public function sendTemplateMessage($data){ $info = model('Base')->model->table('wechat_template') ->field('switch,temp

公眾號傳送模板訊息

//4. 傳送微信客服訊息,一般滿足特定條件         if(result >0 ) {             logger.info("提交加油訂單成功=="+result);             String accessToken = wechatSer

小程式傳送模板訊息(php傳送)

/** * 小程式模板訊息傳送 */ public function sendMessage($cert_id=0) { //獲取access_token $appId = 'wxf70bdc502345219038f922342c'; $appSecret = '6ad

java開發傳送訊息

WeinxinCtroller.java package com.caiyl.zmd.weixin; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream

公眾平臺 傳送模板訊息

前言:最近一直再弄微信掃碼推送圖文訊息和模板訊息傳送,感覺學習到了不少東西。今天先總結一下微信公眾平臺模板訊息的傳送。因為這個自己弄了很久,開始很多地方不明白,所以今天好好總結一下。 微信公眾平臺技術文件:模板訊息介面 一、概述 模板訊息僅用於公眾號向

php之公眾號傳送模板訊息

講一下開發專案中微信公眾號傳送模板訊息的實現過程(我用的還是Thinkphp5.0)。先看一下效果,如圖:就是類似於這樣的,下面講一下實現過程:第一步:微信公眾號申請模板訊息許可權:立即申請:申請過程就不說了,提交併且申請通過後,可以在模板庫中看到模板訊息列表:想用哪個模板點

java開發模板訊息介面使用

微信開發--模板訊息介面 原理: 1.微信公眾號(服務號) 設定模板標題和模板內容--》生成模板ID 2.設定填充模板資料(使用map封裝),匹配Id,傳送給使用者。 package com.dm.wx.domain.templateMsg;import