溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

微信公眾平臺(tái) 發(fā)送模板消息(Java接口開發(fā))

發(fā)布時(shí)間:2020-09-12 11:57:13 來源:腳本之家 閱讀:195 作者:天才小小布 欄目:web開發(fā)

前言:最近一直再弄微信掃碼推送圖文消息和模板消息發(fā)送,感覺學(xué)習(xí)到了不少東西。今天先總結(jié)一下微信公眾平臺(tái)模板消息的發(fā)送。因?yàn)檫@個(gè)自己弄了很久,開始很多地方不明白,所以今天好好總結(jié)一下。

微信公眾平臺(tái)技術(shù)文檔:模板消息接口

一、概述

模板消息僅用于公眾號(hào)向用戶發(fā)送重要的服務(wù)通知,只能用于符合其要求的服務(wù)場景中,如信用卡刷卡通知,商品購買成功通知等。不支持廣告等營銷類消息以及其它所有可能對用戶造成騷擾的消息。

關(guān)于使用規(guī)則,請注意:

1、所有服務(wù)號(hào)都可以在功能->添加功能插件處看到申請模板消息功能的入口,但只有認(rèn)證后的服務(wù)號(hào)才可以申請模板消息的使用權(quán)限并獲得該權(quán)限;
2、需要選擇公眾賬號(hào)服務(wù)所處的2個(gè)行業(yè),每月可更改1次所選行業(yè);
3、在所選擇行業(yè)的模板庫中選用已有的模板進(jìn)行調(diào)用;
4、每個(gè)賬號(hào)可以同時(shí)使用25個(gè)模板。
5、當(dāng)前每個(gè)賬號(hào)的模板消息的日調(diào)用上限為10萬次,單個(gè)模板沒有特殊限制?!?014年11月18日將接口調(diào)用頻率從默認(rèn)的日1萬次提升為日10萬次,可在MP登錄后的開發(fā)者中心查看】。當(dāng)賬號(hào)粉絲數(shù)超過10W/100W/1000W時(shí),模板消息的日調(diào)用上限會(huì)相應(yīng)提升,以公眾號(hào)MP后臺(tái)開發(fā)者中心頁面中標(biāo)明的數(shù)字為準(zhǔn)。

關(guān)于接口文檔,請注意:

1、模板消息調(diào)用時(shí)主要需要模板ID和模板中各參數(shù)的賦值內(nèi)容;
2、模板中參數(shù)內(nèi)容必須以”.DATA”結(jié)尾,否則視為保留字;
3、模板保留符號(hào)”{{ }}”。

看微信公眾平臺(tái)接口文檔最開始我的內(nèi)心是崩潰的,因?yàn)槟夸浟斜硪婚_始就是設(shè)置所屬行業(yè),獲取所屬行業(yè)信息等。后來整理思路,我們主要負(fù)責(zé)的功能的實(shí)現(xiàn),就不去考慮那么多其他的內(nèi)容,直接弄模板消息的發(fā)送。但是發(fā)送模板之前有一個(gè)很重要的步驟,就是模板ID(template_id)。微信公眾平臺(tái)發(fā)送模板消息有嚴(yán)格的要求,參考模板消息運(yùn)營規(guī)范。

二、模板消息的設(shè)計(jì)

這里是依靠微信公眾平臺(tái)測試公眾號(hào)的模板消息接口來設(shè)計(jì)消息模板,通過行業(yè)類型來獲取模板的同學(xué)還是參考微信公眾平臺(tái)的官方文檔來學(xué)習(xí)。

1 新增模板消息

微信公眾平臺(tái) 發(fā)送模板消息(Java接口開發(fā))

微信的測試公眾號(hào)為我們提供了測試的消息模板,最多可添加10個(gè)(感覺夠用,畢竟只是測試),新增測試模板。

微信公眾平臺(tái) 發(fā)送模板消息(Java接口開發(fā))

(1)添加模板標(biāo)題和模板內(nèi)容

微信公眾平臺(tái) 發(fā)送模板消息(Java接口開發(fā)) 

模板標(biāo)題比較好理解,模板內(nèi)容需要設(shè)計(jì)參數(shù),參數(shù)需以{{開頭,以.DATA}}結(jié)尾。

例如:{{first.DATA}}

first就是我們接口傳的參數(shù)。

{{first.DATA}} 
商品:{{keynote1.DATA}} 
價(jià)格:{{keynote2.DATA}} 
日期:{{keynote3.DATA}} 
{{remark.DATA}}

新增之后就可以看到模板記錄,就有我們需要的模板ID了。有了模板ID我們就可以按照接下來的微信公眾平臺(tái)發(fā)送模板消息接口來實(shí)現(xiàn)我們的功能。

微信公眾平臺(tái) 發(fā)送模板消息(Java接口開發(fā))

三、發(fā)送模板消息

1 接口調(diào)用請求說明

http請求方式: POST

https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=ACCESS_TOKEN

2 POST數(shù)據(jù)說明

POST數(shù)據(jù)示例如下:

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

3 參數(shù)說明

參數(shù) 是否必填 說明、
touser 接收者openid
template_id 模板ID
url 模板跳轉(zhuǎn)鏈接
miniprogram 跳小程序所需數(shù)據(jù),不需跳小程序可不用傳該數(shù)據(jù)
appid 所需跳轉(zhuǎn)到的小程序appid(該小程序appid必須與發(fā)模板消息的公眾號(hào)是綁定關(guān)聯(lián)關(guān)系)
pagepath 所需跳轉(zhuǎn)到小程序的具體頁面路徑,支持帶參數(shù),(示例index?foo=bar)
data 模板數(shù)據(jù)

注:url和miniprogram都是非必填字段,若都不傳則模板無跳轉(zhuǎn);若都傳,會(huì)優(yōu)先跳轉(zhuǎn)至小程序。開發(fā)者可根據(jù)實(shí)際需要選擇其中一種跳轉(zhuǎn)方式即可。當(dāng)用戶的微信客戶端版本不支持跳小程序時(shí),將會(huì)跳轉(zhuǎn)至url。

4 java接口開發(fā)

(1)封裝請求參數(shù)Demo

public class TemplateData { 

  private String value; 
  private String color; 

  public String getValue() { 
    return value; 
  } 

  public void setValue(String value) { 
    this.value = value; 
  } 

  public String getColor() { 
    return color; 
  } 

  public void setColor(String color) { 
    this.color = color; 
  } 
}
public class WechatTemplate { 

  private String touser; 

  private String template_id; 

  private String url; 

  private Map<String, TemplateData> data; 

  public String getTouser() { 
    return touser; 
  } 

  public void setTouser(String touser) { 
    this.touser = touser; 
  } 

  public String getTemplate_id() { 
    return template_id; 
  } 

  public void setTemplate_id(String template_id) { 
    this.template_id = template_id; 
  } 

  public String getUrl() { 
    return url; 
  } 

  public void setUrl(String url) { 
    this.url = url; 
  } 

  public Map<String, TemplateData> getData() { 
    return data; 
  } 

  public void setData(Map<String, TemplateData> data) { 
    this.data = data; 
  } 
} 

(2)發(fā)送模板消息方法

public class TemplateMessageServiceImpl implements TemplateMessageService{

  private RestTemplate restTemplate ; 

  private String serviceHost = "https://api.weixin.qq.com";

  public TemplateMessageServiceImpl() {
    restTemplate = RestTemplateFactory.makeRestTemplate();
  }

  @Override
  public WeixinResponse sendTemplateMessage(String accessToken, WeixinTemplate weixinTemplate) {
    WeixinResponse weixinResponse = null;
    String url = new StringBuffer(serviceHost).append("/cgi-bin/message/template/send?access_token=")
        .append(accessToken).toString();
    weixinResponse = restTemplate.postForObject(url, weixinTemplate, WeixinResponse.class,new HashMap<String,String>());
    return weixinResponse;
  }

}

說明:簡單理解模板消息發(fā)送,首先是獲取accessToken,(如何獲取請參考:微信公眾平臺(tái) 獲取access_token)。其次是模板消息的參數(shù)封裝,最后就是http的post請求。我的http請求是使用Spring的restTemplate進(jìn)行請求,就不用我單獨(dú)寫一個(gè)http請求方法,如果沒有使用可以寫一個(gè)http請求的工具類。

(3)封裝響應(yīng)參數(shù)Demo

package com.plateno.weixin.message.model;

public class WeixinResponse {
  private String msgid;
  private int errcode;
  private String errmsg;

  public String getMsgid() {
    return msgid;
  }
  public void setMsgid(String msgid) {
    this.msgid = msgid;
  }
  public int getErrcode() {
    return errcode;
  }
  public void setErrcode(int errcode) {
    this.errcode = errcode;
  }
  public String getErrmsg() {
    return errmsg;
  }
  public void setErrmsg(String errmsg) {
    this.errmsg = errmsg;
  }

  @Override
  public String toString() {
    StringBuffer buf = new StringBuffer("WeixinResponse[msgid=");
    buf.append(msgid)
    .append(",errcode=").append(errcode)
    .append(",errmsg=").append(errmsg)
    .append("]");
    return buf.toString();
  }

}

模板消息發(fā)送效果:

微信公眾平臺(tái) 發(fā)送模板消息(Java接口開發(fā))

四、事件推送

在模版消息發(fā)送任務(wù)完成后,微信服務(wù)器會(huì)將是否送達(dá)成功作為通知,發(fā)送到開發(fā)者中心中填寫的服務(wù)器配置地址中。

1 送達(dá)成功時(shí)

(1)推送的XML如下

 <xml>
      <ToUserName><![CDATA[gh_7f083739789a]]></ToUserName>
      <FromUserName><![CDATA[oia2TjuEGTNoeX76QEjQNrcURxG8]]></FromUserName>
      <CreateTime>1395658920</CreateTime>
      <MsgType><![CDATA[event]]></MsgType>
      <Event><![CDATA[TEMPLATESENDJOBFINISH]]></Event>
      <MsgID>200163836</MsgID>
      <Status><![CDATA[success]]></Status>
      </xml>

(2)參數(shù)說明

參數(shù) 說明
ToUserName 公眾號(hào)微信號(hào)
FromUserName 接收模板消息的用戶的openid
CreateTime 創(chuàng)建時(shí)間
MsgType 消息類型是事件
Event 事件為模板消息發(fā)送結(jié)束
MsgID 消息id
Status 發(fā)送狀態(tài)為成功

 2 送達(dá)由于用戶拒收(用戶設(shè)置拒絕接收公眾號(hào)消息)而失敗時(shí)

(1)推送的XML如下

  <xml>
      <ToUserName><![CDATA[gh_7f083739789a]]></ToUserName>
      <FromUserName><![CDATA[oia2TjuEGTNoeX76QEjQNrcURxG8]]></FromUserName>
      <CreateTime>1395658984</CreateTime>
      <MsgType><![CDATA[event]]></MsgType>
      <Event><![CDATA[TEMPLATESENDJOBFINISH]]></Event>
      <MsgID>200163840</MsgID>
      <Status><![CDATA[failed:user block]]></Status>
      </xml>

(2)參數(shù)說明

參數(shù) 說明
ToUserName 公眾號(hào)微信號(hào)
FromUserName 接收模板消息的用戶的openid
CreateTime 創(chuàng)建時(shí)間
MsgType 消息類型是事件
Event 事件為模板消息發(fā)送結(jié)束
MsgID 消息id
Status 發(fā)送狀態(tài)為用戶拒絕接收

3 送達(dá)由于其他原因失敗時(shí)

(1)推送的XML如下

 <xml>
      <ToUserName><![CDATA[gh_7f083739789a]]></ToUserName>
      <FromUserName><![CDATA[oia2TjuEGTNoeX76QEjQNrcURxG8]]></FromUserName>
      <CreateTime>1395658984</CreateTime>
      <MsgType><![CDATA[event]]></MsgType>
      <Event><![CDATA[TEMPLATESENDJOBFINISH]]></Event>
      <MsgID>200163840</MsgID>
      <Status><![CDATA[failed: system failed]]></Status>
      </xml>

(2)參數(shù)說明

參數(shù) 說明
ToUserName 公眾號(hào)微信號(hào)
FromUserName 接收模板消息的用戶的openid
CreateTime 創(chuàng)建時(shí)間
MsgType 消息類型是事件
Event 事件為模板消息發(fā)送結(jié)束
MsgID 消息id
Status 發(fā)送狀態(tài)為發(fā)送失?。ǚ怯脩艟芙^)

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持億速云。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI