1. 程式人生 > >【微信公眾平臺開發】傳送模板訊息

【微信公眾平臺開發】傳送模板訊息

post資料示例如下:


{
       "touser":"OPENID",
       "template_id":"TEMPLATEID",
       "data":{
               "first": {
                   "value":"恭喜你購買成功!",
                   "color":"#173177"
               },
               "product":{
                   "value":"巧克力",
                   "color":"#173177"
               },
               "amount": {
                   "value":"39.8元",
                   "color":"#173177"
               },
               "time": {
                   "value":"2014年9月22日",
                   "color":"#173177"
               },
               "remark":{
                   "value":"歡迎再次購買!",
                   "color":"#173177"
               }
       }
}

但是template_id和openid怎麼獲取呢 三、微信公眾平臺提供了公眾平臺測試賬號,有許可權限制的介面都可以在這裡測試 在這裡插入圖片描述 1、介面測試號申請: 在這裡插入圖片描述 URL是啟動你自己的專案後某個介面的請求地址,但要是外網的地址;Token是自己隨意寫的。 URL如果沒有自己的地址,沒關係,可以使用nettools,做內網穿透,對映到本地80埠即可: 在這裡插入圖片描述 2、掃描關注二維碼,模擬使用者,微訊號為使用者openid: 在這裡插入圖片描述 3、新增模板 在這裡插入圖片描述 模板內容有填寫規則: 在這裡插入圖片描述 填寫後如下示例: 在這裡插入圖片描述 好了,到現在openid和templateid都有了,我們開始測試。 在這裡插入圖片描述 返回成功! 測試環境跑通,我們只要將需要傳的引數帶上,請求騰訊的介面,就可以完成一次模板訊息的傳送。

java後端程式碼,我們需要封裝實體:

@Data
public class WxTemplateDomain implements Serializable {
    private String toUser;
    private String templateId;
    private String url;
    private Map<String, TemplateParam> data;
}
@Data
public class TemplateParam {
    private String  value;
    private String  color;
}

然後在邏輯處理service層呼叫騰訊介面:

public static final String TEMPLATE_URL = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=";

/**
     * 傳送模板訊息
     * @param wxTemplateDomain
     * @return
     */
    public JSONObject getTemplate(WxTemplateDomain wxTemplateDomain,String token){
        //傳送模板訊息
        String domain = JSONSerializer.toJSON(wxTemplateDomain).toString();
        String result = HttpUtils.postJson(TEMPLATE_URL+token,domain);
        JSONObject object = JSONObject.parseObject(result);
        if (object != null) {
            int errcode = object.getIntValue("errcode");
            if (errcode != 0) {
                throw new ApiException(1, object.getString("errmsg"));
            }
        }
        return object;
    }

在發post請求呼叫騰訊介面的時候,原來我用的是post(String url,Map<String,?>requestParam),但每次到這裡都報錯47001,JSON/xml解析錯誤,網上查了多種解答,試過後無效,所以乾脆用了postjson這種方式。