La gestion des matériaux WeChat et la publication en masse ne sont pas conviviales. Cet article ne présente que les nouveaux matériaux temporaires et les nouveaux matériaux permanents, et ajoute le reste en les obtenant, en les supprimant et en les modifiant.
Il existe souvent des scénarios où des matériaux multimédias temporaires sont nécessaires pour les comptes officiels. Par exemple, lors de l'utilisation d'interfaces, en particulier lors de l'envoi de messages, des opérations telles que l'obtention et l'appel de fichiers multimédias, les messages multimédias, sont effectués via Media_id. L'interface de gestion des matériaux est ouverte à tous les numéros d'abonnement certifiés et les numéros de service .
Limitations de matériaux
Image: 2M, prend en charge PNG / JPEG / JPG / GIF Format Voice: 2M, la longueur de lecture ne dépasse pas les années 60, prend en charge la vidéo du format AMR / MP3 (vidéo): 10 Mo, prend en charge les miniatures de format MP4: 64KB, prend en charge le format JPG JPG MP4
1. Ajouter des matériaux temporaires
Interface: https://api.weixin.qq.com/cgi-bin/media/upload?access_token=access_token&type=type, puis transmettez un type de fichier multimédia, qui peut être l'image (image), la voix (voix), la vidéo (vidéo) et le thumbnail (Thumb).
1. Les comptes d'abonnement et de service doivent être certifiés
2. MATÉRIEL TEMPORARY MEDIA_ID est réutilisable
3. Le fichier multimédia est stocké dans le fond WeChat pendant 3 jours, c'est-à-dire que Media_id sera invalide après 3 jours.
/ ** * Télécharger du matériel temporaire (local) * * @param AccessToken * @param type * Types de fichiers multimédias, y compris l'image (image), la voix (voix), la vidéo (vidéo) et les miniatures (Thumb) * @param chemin * Path Image * @return * / public static uploadmediasResult uploadtempmediafile (null type, string Type, String Path) {uploadtemeMeReSult Résultat = null; Treemap <string, string> params = new Treemap <> (); Params.put ("Access_token", AccessToken); Params.put ("type", type); try {String json = httpsuploadmediafile (systemconfig.post_method, wechatconfig.upload_temp_media_type_url, params, path); result = jsonUtil.fromjSontring (json, uploadmediasResult.class); } catch (exception e) {e.printStackTrace (); } Retour Résultat; } / ** * Télécharger du matériel temporaire (réseau) * * @param AccessToken * @param Type * Types de fichiers multimédias, y compris l'image (image), la voix (voix), la vidéo (vidéo) et les miniatures (Thumb) * @param pathche * Path Image * @return * / public static uploadmediasResult uploadTempmedia (null; Treemap <string, string> params = new Treemap <> (); Params.put ("Access_token", AccessToken); Params.put ("type", type); try {String json = httpsuploadMedia (systemconfig.post_method, wechatconfig.upload_temp_media_type_url, params, path, 0, 0); result = jsonUtil.fromjSontring (json, uploadmediasResult.class); } catch (exception e) {e.printStackTrace (); } Retour Résultat; }2. Ajouter des matériaux permanents
Interface: https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=access_token&type=type, types de fichiers multimédias, y compris l'image (image), voix (voix), vidéo (vidéo, exception) et Thumbnail (Thumb)
/ ** * Télécharger du matériel permanent (local) * * @param AccessToken * @param Type * Types de fichiers multimédias, y compris l'image (image), la voix (voix), la vidéo (vidéo) et les miniatures (pouce) * @return * / public static uploadMediasResult uploadervermediafile (String AccessToken, String Type, String Path) {uploadmediasult result = null; Treemap <string, string> params = new Treemap <> (); Params.put ("Access_token", AccessToken); Params.put ("type", type); try {String json = httpsuploadMediafile (systemconfig.post_method, wechatconfig.upload_forever_media_type_url, params, path); result = jsonUtil.fromjSontring (json, uploadmediasResult.class); } catch (exception e) {e.printStackTrace (); } Retour Résultat; } / ** * Télécharger du matériel permanent (réseau) * * @param AccessToken * @param type * Types de fichiers multimédias, y compris l'image (image), la voix (voix), la vidéo (vidéo) et les miniatures (pouce) * @return * / public static uploadmediasResult uploadForevermedia (String AccessToken, String Type, String Path) {uplowingmediasult result = null; Treemap <string, string> params = new Treemap <> (); Params.put ("Access_token", AccessToken); Params.put ("type", type); try {String json = httpsuploadMedia (systemconfig.post_method, wechatconfig.upload_forever_media_type_url, params, path, 0, 0); result = jsonUtil.fromjSontring (json, uploadmediasResult.class); } catch (exception e) {e.printStackTrace (); } Retour Résultat; }Une attention particulière doit être accordée à l'ajout de matériel vidéo permanent. Lorsque vous téléchargez des documents vidéo, vous devez publier un autre formulaire, avec la description de l'ID, y compris les informations de description du titre du matériel et de l'introduction, et le format de contenu est JSON.
/ ** * Téléchargez le matériel permanent (vidéo) * * @param accessToken * @return * / public static String uploadForeverMeafile (String AccessToken, String Title, String Introduction, String Path) {Treemap <String, String> Params = new Treemap <> (); Params.put ("Access_token", AccessToken); Params.put ("type", "vidéo"); String mediAd = null; try {String json = httpsuploadVideoMediafile (systemconfig.post_method, wechatconfig.upload_forever_media_type_url, params, path, title, introduction); MediaId = JSonutil.FromjSontring (JSON, "Media_id"); } catch (exception e) {e.printStackTrace (); } return mediaD; } / ** * Télécharger du matériel permanent (vidéo, réseau) * * @param AccessToken * @return * / public static string uploadForevermedia (String AccessToken, String Title, String Introduction, String Path) {Treemap <String, String> Params = new Treemap <> (); Params.put ("Access_token", AccessToken); Params.put ("type", "vidéo"); String mediAd = null; try {String json = httpsuploadVideoMedia (systemconfig.post_method, wechatconfig.upload_forever_media_type_url, params, path, title, introduction, 0, 0); MediaId = JSonutil.FromjSontring (JSON, "Media_id"); } catch (exception e) {e.printStackTrace (); } return mediaD; }3. Ajouter des matériaux graphiques permanents
Interface: https://api.weixin.qq.com/cgi-bin/material/add_news?access_token=access_token, veuillez vous référer à la classe UploadNewsMedia entité pour les informations de publication.
Pour les matériaux couramment utilisés, les développeurs peuvent les télécharger sur le serveur WeChat via cette interface et les utiliser en permanence.
1. Une fois le matériel d'image permanent ajouté, il sera retourné au développeur avec une URL. Le développeur peut l'utiliser dans le nom de domaine Tencent (utilisez-le en dehors du nom de domaine Tencent, et l'image sera bloquée).
2. Le nombre total de matériaux enregistrés dans le compte officiel est limité à: La limite supérieure des matériaux graphiques et texte et des matériaux d'image est de 5 000, et d'autres types sont de 1 000.
3. Dans le contenu spécifique des messages graphiques et texte, le backend WeChat filtrera les liens d'image externes, et l'URL de l'image doit être téléchargée via l'interface "Télécharger l'image dans les messages graphiques et texte pour obtenir une interface URL".
4. Les images téléchargées sur l'interface "Télécharger des images dans les messages texte pour obtenir des URL" n'occupent pas la limite de 5 000 images dans la bibliothèque de matériaux du compte officiel. Les images ne prennent en charge que le format JPG / PNG, et la taille doit être inférieure à 1 Mo.
5. Les messages graphiques et texte prennent en charge la possibilité d'insérer votre propre compte et d'autres comptes publics dans le texte principal et ont publié des liens vers l'article.
/ ** * Matériel pour télécharger des messages graphiques et texte permanents * * @param AccessToken * Token autorisé * @param Entity * Image and Message Object * @return * / public static uploadMediasResult uploadNewSmedia (String AccessToken = Null; Treemap <string, string> params = new Treemap <> (); Params.put ("Access_token", AccessToken); // Post Paramètres soumis Treemap <String, liste <uploadNewsmedia >> dataparams = new Treemap <String, list <uploadNewsmedia >> (); dataparams.put ("articles", entité); String data = jsonUtil.tojSontring (dataparams); String json = httprequtil.httpsdefaultExECUTE (SystemConfig.post_method, wechatconfig.upload_forever_news_media_url, params, données); result = jsonUtil.fromjSontring (json, uploadmediasResult.class); Résultat de retour; }4. Téléchargez les images dans le SMS pour obtenir l'URL
Interface: https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=access_token
Les images téléchargées sur cette interface n'occupent pas la limite de 5 000 images dans la bibliothèque matérielle du compte officiel. Les images ne prennent en charge que le format JPG / PNG, et la taille doit être inférieure à 1 Mo. L'URL renvoyée par cette interface est l'URL pour télécharger l'image, qui peut être placée dans des messages texte.
/ ** * Téléchargez l'image dans le SMS pour obtenir l'URL (local) * * @param AccessToken * @param path * @return * / public static String uploadImgmediafile (String AccessToken, String Path) {Treemap <String, String> Params = new Treemap <> (); Params.put ("Access_token", AccessToken); String url = null; try {String json = httpsuploadmediafile (systemconfig.post_method, wechatconfig.upload_img_media_url, params, path); url = jsonutil.fromjsilstring (json, "url"); } catch (exception e) {e.printStackTrace (); } URL de retour; } / ** * Téléchargez l'image dans le message texte pour obtenir l'URL (réseau) * * @param accessToken * @param path * @return * / public static string uploadImgmedia (String AccessToken, String Path) {Treemap <String, String> Params = new Treemap <String, String> (); Params.put ("Access_token", AccessToken); String url = null; try {String json = httpsuploadmedia (systemconfig.post_method, wechatconfig.upload_img_media_url, params, path, 0, 0); url = jsonutil.fromjsilstring (json, "url"); } catch (exception e) {e.printStackTrace (); } URL de retour; }V. Certains outils
Classe de configuration
public static final string upload_img_media_url = "https://api.weixin.qq.com/cgi-bin/media/uploadimg"; public static final string upload_forever_news_media_url = "https://api.weixin.qq.com/cgi-bin/material/add_news"; public static final string upload_temp_media_type_url = "https://api.weixin.qq.com/cgi-bin/media/upload"; public static final string upload_forever_media_type_url = "https://api.weixin.qq.com/cgi-bin/material/add_material";
Télécharger la classe de retour du matériel graphique et texte
package com.phil.wechat.msg.model.media; / ** * Résultats renvoyés en téléchargeant des documents graphiques et texte texte * @author phil * @Date 20 septembre 2017 * * / classe publique UploadMeasResult {Type de chaîne privée; // Types de fichiers multimédias, y compris l'image (image), la voix (voix), la vidéo (vidéo) et la vignette (pouce), le nombre de fois est la nouvelle, c'est-à-dire private string media_id; // Fichier multimédia / identifiant unique obtenu après téléchargement de messages graphiques et de texte private String Created_at; // temps de téléchargement de fichiers multimédias}Télécharger la classe d'entité graphique et texte
package com.phil.wechat.msg.model.media; import java.io.serializable; / ** * Télécharger le message du message graphique Classe d'entité * @Author Phil * @Date 20 septembre 2017 * / Classe publique UploadNewSmedia implémente Serializable {private static final SerialVersionUID = 6551817058101753854L; chaîne privée thumb_media_id; // Media_id de la vignette du message graphique peut obtenir l'auteur de chaîne privée dans l'interface de fichier multimédia de base de support de support; // Auteur du titre de chaîne privée de message graphique; // Titre du message graphique Private String Content_Source_Url; // Cliquez sur le lien pour lire le contenu de chaîne privée de texte d'origine; // Contenu de la page de message graphique prend en charge HTML Tag Private String Digest; // Description du message graphique privé int show_conver_pic; // s'il est affiché comme la couverture 1 signifie qu'il s'affiche car la couverture 0 ne s'affiche pas comme la couverture}Méthode de téléchargement
/ ** * Télécharger le fichier multimédia (local) * * @param méthode * Méthode de la demande Get / Post * @param pathy * API Path * @param Param * API Paramètre * @param mediaPath * Le chemin d'image de l'image / de la musique à télécharger * @return * @throws exception * / String> public static string httpsupThmePath) (String Method, map <String, string; String> Param, param, param, string mediapath) Url url = new URL (setParmas (param, chemin, "")); OutputStream output = null; DatAnputStream inputStream = null; try {file file = new File (mediaPath); if (! file.isfile () ||! file.exists ()) {lancer une nouvelle ioException ("File n'est pas existé"); } HttpurlConnection con = (httpurlconnection) url.openconnection (); con.setDoInput (true); con.setDoOutput (true); con.seTUsecaches (false); con.setRequestMethod (systemConfig.post_method); // Définir les informations d'en-tête de demande Con.SetRequestProperty ("Connexion", "Keep-Alive"); con.setRequestProperty ("charse", systemconfig.default_character_encoding); // Définir la limite limite Boundary = "-----------" + System.CurrentTimemillis (); con.setRequestProperty ("contenu-type", "multipart / form-data; boundary =" + limite); // demande des informations textuelles // partie 1 output = new DataOutputStream (con.getOutputStream ()); Ioutils.write (("-" + limite + "/r/n").getbytes(SystemConfig.default_character_encoding), sortie); Ioutils.write (("Content-Disposition: form-data; name = /" media / "; filename = /" "+ file.getName () +" / "/ r / n") .getBytes (systemConfig.default_character_encoding), output); Ioutils.write ("contenu-type: application / octet-stream / r / n / r / n" .getBytes (systemconfig.default_character_encoding), sortie); // ioutils.write (("contenu-type:" + fileext + "/ r / n / r / n"). GetBytes (), output); // File Body Part // Poussez le fichier dans l'URL en diffusant le fichier inputStream = new DataRainputStream (new FileInputStream (fichier)); Ioutils.copy (inputStream, sortie); // terminant la partie ioutils.write (("/ r / n--" + limite + "- / r / n"). GetBytes (SystemConfig.default_character_encoding), sortie); output.flush (); result = inputStreamToString (con.getInputStream ()); } catch (malformEdUrException e) {e.printStackTrace (); } catch (protocolexception e) {e.printStackTrace (); } catch (ioException e) {lancer une nouvelle ioException ("lire l'erreur de données"); } enfin {ioutils.closequietly (sortie); Ioutils.closequietly (inputStream); } Retour Résultat; } / ** * Télécharger le fichier multimédia (Impossible d'être local) * * @param Méthode * Méthode de demande Get / Post * @param Path * API Path * @param Param * API Paramètre * @param mediapath * Le chemin d'image / musique à télécharger * @param Conntime * Le temps de connexion est par défaut vers 5000 * @param readtime * La chaîne de lecture est par défaut à 5000 * @rernr * HttpsuploadMedia (méthode de chaîne, chemin de chaîne, map <string, string> param, string mediapath, int Conntime, int readtime) lève exception {string result = ""; Url url = new URL (setParmas (param, chemin, "")); OutputStream output = null; BufferedInputStream inputStream = null; essayez {String Boundary = "----"; HttpurlConnection conn = getConnection (méthode, url); Conn.SetConnectTimeout (Conntime == 0? Default_Conntime: Conntime); Conn.SetReadTimeout (readtime == 0? Default_upload_readtime: readtime); Conn.SetRequestProperty ("Content-Type", "Multipart / Form-data; Boundary =" + Boundary); Output = Conn.getOutputStream (); URL MediaUrl = New URL (MediaPath); if (mediaUrl! = null) {httpurlconnection mediaConn = (httpurlconnection) mediaUrl.openconnection (); mediaConn.SetDoOutput (true); mediaConn.setUseCaches (false); MediaConn.SetRequestMethod (SystemConfig.get_Method); MediaConn.SetConnectTimeout (Conntime == 0? Default_Conntime: Conntime); mediaConn.SetReadTimeout (readtime == 0? Default_upload_readtime: readtime); String connType = mediaConn.getContentType (); // Get File Extension String FileExt = GetFileExt (ConnType); Ioutils.write (("-" + limite + "/ r / n"). GetBytes (), sortie); Ioutils.write (("Content-Disposition: form-data; name = /" media / "; filename = /" "+ getFileName (mediapath) +" / "/ r / n"). GetBytes (), output); Ioutils.write (("Content-Type:" + FileExt + "/ r / n / r / n"). GetBytes (), sortie); inputStream = new BufferedInputStream (mediaConn.getInputStream ()); Ioutils.copy (inputStream, sortie); Ioutils.write (("/ r / n ----" + limite + "- / r / n"). GetBytes (), sortie); mediaConn.Disconnect (); // Get Input Stream Result = InputStreamToString (Conn.getInputStream ()); }} catch (malformEdUrException e) {e.printStackTrace (); } catch (protocolexception e) {e.printStackTrace (); } catch (ioException e) {e.printStackTrace (); } enfin {ioutils.closequietly (sortie); Ioutils.closequietly (inputStream); } Retour Résultat; } / ** * Fichier de médias vidéo de téléchargement (local) * * Méthode @param * Méthode de demande Get / Post * @param Path * API Path * @param Param * paramètre API * @param mediaPath * Le chemin du chemin du voide à télécharger * @param titre * title vidéo * @param introduction * Video Description * @return * @throws exception * Public static string htTTSuppup Map <string, string> param, string mediapath, string title, string introduction) lève exception {string result = null; Url url = new URL (setParmas (param, chemin, "")); OutputStream output = null; DatAnputStream inputStream = null; try {file file = new File (mediaPath); if (! file.isfile () ||! file.exists ()) {lancer une nouvelle ioException ("File n'est pas existé"); } HttpurlConnection con = (httpurlconnection) url.openconnection (); con.setDoInput (true); con.setDoOutput (true); con.seTUsecaches (false); con.setRequestMethod (systemConfig.post_method); // Définir les informations d'en-tête de demande Con.SetRequestProperty ("Connexion", "Keep-Alive"); con.setRequestProperty ("charse", systemconfig.default_character_encoding); // Définir la limite limite Boundary = "-----------" + System.CurrentTimemillis (); con.setRequestProperty ("contenu-type", "multipart / form-data; boundary =" + limite); // demande des informations corporelles // Partie 1 Output = new DataOutputStream (con.getOutputStream ()); Ioutils.write (("-" + limite + "/r/n").getbytes(SystemConfig.default_character_encoding), sortie); Ioutils.write (("Content-Disposition: form-data; name = /" media / "; filename = /" "+ file.getName () +" / "/ r / n") .getBytes (), output); Ioutils.write ("contenu-type: vidéo / mp4 / r / n / r / n" .getBytes (), sortie); // File Body Part // Poussez le fichier dans l'URL en diffusant le fichier inputStream = new DataRainputStream (new FileInputStream (fichier)); Ioutils.copy (inputStream, sortie); // terminant la partie ioutils.write (("-" + limite + "/r/n").getbytes(SystemConfig.default_character_encoding), sortie); Ioutils.write ("Content-Disposition: form-data; name = /" Description / "; / r / n / r / n" .getBytes (systemConfig.default_character_encoding), output); Ioutils.write (("{/" title / ": /" "+ title +" / ", /" introduction / ": /" "+ introduction +" / "}") .getBytes (systemconfig.default_character_encoding), output); Ioutils.write (("/ r / n--" + limite + "- / r / n / r / n"). GetBytes (SystemConfig.default_character_encoding), sortie); output.flush (); result = inputStreamToString (con.getInputStream ()); } catch (malformEdUrException e) {e.printStackTrace (); } catch (protocolexception e) {e.printStackTrace (); } catch (ioException e) {lancer une nouvelle ioException ("lire l'erreur de données"); } enfin {ioutils.closequietly (sortie); Ioutils.closequietly (inputStream); } Retour Résultat; } / ** * Télécharger le fichier de médias vidéo (réseau) * * @param Méthode * Méthode de la demande Get / Post * @param Path * API Path * @param Param * paramètre API * @param mediaPath * Le chemin du chemin de la description de la vidéo «@Param Conntime * @param title * @param weartime * Le temps de lecture par défaut * @reTrourt to 5000 * @param lecture Exception * / public static String httpsuploadVideoMedia (méthode de chaîne, chemin de chaîne, map <string, string> param, string mediapath, string title, string introduction, int conntime, int readtime) lève exception {string result = null; Url url = new URL (setParmas (param, chemin, "")); OutputStream output = null; BufferedInputStream inputStream = null; essayez {String Boundary = "----"; HttpurlConnection conn = getConnection (méthode, url); Conn.SetConnectTimeout (Conntime == 0? Default_Conntime: Conntime); Conn.SetReadTimeout (readtime == 0? Default_upload_readtime: readtime); Conn.SetRequestProperty ("Content-Type", "Multipart / Form-data; Boundary =" + Boundary); Output = Conn.getOutputStream (); URL MediaUrl = New URL (MediaPath); if (mediaUrl! = null) {httpurlconnection mediaConn = (httpurlconnection) mediaUrl.openconnection (); mediaConn.SetDoOutput (true); mediaConn.setUseCaches (false); MediaConn.SetRequestMethod (SystemConfig.get_Method); MediaConn.SetConnectTimeout (Conntime == 0? Default_Conntime: Conntime); mediaConn.SetReadTimeout (readtime == 0? Default_upload_readtime: readtime); Ioutils.write (("-" + limite + "/ r / n"). GetBytes (), sortie); Ioutils.write (("Content-Disposition: form-data; name = /" media / "; filename = /" "+ getFileName (mediapath) +" / "/ r / n"). GetBytes (), output); Ioutils.write ("contenu-type: vidéo / mp4 / r / n / r / n" .getBytes (), sortie); inputStream = new BufferedInputStream (mediaConn.getInputStream ()); Ioutils.copy (inputStream, sortie); // terminant la partie ioutils.write (("-" + limite + "/r/n").getbytes(SystemConfig.default_character_encoding), sortie); Ioutils.write ("Content-Disposition: form-data; name = /" Description / "; / r / n / r / n" .getBytes (systemConfig.default_character_encoding), output); Ioutils.write (("{/" title / ": /" "+ title +" / ", /" introduction / ": /" "+ introduction +" / "}") .getBytes (systemconfig.default_character_encoding), output); Ioutils.write (("/ r / n--" + limite + "- / r / n / r / n"). GetBytes (SystemConfig.default_character_encoding), sortie); mediaConn.Disconnect (); // Get Input Stream Result = InputStreamToString (Conn.getInputStream ()); }} catch (malformEdUrException e) {e.printStackTrace (); } catch (protocolexception e) {e.printStackTrace (); } catch (ioException e) {lancer une nouvelle ioException ("lire l'erreur de données"); } enfin {ioutils.closequietly (sortie); Ioutils.closequietly (inputStream); } Retour Résultat; }Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.