1. 程式人生 > >微信開發之傳送訊息介面

微信開發之傳送訊息介面

傳送訊息,是指使用者公眾號向用戶傳送相應形式的訊息。根據微信開發文件,由以下四種形式:被動回覆,群發介面,客服訊息介面以及模板訊息介面。本文將基於Java語言以及個人微信測試號,說明被動回覆、客服訊息介面以及模板訊息介面的使用實現,群發介面並未涉及。
1. 被動回覆
被動回覆只能應用於在接收到使用者的互動資料之後,才能向用戶傳送訊息。這一部分較為簡單,正式進行微信開發的第一步就是,在公眾號中基本配置->伺服器配置中設定URL(伺服器地址)時,這時該URL連結指定的地址就是對應著Java Web下的一個Servlet,配置好對應的Token及相關引數之後,則微信伺服器將會將所有的使用者與公眾號的互動資訊都轉發到該Servlet,然後開發者根據接收到的使用者互動資料,再進行處理。所謂的被動回覆,就是在該Servlet中判斷接收到你指定的訊息時(例如某個字眼),則直接將想要回復的訊息打包成官方指定的XML資料格式,寫回到輸出流中即可。在這裡不過過多解釋,如下示例程式碼:

response.getWriter().write( MessageUtil.MessageToXML(new TextMessage.Builder(fromUserName,toUserName,new Date().getTime(),"最新資訊請檢視下方微信選單欄,謝謝您的關注").build()));

2.客服訊息介面
客服訊息介面,應用於公眾號主動向特定使用者(必須滿足該使用者在48小時內與公眾號有互動)傳送特定格式的訊息,應用場景例如:使用者在微頁面上完成了抽獎,而這時候公眾號主動向使用者推送中獎資訊。所回覆的不同訊息的格式,參見開發者文件,下面以回覆文字訊息作為示例,需要注意的是推送的訊息data必須滿足json格式,請求型別為post。返回的json資料中,若errorcode為0,則代表推送成功。

 //推送中獎訊息
        String data = "{"+
                "\"touser\":\""+openid+"\","+
                "\"msgtype\":\"text\","+
                "\"text\":"+
                "{"+
                "\"content\":\""+content+"\""+
                "}"+
                "}";
        System.out.println(data);
        String
reMsg0 = UrlReqUtil.post("https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token="+access_token,data); JSONObject jsonObject = JSONObject.fromObject(reMsg0); if(0 != (Integer) jsonObject.get("errcode")) throw new RuntimeException("通知使用者失敗");

3.模板訊息介面
模板訊息介面的使用場景大體與客服訊息介面一致,只是不需要證明物件使用者“線上”,即48小時內與當前公眾號有互動記錄,因而應用範圍更為廣泛。在具有許可權的服務號中使用該介面時,需要向系統申請對應模板,並得到模板號,作為呼叫憑據。在測試號環境下,則需要自定義模板。例如:
這裡寫圖片描述
其中模板內容需要嚴格遵循指定的格式,即在需要呼叫才填入的變數值的定義方式為:{{xxxx.DATA}},其中“xxxx”為呼叫時對應的欄位名。
以下是呼叫程式碼:jsonData資料部分遵循json資料格式。
其中touser:為使用者在該公眾號下的openid
template_id:為模板id
對於每個欄位,包含兩個值,一是value,即填入模板的具體值;二是color,即對應的字型顏色。
請求方式為post,判斷是否成功同樣是依據errcode欄位,為0則成功。

        //推送模板訊息
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        String jsonData = "{" +
                "\"touser\":\""+openid+"\"," +
                "\"template_id\":\"maD2W1yaTvkXmh1dRjXEsMHUc9dDP8Xh1eANP***ig\"," +
                "\"topcolor\":\"#FF0000\"," +
                "\"data\":{" +
                "\"title\":{\"value\":\"恭喜您中獎啦\",\"color\":\"#173177\"}," +
                "\"nickname\":{\"value\":\""+nickname+"\",\"color\":\"#173177\"}," +
                "\"prizeLevel\":{\"value\":\""+rewardLevel+"\",\"color\":\"#173177\"}," +
                "\"prizeContent\":{\"value\":\""+ ConfigParamUtil.PRIZE_CONTENT.split(",")[rewardLevel]+"\",\"color\":\"#173177\"}," +
                "\"time\":{\"value\":\""+dateFormat.format(new Date())+"\",\"color\":\"#173177\"}," +
                "\"bonus\":{\"value\":\"10積分\",\"color\":\"#173177\"}}}";
        String reMsg1 = UrlReqUtil.post("https://api.weixin.qq.com/cgi-bin/message/template/send?access_token="+access_token,jsonData);
        JSONObject jsonObject = JSONObject.fromObject(reMsg1);
        if(0 != (Integer) jsonObject.get("errcode")) throw new RuntimeException("通知使用者失敗");