Je voudrais me plaindre à nouveau que la gestion des matériaux WeChat et la publication en masse ne sont pas amicales avec Java, et cet article doit être combiné avec mon article précédent et mes documents officiels.
Lors du débogage des numéros de test d'envoi de masse, il vous suffit de voir si le message d'envoi de masse peut être assemblé avec succès, et vous n'avez pas besoin de voir le résultat (il ne sera pas envoyé de toute façon), car WeChat n'a pas encore ouvert cette fonction (elle n'est probablement pas ouverte non plus).
1. Déclaration de masse
Sur le site Web de la plateforme publique, les comptes d'abonnement sont fournis avec une autorisation d'envoi de masse par jour et les comptes de service sont fournis avec quatre autorisations d'envoi de masse par mois (mois naturel).
1. Pour les comptes d'abonnement authentifiés, l'interface d'envoi de masse peut être appelée avec succès une fois par jour. Cet envoi de masse peut être sélectionné pour envoyer à tous les utilisateurs ou une certaine balise;
2. Bien que les appels quotidiens du développeur utilisant l'interface avancée d'envoi de masse soient limitées à 100 fois pour les comptes de services d'authentification, les utilisateurs ne peuvent recevoir que 4 messages par mois. Que ce soit sur des sites Web de plate-forme publique ou l'utilisation d'interfaces d'envoi de masse, les utilisateurs ne peuvent recevoir que 4 messages par mois. Plus de 4 envoies de masse ne parviendront pas à envoyer à l'utilisateur;
3. Les développeurs peuvent définir activement ClientMSGID pour éviter les poussées répétées.
4. L'interface de masse limite 60 demandes par minute et les demandes dépassant la limite seront refusées.
5. La possibilité d'insérer votre propre compte et d'autres comptes publics dans les liens de texte et de SMS qui ont été publiés dans un article de masse.
2. Le processus de messages texte envoyant de masse
1. Tout d'abord, utilisez l'interface d'image dans l'image de téléchargement et le message texte pour le télécharger avec succès et obtenir l'URL de l'image; Reportez-vous au texte précédent pour télécharger l'image et le message texte pour obtenir la méthode URL
2. Lors du téléchargement de matériaux graphiques et de messages texte, veuillez utiliser l'URL de l'image obtenue à l'étape précédente;
3. Utilisez l'envoi de masse aux balises utilisateur ou l'envoi de masse de listes OpenID pour envoyer le texte et les SMS. Pendant l'envoi de masse, WeChat effectuera une vérification d'origine et renverra les résultats de l'opération d'envoi de masse;
4. Dans le processus ci-dessus, si nécessaire, vous pouvez également prévisualiser les messages graphiques et texte, interroger l'état d'envoi de masse ou supprimer les messages d'envoi de masse, etc.
3. Le processus d'envoi d'autres types de messages tels que des images de masse et des textes
1. S'il s'agit d'un SMS de masse, envoyez-le simplement directement en fonction des instructions d'interface suivantes;
2. Si vous envoyez des messages tels que des images de masse, des vidéos, etc., vous devez préparer à l'avance MediaId via l'interface de gestion des matériaux.
Iv. IS_TO_ALL Description
Utilisé pour définir s'il faut envoyer à tous les utilisateurs, la valeur est vraie ou fausse, sélectionnez True, le message est envoyé à tous les utilisateurs du groupe et sélectionnez Faux à envoyer aux utilisateurs du groupe spécifié selon Tag_ID.
5. Deux types de méthodes d'envoi de masse
Envoi de masse en fonction de la balise, le numéro d'abonnement et le numéro de service doivent être authentifiés
Interface: https://api.weixin.qq.com/cgi-bin/mesage/mass/sendall?access_token=access_token
L'envoi de masse en fonction de la liste OpenID est uniquement applicable aux numéros de service certifiés
Interface: https://api.weixin.qq.com/cgi-bin/mesage/mass/send?access_token=access_token
Les données du post peuvent être des messages graphiques, du texte, de la voix / audio, de l'image, de la vidéo et des messages de coupon de carte (tous les endroits où Media_id sont utilisés, vous pouvez maintenant utiliser le matériel permanent Media_id dans la gestion des matériaux)
1. Le média_id dans les données post-message du message texte doit être obtenu via l'interface de matériel de message texte de téléchargement (https://api.weixin.qq.com/cgi-bin/media/uploadnews?access_token=access_token)
C'est la même chose que les données post-interface du matériau graphique permanente dans la gestion des matériaux, mais l'interface est différente, et le JSON renvoyé a un type supplémentaire et Created_at. Reportez-vous à la méthode d'ajouter du matériel graphique permanent dans mon article précédent
2. Media_id dans les données de la voix / audio et de l'image doivent être obtenues en téléchargeant et téléchargeant l'interface de fichier multimédia. Reportez-vous à la nouvelle méthode de matériel temporaire / permanent dans mon article précédent
3. Media_id dans la publication vidéo Les données sont les plus gênantes. Vous devez d'abord obtenir Media_id via l'interface de fichier multimédia de téléchargement et de téléchargement (après les tests, l'invite d'erreur d'étape suivante permanente est invalide Media_ID), puis obtenir un média_id via l'interface spéciale. Il s'agit du média_id requis pour l'envoi de masse.
6. Contrôleur d'échantillon en vrac
@RequestMapping ("/ sendByOpenID") public Massmsgreult SendByOpenID () lève une exception {// Envoyer un SMS de masse selon la chaîne OpenID List MediaPath1 = "C: /USERS/Phil/Pictures/image/8538572f61d7a94cf0b9fe0f290cdb28.jpg"; UploadMediasResult result1 = httprequtil.uploadTempmedia ("phil_token", "image", mediaPath1); String MediaPath2 = "C: /Users/Phil/Pictures/image/685977ABGW1F8XQP46DGYJ20QO0ZKTFI.jpg"; UploadMeasResult result2 = httprequtil.uploadTempmedia ("phil_token", "image", mediaPath2); List <uploadnewsmedia> array = new ArrayList <> (); UploadNewSMedia Entity1 = new uploadNewSmedia (); Entity1.setAuthor ("Phil"); Entity1.setContent ("seule l'expérience pouvez-vous comprendre la vie, savoir seulement comment la chérir, savoir seulement comment la comprendre, dans votre vie, il y aura toujours quelqu'un qui vous fera rire le plus doux, et il y aura toujours quelqu'un qui vous fera vous sentir le plus profond, oubliant, vous traitant gentiment"); entity1.setContent_source_url ("http://blog.csdn.net/phil_jing"); // entity1.setdigest ("digest"); Entity1.setShow_Conver_Pic (1); entity1.setThumb_media_id (result1.getmedia_id ()); Entity1.settitle ("Soul Chicken Soup"); array.add (entité1); UploadNewSMedia Entity2 = new uploadNewSmedia (); Entity2.setAuthor ("Phil"); Entity2.SetContent ("Qu'est-ce que le bonheur? Le bonheur est un état psychologique heureux et un sentiment de soi. Seuls ceux qui peuvent se rendre heureux à tout moment et en tout sont les personnes les plus heureuses. Les gens les plus heureux sont les personnes les plus heureuses. Les gens qui sourient sont souvent les gens les plus heureux."); entity2.setContent_source_url ("http://www.qq.com"); // entity2.setdigest ("digest"); entity2.setShow_Conver_Pic (0); entity2.setthumb_media_id (result2.getmedia_id ()); entity2.setTitle ("Clétations classiques"); array.add (entité2); UploadMediasResult ur = httprequtil.uploadNewsmedia ("phil_token", array); List <string> openID = new ArrayList <> (); OpenIDS.Add ("OVHQ5V9-ZSHUCAX_NTCQWIP-SBCG"); OpenIDS.Add ("OVHQ5V6CW3INKWUSCL3OLODIF0CC"); Massmsgreult result_news = wechatmsgService.sendMpNewstoopEnid ("phil_token", openID, ur.getmedia_id ()); Logger.debug ("Envoyer par openId msg {}", result_news.getERRMSG ()); // Envoyez un message texte basé sur la liste OpenID Massmsgresult result_text = weChatmsgService.sendTextToopEnid ("phil_token", openID, "Qu'est-ce que le bonheur? Le bonheur est un état psychologique heureux et le sentiment de soi. Ceux qui peuvent rendre les personnes les plus heureuses sont les plus heureuses. Logger.debug ("Envoyer par openId msg {}", result_text.geterRmsg ()); retourner null; }7. Certaines des classes et méthodes utilisées
Méthode d'envoi de masse
/ ** * Envoyer des messages texte basés sur la balise * @param AccessToken Token autorisé * @Param Entity Message Graphic Message Object * @return * / public Massmsgreult SendTextTotag (String AccessToken, int tagid, String Content) {MassMsgreult result = null; Treemap <string, string> params = new Treemap <> (); Params.put ("Access_token", AccessToken); // Post Paramètres soumis Map <String, Object> FilterAms = new HashMap <> (); filterParams.put ("is_to_all", false); filterArams.put ("tag_id", tagid); Map <string, objet> textParams = new HashMap <> (); TextParams.put ("Content", Content); Treemap <String, objet> dataparams = new Treemap <> (); dataparams.put ("filtre", filterams); dataparams.put ("texte", textParams); dataparams.put ("msgtype", "texte"); String data = jsonUtil.tojSontring (dataparams); String json = httprequtil.httpsdefaultExECUTE (SystemConfig.post_method, wechatconfig.send_all_mass_message_url, params, données); try {result = jsonutil.fromjSontring (json, massmsgreult.class); } catch (exception e) {e.printStackTrace (); } Retour Résultat; } / ** * Messages de texte de masse basés sur les balises * @param AccessToken Autoriser le jeton * @param tagid balise * @param mediaId uploadmedia Method get * @return * / public massmsgreult sendMpNewstotag (String AccessToken, int tagid, string mediaId) {massmsgreult result = null; Treemap <string, string> params = new Treemap <> (); Params.put ("Access_token", AccessToken); // Post Paramètres soumis Map <String, Object> FilterAms = new HashMap <> (); filterParams.put ("is_to_all", false); filterArams.put ("tag_id", tagid); Map <string, objet> mpnewsparams = new hashmap <> (); mpnewsparams.put ("media_id", mediaId); Treemap <String, objet> dataparams = new Treemap <> (); dataparams.put ("filtre", filterams); dataparams.put ("mpnews", mpnewsparams); dataparams.put ("msgtype", "mpnews"); dataparams.put ("send_ignore_reprint", 0); // String data = jsonUtil.tojSontring (dataparams); String json = httprequtil.httpsdefaultExECUTE (SystemConfig.post_method, wechatconfig.send_all_mass_message_url, params, données); try {result = jsonutil.fromjSontring (json, massmsgreult.class); } catch (exception e) {e.printStackTrace (); } Retour Résultat; } / ** * Images en vrac basées sur les balises * @param AccessToken Autorisé Token * @param tagid balise * @param mediaId uploadMedia Method Gets * @return * / public massmsgResult SentiMageTotag (String AccessToken, int tagid, string mediaD) {massmsgreult result = null; Treemap <string, string> params = new Treemap <> (); Params.put ("Access_token", AccessToken); // Post Paramètres soumis Map <String, Object> FilterAms = new HashMap <> (); filterParams.put ("is_to_all", false); filterArams.put ("tag_id", tagid); Map <string, objet> imageParams = new HashMap <> (); ImageParams.put ("Media_id", MediaId); Treemap <String, objet> dataparams = new Treemap <> (); dataparams.put ("filtre", filterams); dataparams.put ("image", imageParams); dataparams.put ("msgtype", "image"); String data = jsonUtil.tojSontring (dataparams); String json = httprequtil.httpsdefaultExECUTE (SystemConfig.post_method, wechatconfig.send_all_mass_message_url, params, données); try {result = jsonutil.fromjSontring (json, massmsgreult.class); } catch (exception e) {e.printStackTrace (); } Retour Résultat; } / ** * VOCIE / Audio en vrac basé sur la balise * @param AccessToken Token autorisé * @param tagid tag * @param mediaId uploadmedia méthode obtient * @return * / public massmsgreult sendVoiceTotag (String AccessToken, INT TAGID, string mediaId) {massMsgreult result = null; Treemap <string, string> params = new Treemap <> (); Params.put ("Access_token", AccessToken); // Post Paramètres soumis Map <String, Object> FilterAms = new HashMap <> (); filterParams.put ("is_to_all", false); filterArams.put ("tag_id", tagid); Map <string, object> voixParams = new hashmap <> (); VoiceParams.put ("Media_id", MediaId); Treemap <String, objet> dataparams = new Treemap <> (); dataparams.put ("filtre", filterams); dataparams.put ("Voice", VoiceParams); dataparams.put ("msgtype", "voix"); String data = jsonUtil.tojSontring (dataparams); String json = httprequtil.httpsdefaultExECUTE (SystemConfig.post_method, wechatconfig.send_all_mass_message_url, params, données); try {result = jsonutil.fromjSontring (json, massmsgreult.class); } catch (exception e) {e.printStackTrace (); } Retour Résultat; } / ** * Vidéos en vrac basées sur les balises * @param AccessToken Autorisé Token * @param Tagid Tag * @param mediaId uploadMedia Method Gets * @return * / public massmsgResult SendVideototag (String AccessToken, int tagid, string mediaD) {massmsgResult result = null; Treemap <string, string> params = new Treemap <> (); Params.put ("Access_token", AccessToken); // Post Paramètres soumis Map <String, Object> FilterAms = new HashMap <> (); filterParams.put ("is_to_all", false); filterArams.put ("tag_id", tagid); Map <string, objet> mpVideOparams = new hashmap <> (); mpVideOparams.put ("Media_id", MediaId); Treemap <String, objet> dataparams = new Treemap <> (); dataparams.put ("filtre", filterams); dataparams.put ("mpvideo", mpVideOparams); dataparams.put ("msgtype", "mpVideo"); String data = jsonUtil.tojSontring (dataparams); String json = httprequtil.httpsdefaultExECUTE (SystemConfig.post_method, wechatconfig.send_all_mass_message_url, params, données); try {result = jsonutil.fromjSontring (json, massmsgreult.class); } catch (exception e) {e.printStackTrace (); } Retour Résultat; } / ** * Coupons de carte en vrac basés sur les balises * @param AccessToken Token autorisé * @param tagid tag * @param card_id * @return * / public massmsgreult sendwxcardTotag (String AccessToken, int tagid, String Cardid) {massmsgreult result = null; Treemap <string, string> params = new Treemap <> (); Params.put ("Access_token", AccessToken); // Post Paramètres soumis Map <String, Object> FilterAms = new HashMap <> (); filterParams.put ("is_to_all", false); filterArams.put ("tag_id", tagid); Map <string, objet> wxcardParams = new hashmap <> (); wxcardParams.put ("card_id", cardid); Treemap <String, objet> dataparams = new Treemap <> (); dataparams.put ("filtre", filterams); dataparams.put ("wxcard", wxcardParams); dataparams.put ("msgtype", "wxcard"); String data = jsonUtil.tojSontring (dataparams); String json = httprequtil.httpsdefaultExECUTE (SystemConfig.post_method, wechatconfig.send_all_mass_message_url, params, données); try {result = jsonutil.fromjSontring (json, massmsgreult.class); } catch (exception e) {e.printStackTrace (); } Retour Résultat; } / ** * Envoyer des messages texte de masse basés sur OpenID * @param AccessToken Token autorisé * @param tagid tag * @param mediaId uploadmedia Method Get * @return * / public MassmsgResult sendMpNewstoopEnId (String AccessToken, list <String> openIDS, string mediaD) {massMsgreult result = null; Treemap <string, string> params = new Treemap <> (); Params.put ("Access_token", AccessToken); // post paramètres soumis map <string, objet> mpnewsparams = new hashmap <> (); mpnewsparams.put ("media_id", mediaId); Treemap <String, objet> dataparams = new Treemap <> (); dataparams.put ("Touser", OpenID); dataparams.put ("mpnews", mpnewsparams); dataparams.put ("msgtype", "mpnews"); dataparams.put ("send_ignore_reprint", 0); String data = jsonUtil.tojSontring (dataparams); String json = httprequtil.httpsdefaultExECUTE (SystemConfig.post_method, wechatconfig.send_mass_message_url, params, data); try {result = jsonutil.fromjSontring (json, massmsgreult.class); } catch (exception e) {e.printStackTrace (); } Retour Résultat; } / ** * Messages texte en vrac basés sur OpenID * @param AccessToken Authorization Token * @param openID OpenID * @param Content * @return * / public massmsgreult sendTextToopEnid (String AccessToken, list <String> openIDS, String Content) {massmsgreult result = null; Treemap <string, string> params = new Treemap <> (); Params.put ("Access_token", AccessToken); // Post Paramètres soumis Map <String, objet> textParams = new HashMap <> (); TextParams.put ("Content", Content); Treemap <String, objet> dataparams = new Treemap <> (); dataparams.put ("Touser", OpenID); dataparams.put ("texte", textParams); dataparams.put ("msgtype", "texte"); String data = jsonUtil.tojSontring (dataparams); System.out.println (données); String json = httprequtil.httpsdefaultExECUTE (SystemConfig.post_method, wechatconfig.send_mass_message_url, params, data); try {result = jsonutil.fromjSontring (json, massmsgreult.class); } catch (exception e) {e.printStackTrace (); } Retour Résultat; } / ** * Envoyer des messages vocaux de masse basés sur OpenID * @param AccessToken Authorization Token * @param openID OpenID * @param mediaID * @return * / public massmsgreult SendvocietOoPenID (String AccessToken, list <String> openIDS, String MediaId) {massmsgreult result = null; Treemap <string, string> params = new Treemap <> (); Params.put ("Access_token", AccessToken); // Post Paramètres soumis Map <String, Object> VoiceParams = new HashMap <> (); VoiceParams.put ("Media_id", MediaId); Treemap <String, objet> dataparams = new Treemap <> (); dataparams.put ("Touser", OpenID); dataparams.put ("Voice", VoiceParams); dataparams.put ("msgtype", "voix"); String data = jsonUtil.tojSontring (dataparams); System.out.println (données); String json = httprequtil.httpsdefaultExECUTE (SystemConfig.post_method, wechatconfig.send_mass_message_url, params, data); try {result = jsonutil.fromjSontring (json, massmsgreult.class); } catch (exception e) {e.printStackTrace (); } Retour Résultat; }! Treemap <string, string> params = new Treemap <> (); Params.put ("Access_token", AccessToken); // Post Paramètres soumis Map <String, Object> ImageParams = new HashMap <> (); ImageParams.put ("Media_id", MediaId); Treemap <String, objet> dataparams = new Treemap <> (); dataparams.put ("Touser", OpenID); dataparams.put ("image", imageParams); dataparams.put ("msgtype", "image"); String data = jsonUtil.tojSontring (dataparams); System.out.println (données); String json = httprequtil.httpsdefaultExECUTE (SystemConfig.post_method, wechatconfig.send_mass_message_url, params, data); try {result = jsonutil.fromjSontring (json, massmsgreult.class); } catch (exception e) {e.printStackTrace (); } Retour Résultat; } / ** * Messages vidéo en vrac basés sur OpenID * @param AccessToken Autorisé Token * @param openID OpenID * @param MPVideomedia uploadMediaIvideo Obtient Media * @return * / public massmsgreult SendvideotoPenId (String AccessToken, List <String> OpenIDS, mpvideomedia mpvideomedia) {massgrsgred = null; null; Treemap <string, string> params = new Treemap <> (); Params.put ("Access_token", AccessToken); // Post Paramètres soumis Treemap <String, objet> dataparams = new Treemap <> (); dataparams.put ("Touser", OpenID); dataparams.put ("MPVideo", MPVideoMedia); dataparams.put ("msgtype", "mpVideo"); String data = jsonUtil.tojSontring (dataparams); System.out.println (données); String json = httprequtil.httpsdefaultExECUTE (SystemConfig.post_method, wechatconfig.send_mass_message_url, params, data); try {result = jsonutil.fromjSontring (json, massmsgreult.class); } catch (exception e) {e.printStackTrace (); } Retour Résultat; }! Treemap <string, string> params = new Treemap <> (); Params.put ("Access_token", AccessToken); // Post Paramètres soumis Map <String, Object> wxcardParams = new HashMap <> (); wxcardParams.put ("card_id", cardid); Treemap <String, objet> dataparams = new Treemap <> (); dataparams.put ("Touser", OpenID); dataparams.put ("wxcard", wxcardParams); dataparams.put ("msgtype", "wxcard"); String data = jsonUtil.tojSontring (dataparams); String json = httprequtil.httpsdefaultExECUTE (SystemConfig.post_method, wechatconfig.send_mass_message_url, params, data); try {result = jsonutil.fromjSontring (json, massmsgreult.class); } catch (exception e) {e.printStackTrace (); } Retour Résultat; }Données de publication vidéo Bean
/ ** * VIDEO POST DATA DONNÉE * @Author Phil * @Date 20 septembre 2017 * * / classe publique MPVideoMedia {private String Media_id; titre de chaîne privée; Description de la chaîne privée; }Obtenez Media_id dans le post de la vidéo de masse
/ ** * Obtenez Media_id dans le post de la vidéo de masse * * @param AccessToken * @param uploadVideo * @return * / public static uploadmediasResult uploadMediaKe (String AccessToken, mpVideoMedia mpVideomEdia) {uploadmediasult result = null; Treemap <String, String> Params = new Treemap <String, String> (); Params.put ("Access_token", AccessToken); // Post Paramètres soumis Data String = JSONUtil.tojSontring (MPVideoMedia); String json = httprequtil.httpsdefaultExECUTE (systemConfig.post_method, wechatconfig.upload_video_media_url, params, data); result = jsonUtil.fromjSontring (json, uploadmediasResult.class); Résultat de retour; }Résultats retournés par la messe
package com.phil.wechat.msg.model.resp; import com.phil.wechat.base.result.resultState; / ** * Résultat renvoyé par messages de masse * Envoi en vrac selon la liste OpenID * @author phil * @date 2 juillet 2017 * * / classe publique Massmsgreult étend le résultat {Type de chaîne privée; // Les types de fichiers multimédias incluent l'image (image), la voix (voix), la vidéo (vidéo) et la vignette (pouce), et le nombre de fois est une nouvelle, c'est-à-dire des messages graphiques et de la chaîne privée msg_id; chaîne privée msg_data_id; }Classe de configuration
// Envoyer la masse par groupe publique statique final statique Send_All_Mass_Message_Url = "https://api.weixin.qq.com/cgi-bin/mesage/mass/sendall"; // Envoi des messages de masse selon OpenID (au moins 2 OpenIDS, jusqu'à 10 000 10 000) chaîne finale statique publique Send_Mass_Message_Url = "https://api.weixin.qq.com/cgi-bin/mesage/mass/send"; // Télécharger le matériel graphique et texte public static final string upload_news_media_url = "https://api.weixin.qq.com/cgi-bin/media/uploadnews"; // Get Media_id public static final string upload_video_media_url = "https://api.weixin.qq.com/cgi-bin/media/uploadvideo" dans le post vidéo de masse;
En ce qui concerne le code source, j'espère que cela vous aide
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.