微信圖文消息發送:
要發送微信圖文消息,首先我們需要知道的幾個接口,主動發送和被動發送,這里的主動的意思就是微信公眾號,主動給關注的用戶發送圖文消息,被動就是服務號在接收到用戶的請求或者別的事件的時回復給用戶的消息。浸提那咱們就來看一下微信主動發送圖文消息給用戶。
首先的要素就是咱們的公眾號呢還是需要認證的服務號。當然發送的對象也是關注咱們服務號的用戶,應為進行這些操作的依據還是用戶的openId,只有獲取到用戶的openId,才能根據openId群發消息,當然還可以根據組進行消息的發送,咱們這里講的就只是根據openId來群發消息。
還是之前兩節說的首先咱們需要獲取到用戶的openId,就是進行認證,當然只是openId不需要昵稱之類的私人信息的話,咱們可以進行靜默授權的方式,就是用戶無感知的方式進行。好了openId有了咱們需要發送圖文消息的話剩下的就是圖文素材了。下面咱們就來詳細說一下這個圖文素材。
1.圖文素材的組成:
1.1圖片素材,圖片素材就是咱們發送圖文素材中的圖片。在后面上傳的圖文素材中是這個參數的值:thumb_media_id。
1.2標題:發送圖文消息素材的title
1.3作者:author,
1.4圖文消息的摘要,僅有單圖文消息才有摘要,多圖文此處為空:digest
1.5是否顯示封面,0為false,即不顯示,1為true,即顯示,showCoverPic,這個字段設置在我們點擊發送的消息的時候進入之后首頁圖是否展示的標識。
1.6圖文消息的具體內容,支持HTML標簽,必須少于2萬字符,小于1M,且此處會去除JS, content,這里要是服務號支持支付功能的話,內容里面可以使用 a 標簽,點擊發送的圖文消息進入就可以隨時一個圖片電弧圖片就可以進入咱們希望用戶看到的頁面。要是沒有支付功能的話,只能是引導用戶點擊閱讀原文,進入我們希望用戶進入的頁面。
1.7圖文消息的原文地址,即點擊“閱讀原文”后的URL, contentSourceUrl,要是咱們的服務號支持支付功能的話,這個連接就可以配置在點擊圖片的反應連接里。
2.圖文素材的組成我們了解之后,就是上傳
2.1首先是上傳圖片素材。
2.2獲取上一步上傳的圖片素材,作為圖文素材的參數,上傳圖文素材。
3.通過上傳的圖文素材,發送圖文消息。用戶就可以接受消息,點擊查看消息。
下面我們來看一下上傳1.上傳圖片素材。2.上傳圖文素材。
1.上傳圖片素材。注意這里和文檔中給的有點差異。但是總體上還是安裝文檔上面的來,就是給出的Url,使用我們這里使用的,親測有效!!!
//注意這個URl 文檔中給出的URl是沒有這個參數的:type,但是這個參數是必須的,咱們這里上傳的是圖片的話,就是用image就可以啦
private static String ADD_MATERIAL_URL = "https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=%s&type=%s";
String addImageMedia(String type, File imageFile, String token) {
String url = String.format(ADD_MATERIAL_URL, token, type);
String materialResult = null;
try {
LOGGER.info("上傳微信圖文素材Url :{}", url);
materialResult = HttpsUtil.connectHttpsByPost(url, null, imageFile);
LOGGER.info("上傳微信圖文素材結果:{}", materialResult);
} catch (Exception ex) {
LOGGER.error("上傳微信圖文素材異常:", ex);
}
return materialResult;
}
其中的三個請求參數分別是:
type:上傳的文件類型,這里圖片的話即使image;
imageFile:上傳文件的路徑,這里是咱們準備上傳文件路徑,方便程序可以找到咱們上傳的資源。
token:就是每一次接口調用的憑證。這個數值是7200的有效時間,又有接口的請求限制所以就做一個緩存,或者是搞一個任務定時刷則個token都是OK的。
使用的是https的post方法,返回的結果是:
{"media_id":"dQ30hiyMqdIdtRcsy7yc6_w5rcmiAMAmaw5g9_XXdZo",
"url":"http://mmbiz.qpic.cn/mmbiz_png/c9uhCXXHZCxNWH4hknQw2rFchdGCrI1jbsvN9KhRHOBiaj6kbGh6SfCUB9VKU561gibpnN3Azuz6esvvMxYJWCiag/0?wx_fmt=png"}
咱們需要注意的是咱們發送的圖文消息,使用的圖片素材必須是永久圖片素材,臨時的圖片素材不管用。我們這里得到的media_id就是下一步咱們上傳圖文素材的 thumb_media_id。
2.好啦圖片素材上傳完畢,下面咱們上傳圖文素材。
//上傳圖文素材
private static final String PERMANENT_MEDIA_URL = "https://api.weixin.qq.com/cgi-bin/material/add_news?access_token=%s";
String addPermanentMediaArticle(MediaArticle mediaArticle) {
String url = String.format(PERMANENT_MEDIA_URL, mediaArticle.getToken());
try {
Map<String, Object> paramMap = Maps.newHashMap();
List<Map> articleList = Lists.newArrayList();
for (MediaArticle.Article article : mediaArticle.getArticles()) {
Map<String, String> articleMap = Maps.newHashMap();
articleMap.put("title", article.getTitle());
articleMap.put("thumb_media_id", article.getThumbMediaId());
articleMap.put("author", article.getAuthor());
articleMap.put("digest", article.getDigest());
articleMap.put("show_cover_pic", article.getShowCoverPic());
articleMap.put("content", article.getContent());
articleMap.put("content_source_url", article.getContentSourceUrl());
articleList.add(articleMap);
}
paramMap.put("articles", articleList);
String param = GsonHolder.getGson().toJson(paramMap);
LOGGER.info("添加微信圖文素材請求url:{},參數:{}", url, param);
String result = HttpClientUtils.sendHttpsPost(url, param);
LOGGER.info("添加微信圖文素材返回結果:{}", result);
return result;
} catch (Exception ex) {
LOGGER.error("添加微信圖文素材異常:", ex);
}
return null;
}
1.還是使用的是https,的post方法進行請求,url里面直接帶著咱們接口請求的憑證參數token。
2.下面看一下這些請求參數:這里的參數就不一一詳解了,這里的參數是上面咱們已經一一列舉。
來看一下返回值:
//永久圖文消息返回的media_id
{"media_id":"dQ30hiyMqdIdtRcsy7yc6xsMazGcezOQXYb6GvcoWWw"}
使用上面返回的media_id就可以發送圖文消息啦。
3.下面咱們調用發送圖文消息試試。在這里咱們可以使用正式的線上環境的API直接發送正式的通知消息,也可以使用預覽的接口發送一部分人首先看下結果,預覽接口的調用限制是100次每天。
/**
* 圖文素材發送 預覽
*/
private static String MEDIA_PRE_VIEW_URL = "https://api.weixin.qq.com/cgi-bin/message/mass/preview?access_token=%s";
String mediaPreView(String mediaId, String msgtype, String openId, String token) {
String url = String.format(MEDIA_PRE_VIEW_URL, token);
String preViewResult = null;
try {
Map<String, Object> paramMap = Maps.newHashMap();
Map<String, String> touser = Maps.newHashMap();
paramMap.put("touser", openId);
paramMap.put("msgtype", msgtype);
touser.put("media_id", mediaId);
paramMap.put("mpnews", touser);
String param = GsonHolder.getGson().toJson(paramMap);
LOGGER.info("圖文消息發送預覽,url:{}, param:{}", url, param);
preViewResult = HttpClientUtils.sendHttpsPost(url, param);
LOGGER.info("圖文消息發送預覽,result:{}", preViewResult);
} catch (Exception ex) {
LOGGER.error("圖文消息發送預覽異常:", ex);
}
return preViewResult;
}
這個就是咱們的預覽接口發送圖文消息,過期點擊無效。touser就是需要發送消息的openIds,注意這里要是群發消息的話,這個集合里必須是兩個以上的openId,msgtype就是圖片類型:mpnews,mpnews這個參數就是咱們上面得到的圖文消息的media_id.
發送成功之后返回的,errroCode:0,errorMessage:"success"
好了這一期咱們看了微信圖文消息發送,下一期咱們看一下微信素材管理。