1. 程式人生 > >微信公眾號 模板消息 定時推送 java

微信公眾號 模板消息 定時推送 java

quest 微信 cat 2個 使用權 output 行業 交流 set

前提:業務需要,要做一個關於月報的微信消息推送。即每個月定時自動發送一條消息 給關註 公眾號的人

用的是 公眾號的測試賬號(實際開發需要認證的公眾號)

微信官網的 模板消息接口規則:

1、所有服務號都可以在功能->添加功能插件處看到申請模板消息功能的入口,但只有認證後的服務號才可以申請模板消息的使用權限並獲得該權限;
2、需要選擇公眾賬號服務所處的2個行業,每月可更改1次所選行業;
3、在所選擇行業的模板庫中選用已有的模板進行調用;
4、每個賬號可以同時使用25個模板。
5、當前每個賬號的模板消息的日調用上限為10萬次,單個模板沒有特殊限制。【2014年11月18日將接口調用頻率從默認的日1萬次提升為日10萬次,可在MP登錄後的開發者中心查看】。當賬號粉絲數超過10W/100W/1000W時,模板消息的日調用上限會相應提升,以公眾號MP後臺開發者中心頁面中標明的數字為準。

註意點:
1、模板消息調用時主要需要模板ID和模板中各參數的賦值內容;
2、模板中參數內容必須以".DATA"結尾,否則視為保留字;
3、模板保留符號"{{ }}"。

我說下 大致思路:首先 根據 appid,appsecret 去調用 "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+APPID+"&secret="+APPSecret;
返回 accessToken,這個accessToken是以後我們獲取的憑證。 其次:獲取所有關註人的openid 去調用 "https://api.weixin.qq.com/cgi-bin/user/get?access_token="+accessToken+"&next_openid="+next_openid;
返回所有用戶的openid(註意是數組)最後:向每一個openid的用戶發消息咯 調用的接口:"https://api.weixin.qq.com/cgi-bin/message/template/send?access_token="+accessToken;
註意:這裏有post數據,官網有詳細說明(json格式,其實是你的傳入參數){
           "touser":"OPENID",
"template_id":"tamplate_id,
"url":"你需要跳轉你服務器的地址",
"data":{
"first": {
"value":"親愛的童鞋,你好!",
"color":"#173177"
},
"remark":{
"value":"上月月報已到達,請查收!",
"color":"#173177"
}
}
}


在測試的公眾號 有自己的 appid,appsecret, 有關註公眾號的所有人的openid,還要建立自己的一個消息模板
技術分享圖片

技術分享圖片

技術分享圖片


如何連微信服務器:代碼如下:(前面講的獲取acceToken,openid都是調用此方法獲取的得到)
//MSG為:上面post的數據

public JSONObject HTTPURLUtil(String url,String MSG) {

URL urlGet = null;
JSONObject object = null;

try {
urlGet = new URL(url);
HttpURLConnection http = (HttpURLConnection) urlGet.openConnection();
http.setRequestMethod("GET"); //必須get方式請求
http.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
http.setDoOutput(true);
http.setDoInput(true);
System.setProperty("sun.net.client.defaultConnectTimeout", "30000");// 連接超時30秒
System.setProperty("sun.net.client.defaultReadTimeout", "30000"); // 讀取超時30秒
http.connect();

OutputStream os =null;

if(!MSG.equals("") ) { //寫消息數據
os = http.getOutputStream();
os.write(MSG.getBytes("UTF-8")); //傳入參數
}

InputStream is = http.getInputStream();
int size = is.available();
byte[] jsonBytes = new byte[ size ];
is.read(jsonBytes);
String message = new String(jsonBytes, "UTF-8");
object = JSONObject.parseObject(message);

//關閉流
if(!MSG.equals("")) {
os.flush();
os.close();
}
is.close();

} catch (Exception e) {
e.printStackTrace();
}

return object;
}

可以去微信官網查看返回json對象的參數來查看是否成功

最後 給出 測試成功 的截圖:

技術分享圖片

點擊詳情:查看月報:(這裏的地址為 post 數據裏面url參數的地址 需要你自己有服務器,或者有端口映射 )

技術分享圖片

這裏涉及公司的 保密 暫時不放源碼,如需要,請聯系我 微信號:wxb909355285 共同交流

微信公眾號 模板消息 定時推送 java