日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

微信公众号开发 [03] 结合UEditor实现图文消息群发功能

發(fā)布時間:2024/1/17 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 微信公众号开发 [03] 结合UEditor实现图文消息群发功能 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

0、寫在前面的話

如何實現(xiàn)微信平臺后臺管理中的,圖文消息發(fā)送功能?
大概的過程如下:
  • 通過類似表單的形式,將文章各部分內(nèi)容提交到后臺,封裝成一個實體類,并持久化到數(shù)據(jù)庫中
  • 需要推送的時候,將不同的文章選擇取出交給后臺,由后臺組裝成規(guī)范化的數(shù)據(jù)結(jié)構(gòu),調(diào)用微信的圖文消息素材上傳和群發(fā)接口
  • 其中文章的主體部分,我們采用UEditor富文本編輯器

本文主要針對模擬表單的圖片上傳,以及結(jié)合UEditor進行圖文內(nèi)圖片上傳,進行重點說明。細(xì)節(jié)和具體代碼流程就不再詳細(xì)展開了。
參考鏈接:
  • asp.net微信開發(fā)第十篇----使用百度編輯器編輯圖文消息,上傳圖片、微信視頻

1、什么是圖文消息

所謂圖文消息,就是我們常在訂閱號中收到的如下圖所示的消息類型:
從 微信開發(fā)者文檔 - 消息管理 - 發(fā)送消息 - 群發(fā)接口和原創(chuàng)校驗 - 上傳圖文消息素材 中可以看到,圖文消息就是文章的集合,每條圖文消息包含的文章不得超過8條。
我們從開發(fā)文檔中上傳圖文消息素材的POST格式來看,一個文章大概包含的內(nèi)容有:{ "articles": [{"thumb_media_id":"qI6_Ze_6PtV7svjolgs-rN6stStuHIjs9_DidOHaj0Q-mwvBelOXCFZiq2OsIU-p","author":"xxx","title":"Happy Day","content_source_url":"www.qq.com","content":"content","digest":"digest","show_cover_pic":1},{"thumb_media_id":"qI6_Ze_6PtV7svjolgs-rN6stStuHIjs9_DidOHaj0Q-mwvBelOXCFZiq2OsIU-p","author":"xxx","title":"Happy Day","content_source_url":"www.qq.com","content":"content","digest":"digest","show_cover_pic":0}] }221{ 2 ? "articles": [3 {4 ? ? ? ? ? ? "thumb_media_id":"qI6_Ze_6PtV7svjolgs-rN6stStuHIjs9_DidOHaj0Q-mwvBelOXCFZiq2OsIU-p",5 ? ? ? ? ? ? "author":"xxx",6 "title":"Happy Day",7 "content_source_url":"www.qq.com",8 "content":"content",9 "digest":"digest",10 ? ? ? ? ? ? "show_cover_pic":111 },12 {13 ? ? ? ? ? ? "thumb_media_id":"qI6_Ze_6PtV7svjolgs-rN6stStuHIjs9_DidOHaj0Q-mwvBelOXCFZiq2OsIU-p",14 ? ? ? ? ? ? "author":"xxx",15 "title":"Happy Day",16 "content_source_url":"www.qq.com",17 "content":"content",18 "digest":"digest",19 ? ? ? ? ? ? "show_cover_pic":020 }21 ? ]22}
參數(shù)? ??是否必須? ??說明
Articles圖文消息,一個圖文消息支持1到8條圖文
thumb_media_id圖文消息縮略圖的media_id,可以在基礎(chǔ)支持-上傳多媒體文件接口中獲得
author圖文消息的作者
title圖文消息的標(biāo)題
content_source_url在圖文消息頁面點擊“閱讀原文”后的頁面,受安全限制,如需跳轉(zhuǎn)Appstore,可以使用itun.es或appsto.re的短鏈服務(wù),并在短鏈后增加 #wechat_redirect 后綴。
content圖文消息頁面的內(nèi)容,支持HTML標(biāo)簽。具備微信支付權(quán)限的公眾號,可以使用a標(biāo)簽,其他公眾號不能使用
digest圖文消息的描述
show_cover_pic是否顯示封面,1為顯示,0為不顯示

而本篇博客要解決的,就是如何獲取上圖紅色部分的?thumb_media_id 和?content,后者主要也是闡述其內(nèi)容中的圖片上傳過程

2、群發(fā)圖文消息的過程和UEditor使用

由微信的官方文檔可知,群發(fā)圖文消息的過程如下:
  • 首先,調(diào)用接口上傳封面縮略圖素材,獲取thumb_media_id;(目標(biāo)1)
  • 然后將圖文消息中需要用到的圖片,使用上傳圖文消息內(nèi)圖片接口,上傳成功并獲得圖片 URL;(目標(biāo)2)
  • 上傳圖文消息素材,需要用到圖片時,請使用上一步獲取的圖片 URL;
  • 使用對用戶標(biāo)簽的群發(fā),或?qū)?OpenID 列表的群發(fā),將圖文消息群發(fā)出去,群發(fā)時微信會進行原創(chuàng)校驗,并返回群發(fā)操作結(jié)果;
  • 在上述過程中,如果需要,還可以預(yù)覽圖文消息、查詢?nèi)喊l(fā)狀態(tài),或刪除已群發(fā)的消息等。

  • 我們的目標(biāo)很明確,下面就開始按步驟進行說明。

    2.1 啟用UEditor

    UEditor是百度的一款富文本編輯器,用它的主要目的是因為它配置比較靈活,所見即所得的友好體驗。這里只會提供編輯器部分,其他諸如標(biāo)題作者,需要自行在網(wǎng)頁添加,此處不再闡述。
    簡單說來,最終我們是為了實現(xiàn)一個類似提交表單的功能,把各部分內(nèi)容最后封裝到一個實體類中,而UEditor部分就是用來封裝文章的content的。
    • UEditor的官方網(wǎng)址和下載
    • UEditor的官網(wǎng)文檔

    UEditor的安裝和工具欄設(shè)置等不是本文的討論重點,此處請自行谷歌,或按照官方文檔進行部署。網(wǎng)頁上部署好以后(如下圖中的部分3),再自行添加如標(biāo)題輸入,作者輸入等input標(biāo)簽,得到效果如下:
    參考鏈接:
    • 官方文檔(定制工具欄圖標(biāo))
    • 百度編輯器UEditor自定義工具欄Toolbars

    2.2 封面和文章內(nèi)圖片上傳

    2.2.1 上傳封面縮略圖永久素材

    在永久圖文消息中,要求縮略圖也是永久素材類型,所以我們這里調(diào)用的接口是 “新增其他類型的永久素材的接口”,如下所示(這里type我們要用thumb):http請求方式: POST,需使用https https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=ACCESS_TOKEN&type=TYPE調(diào)用示例(使用curl命令,用FORM表單方式新增一個其他類型的永久素材,curl命令的使用請自行查閱資料)41http請求方式: POST,需使用https2https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=ACCESS_TOKEN&type=TYPE34調(diào)用示例(使用curl命令,用FORM表單方式新增一個其他類型的永久素材,curl命令的使用請自行查閱資料)
    參數(shù)說明:
    • access_token(必需)?調(diào)用接口憑證
    • type(必需)?媒體文件類型,分別有圖片(image)、語音(voice)、視頻(video)和縮略圖(thumb
    • media(必需)?form-data中媒體文件標(biāo)識,有filename、filelength、content-type等信息

    那么問題來了,為了避免接口次數(shù)的頻繁使用和浪費,我們在標(biāo)題0中提到的過程是,將文章各部分內(nèi)容提交到后臺,封裝成一個實體類,并持久化到數(shù)據(jù)庫中。需要推送的時候,再取出來調(diào)用微信接口進行上傳和推送(而不是編輯的時候就調(diào)用微信的接口)。
    也就是說,縮略圖信息,都是提前寫好并整合封裝在某個類中的(或者放在數(shù)據(jù)庫中),這意味著我們要在推送消息的時候從內(nèi)容里把需要上傳的東西抽出來再去調(diào)用接口,獲取返回值后再組裝微信格式的圖文消息發(fā)送。
    而這里的接口要求使用表單的形式提交才能生效,但用這種方式,密鑰信息accessToken就暴露在頁面中,并且也獲取不到上傳成功后的媒體ID。怎么辦?
    解決辦法(參考鏈接):先把文件上傳到服務(wù)器(數(shù)據(jù)庫),從服務(wù)器獲取文件,然后用HttpURLConnection同下面微信調(diào)用接口的url建立連接public static String uploadTemp(File file, String url) throws IOException {String REQUEST_METHOD = "POST";String result = null;//請求地址URL urlObj = new URL(url);//連接HttpURLConnection connection = (HttpURLConnection) urlObj.openConnection();//設(shè)置關(guān)鍵值//POST提交表單,默認(rèn)是GETconnection.setRequestMethod(REQUEST_METHOD);connection.setDoInput(true);connection.setDoOutput(true);//POST方式無法使用緩存connection.setUseCaches(false);//設(shè)置請求頭信息connection.setRequestProperty("Connection", "Keep-Alive");connection.setRequestProperty("Charset", "UTF-8");//設(shè)置邊界String BOUNDARY = "----------" + System.currentTimeMillis();connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);//請求正文信息//part1 開頭StringBuilder stringBuilder = new StringBuilder();stringBuilder.append("--"); // 必須多兩道線stringBuilder.append(BOUNDARY);stringBuilder.append("\r\n");stringBuilder.append("Content-Disposition: form-data;name=\"file\";filename=\"" + file.getName() + "\"\r\n");stringBuilder.append("Content-Type:application/octet-stream\r\n\r\n");byte[] head = stringBuilder.toString().getBytes("utf-8");//獲得輸出流OutputStream out = new DataOutputStream(connection.getOutputStream());//輸出表頭out.write(head);//part2 文件正文//把文件以流文件的方式,推入到url中DataInputStream in = new DataInputStream(new FileInputStream(file));int bytes = 0;byte[] bufferOut = new byte[1024];while ((bytes = in.read(bufferOut)) != -1) {out.write(bufferOut, 0, bytes);}in.close();//part3 結(jié)尾部分byte[] foot = ("\r\n--" + BOUNDARY + "--\r\n").getBytes("utf-8");// 定義最后數(shù)據(jù)分隔線out.write(foot);out.flush();out.close();StringBuffer buffer = new StringBuffer();BufferedReader reader = null;try {// 定義BufferedReader輸入流來讀取URL的響應(yīng)reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));String line = null;while ((line = reader.readLine()) != null) {buffer.append(line);}if (result == null) {result = buffer.toString();}} catch (IOException e) {log.error("發(fā)送POST請求出現(xiàn)異常!" + e);e.printStackTrace();throw new IOException("數(shù)據(jù)讀取異常");} finally {if(reader!=null) {reader.close();}}return result; }851public static String uploadTemp(File file, String url) throws IOException {2 ? ?String REQUEST_METHOD = "POST";3 ? ?String result = null;45 ? ?//請求地址6 ? ?URL urlObj = new URL(url);78 ? ?//連接9 ? ?HttpURLConnection connection = (HttpURLConnection) urlObj.openConnection();1011 ? ?//設(shè)置關(guān)鍵值12 ? ?//POST提交表單,默認(rèn)是GET13 ? ?connection.setRequestMethod(REQUEST_METHOD);14 ? ?connection.setDoInput(true);15 ? ?connection.setDoOutput(true);16 ? ?//POST方式無法使用緩存17 ? ?connection.setUseCaches(false);1819 ? ?//設(shè)置請求頭信息20 ? ?connection.setRequestProperty("Connection", "Keep-Alive");21 ? ?connection.setRequestProperty("Charset", "UTF-8");2223 ? ?//設(shè)置邊界24 ? ?String BOUNDARY = "----------" + System.currentTimeMillis();25 ? ?connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);2627 ? ?//請求正文信息28 ? ?//part1 開頭29 ? ?StringBuilder stringBuilder = new StringBuilder();30 ? ?stringBuilder.append("--"); // 必須多兩道線31 ? ?stringBuilder.append(BOUNDARY);32 ? ?stringBuilder.append("\r\n");33 ? ?stringBuilder.append("Content-Disposition: form-data;name=\"file\";filename=\"" + file.getName() + "\"\r\n");34 ? ?stringBuilder.append("Content-Type:application/octet-stream\r\n\r\n");3536 ? ?byte[] head = stringBuilder.toString().getBytes("utf-8");3738 ? ?//獲得輸出流39 ? ?OutputStream out = new DataOutputStream(connection.getOutputStream());40 ? ?//輸出表頭41 ? ?out.write(head);4243 ? ?//part2 文件正文44 ? ?//把文件以流文件的方式,推入到url中45 ? ?DataInputStream in = new DataInputStream(new FileInputStream(file));46 ? ?int bytes = 0;47 ? ?byte[] bufferOut = new byte[1024];48 ? ?while ((bytes = in.read(bufferOut)) != -1) {49 ? ? ? ?out.write(bufferOut, 0, bytes);50 ? }51 ? ?in.close();5253 ? ?//part3 結(jié)尾部分54 ? ?byte[] foot = ("\r\n--" + BOUNDARY + "--\r\n").getBytes("utf-8");// 定義最后數(shù)據(jù)分隔線55 ? ?out.write(foot);565758 ? ?out.flush();59 ? ?out.close();606162 ? ?StringBuffer buffer = new StringBuffer();63 ? ?BufferedReader reader = null;64 ? ?try {65 ? ? ? ?// 定義BufferedReader輸入流來讀取URL的響應(yīng)66 ? ? ? ?reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));67 ? ? ? ?String line = null;68 ? ? ? ?while ((line = reader.readLine()) != null) {69 ? ? ? ? ? ?buffer.append(line);70 ? ? ? }71 ? ? ? ?if (result == null) {72 ? ? ? ? ? ?result = buffer.toString();73 ? ? ? }74 ? } catch (IOException e) {75 ? ? ? ?log.error("發(fā)送POST請求出現(xiàn)異常!" + e);76 ? ? ? ?e.printStackTrace();77 ? ? ? ?throw new IOException("數(shù)據(jù)讀取異常");78 ? } finally {79 ? ? ? ?if(reader!=null) {80 ? ? ? ? ? ?reader.close();81 ? ? ? }82 ? }8384 ? ?return result;85}
    最終返回的result字符串,是一個JSON格式的微信服務(wù)器返回的值,其中我們可以提取其中的media_id。

    2.2.2 結(jié)合UEditor實現(xiàn)圖文內(nèi)圖片消息的圖片上傳

    上傳圖文消息內(nèi)的圖片,有專門的接口,這個接口上傳的圖片是不占用永久素材的數(shù)量限制的。調(diào)用該接口,可以獲得圖片的URL,這里的調(diào)用方式,也是和如上一樣使用表單模擬提交的方式,這里主要講解的是,如何結(jié)合UEditor。
    UEditor編輯器中的圖片上傳,我們需要修改其上傳后的地址,也就是說希望它把圖片以流的形式給我們自己寫的Action,再由我們的Action把文件提交給微信服務(wù)器以獲取URL,再放到文章中去。
    首先,更改編輯器的上傳圖片的后臺地址,重寫其js腳本部分的getActionUrl方法,定義跳轉(zhuǎn)到自己的Action:ue = UE.getEditor("editor"); //重寫UEDITOR的getActionUrl 方法,定義自己的Action,上傳圖片保存至相應(yīng)的位置 UE.Editor.prototype._bkGetActionUrl = UE.Editor.prototype.getActionUrl; UE.Editor.prototype.getActionUrl = function (action) {if (action == 'uploadimage' || action == 'uploadfile') {var id = $('#carInfoId').val();//修改定義自己的Actionreturn '/admin/news/do/ueditor_uploadNewsImage.q';} else {return this._bkGetActionUrl.call(this, action);} };121ue = UE.getEditor("editor");2//重寫UEDITOR的getActionUrl 方法,定義自己的Action,上傳圖片保存至相應(yīng)的位置3UE.Editor.prototype._bkGetActionUrl = UE.Editor.prototype.getActionUrl;4UE.Editor.prototype.getActionUrl = function (action) {5 ? ?if (action == 'uploadimage' || action == 'uploadfile') {6 ? ? ? ?var id = $('#carInfoId').val();7 ? ? ? ?//修改定義自己的Action8 ? ? ? ?return '/admin/news/do/ueditor_uploadNewsImage.q';9 ? } else {10 ? ? ? ?return this._bkGetActionUrl.call(this, action);11 ? }12};
    由于提交過來的是tmp格式,直接調(diào)用微信接口會出現(xiàn)類型錯誤的返回值,所以在Action中我們要將圖片格式轉(zhuǎn)換一下再調(diào)用微信接口:
    參考鏈接:
    • 將ueditor中的圖片上傳用struts2實現(xiàn)
    • UEditor官方文檔?后端請求規(guī)范 返回json格式要求

    /*** ueditor編輯器上傳圖片到微信服務(wù)器* <p>該部分是使用了百度的富文本web編輯器UEditor,以及微信的圖文消息內(nèi)圖片上傳接口</p>** @throws IOException*/ public void ueditor_uploadNewsImage() throws IOException {WeChatUtil weChatUtil = new WeChatUtil();String accessToken = weChatUtil.getAccessToken();HttpServletResponse response = ServletActionContext.getResponse();//struts請求 包裝過濾器MultiPartRequestWrapper wrapper = (MultiPartRequestWrapper) ServletActionContext.getRequest();//獲取文件過濾器File tmp = wrapper.getFiles("upfile")[0];//獲得上傳的文件名String filename = wrapper.getFileNames("upfile")[0];int suffixIndex = filename.indexOf(".");//文件后綴確定if (suffixIndex == filename.lastIndexOf(".")) {String suffix = filename.substring(suffixIndex);File file = File.createTempFile("tmp", suffix);FileCopyUtils.copy(tmp, file);String imageUrl = weChatUtil.uploadImg(accessToken, file); //這里最終還是調(diào)用的表單模擬的那個方法//如果獲取到了有效的imageUrlif (imageUrl != null && imageUrl.substring(0, 4).equals("http")) {String json = "{\"state\":\"SUCCESS\", \"url\":\"%s\", \"title\":\"%s\", \"original\":\"%s\"}";json = String.format(json, imageUrl, filename, filename);log.debug("上傳圖片返回信息:" + json);response.getWriter().write(json);}} }x1/**2 * ueditor編輯器上傳圖片到微信服務(wù)器3 * <p>該部分是使用了百度的富文本web編輯器UEditor,以及微信的圖文消息內(nèi)圖片上傳接口</p>4 *5 * @throws IOException6 */7public void ueditor_uploadNewsImage() throws IOException {8 ? ?WeChatUtil weChatUtil = new WeChatUtil();9 ? ?String accessToken = weChatUtil.getAccessToken();10 ? ?HttpServletResponse response = ServletActionContext.getResponse();1112 ? ?//struts請求 包裝過濾器13 ? ?MultiPartRequestWrapper wrapper = (MultiPartRequestWrapper) ServletActionContext.getRequest();14 ? ?//獲取文件過濾器15 ? ?File tmp = wrapper.getFiles("upfile")[0];16 ? ?//獲得上傳的文件名17 ? ?String filename = wrapper.getFileNames("upfile")[0];1819 ? ?int suffixIndex = filename.indexOf(".");20 ? ?//文件后綴確定21 ? ?if (suffixIndex == filename.lastIndexOf(".")) {22 ? ? ? ?String suffix = filename.substring(suffixIndex);23 ? ? ? ?File file = File.createTempFile("tmp", suffix);24 ? ? ? ?FileCopyUtils.copy(tmp, file);2526 ? ? ? ?String imageUrl = weChatUtil.uploadImg(accessToken, file); //這里最終還是調(diào)用的表單模擬的那個方法27 ? ? ? ?//如果獲取到了有效的imageUrl28 ? ? ? ?if (imageUrl != null && imageUrl.substring(0, 4).equals("http")) {29 ? ? ? ? ? ?String json = "{\"state\":\"SUCCESS\", \"url\":\"%s\", \"title\":\"%s\", \"original\":\"%s\"}";30 ? ? ? ? ? ?json = String.format(json, imageUrl, filename, filename);31 ? ? ? ? ? ?log.debug("上傳圖片返回信息:" + json);32 ? ? ? ? ? ?response.getWriter().write(json);33 ? ? ? }34 ? }35}
    另外,需要注意的是,UEditor要求后端返回固定格式的返回碼才能實現(xiàn)圖片插入到文本編輯內(nèi)容中。注意這里的json返回碼格式,內(nèi)部必須使用雙引號,使用單引號替代是無效的。
    上面兩個就是該部分的核心內(nèi)容,還有一個小地方需要修改,如果使用的Struts框架,那么要注意,由于Struts2框架默認(rèn)使用Apache的Commons FileUpload組件和內(nèi)建的FileUploadInterceptor攔截器實現(xiàn)文件上傳,將request中的文件域封裝到action中的一個File類型的屬性中,并刪除request中的原有文件域,因此直接用Ueditor上傳文件會失敗。
    解決的方法是自己寫一個Filter替代Struts2的Filter,排除掉ueditor的controller.jsp文件。

    參考鏈接:
    • Ueditor整合Struts2實現(xiàn)圖片上傳
    • [J2EE]jsp項目中使用UEditor富文本編輯器

    public class MyStrutsFilter extends StrutsPrepareAndExecuteFilter {public void doFilter(ServletRequest req, ServletResponse res,FilterChain chain) throws IOException, ServletException {HttpServletRequest request = (HttpServletRequest) req;//不過濾的urlString url = request.getRequestURI();System.out.println(url);try {if (url.contains("/controller.jsp")) {System.out.println("使用自定義的過濾器");chain.doFilter(req, res);} else {System.out.println("使用默認(rèn)的過濾器");super.doFilter(req, res, chain);}} catch (Exception e) {e.printStackTrace();}} }191public class MyStrutsFilter extends StrutsPrepareAndExecuteFilter {2 ? ?public void doFilter(ServletRequest req, ServletResponse res,FilterChain chain) throws IOException, ServletException {3 ? ? ? ?HttpServletRequest request = (HttpServletRequest) req;4 ? ? ? ?//不過濾的url5 ? ? ? ?String url = request.getRequestURI();6 ? ? ? ?System.out.println(url);7 ? ? ? ?try {8 ? ? ? ? ? ?if (url.contains("/controller.jsp")) {9 ? ? ? ? ? ? ? ?System.out.println("使用自定義的過濾器");10 ? ? ? ? ? ? ? ?chain.doFilter(req, res);11 ? ? ? ? ? } else {12 ? ? ? ? ? ? ? ?System.out.println("使用默認(rèn)的過濾器");13 ? ? ? ? ? ? ? ?super.doFilter(req, res, chain);14 ? ? ? ? ? }15 ? ? ? } catch (Exception e) {16 ? ? ? ? ? ?e.printStackTrace();17 ? ? ? }18 ? }19}

    2.3 圖文素材上傳和發(fā)送

    到這里,我們再來看下上傳圖文永久素材所需要的格式:{"articles": [{"thumb_media_id":"qI6_Ze_6PtV7svjolgs-rN6stStuHIjs9_DidOHaj0Q-mwvBelOXCFZiq2OsIU-p","author":"xxx","title":"Happy Day","content_source_url":"www.qq.com","content":"content","digest":"digest","show_cover_pic":1},{"thumb_media_id":"qI6_Ze_6PtV7svjolgs-rN6stStuHIjs9_DidOHaj0Q-mwvBelOXCFZiq2OsIU-p","author":"xxx","title":"Happy Day","content_source_url":"www.qq.com","content":"content","digest":"digest","show_cover_pic":0}] }1{2 ? "articles": [3 {4 ? ? ? ? ? ? "thumb_media_id":"qI6_Ze_6PtV7svjolgs-rN6stStuHIjs9_DidOHaj0Q-mwvBelOXCFZiq2OsIU-p",5 ? ? ? ? ? ? "author":"xxx",6 "title":"Happy Day",7 "content_source_url":"www.qq.com",8 "content":"content",9 "digest":"digest",10 ? ? ? ? ? ? "show_cover_pic":111 },12 {13 ? ? ? ? ? ? "thumb_media_id":"qI6_Ze_6PtV7svjolgs-rN6stStuHIjs9_DidOHaj0Q-mwvBelOXCFZiq2OsIU-p",14 ? ? ? ? ? ? "author":"xxx",15 "title":"Happy Day",16 "content_source_url":"www.qq.com",17 "content":"content",18 "digest":"digest",19 ? ? ? ? ? ? "show_cover_pic":020 }21 ? ]22}
    • thumb_media_id 上傳封面縮略圖后返回的media_id,我們已經(jīng)說明了
    • author 這個寫個input就可以搞定
    • title 同上
    • content_source_url 非必需
    • content 這里就是我們用UEditor編輯器中的內(nèi)容了,其中重點是圖片上傳,我們已經(jīng)說明了
    • digest 摘要,加input解決
    • show_cover_pic 非必需

    東西都有了,調(diào)用接口也就簡單了。然后接著調(diào)用群發(fā)的接口,也就很容易了。這里主要參考文檔(微信公眾平臺技術(shù)文檔 - 消息管理 - 發(fā)送消息 - 群發(fā)接口和原創(chuàng)校驗)就行了,時間精力有限,就不再展開了。

    轉(zhuǎn)載于:https://www.cnblogs.com/deng-cc/p/6868234.html

    總結(jié)

    以上是生活随笔為你收集整理的微信公众号开发 [03] 结合UEditor实现图文消息群发功能的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。