Gostaria de reclamar novamente que o gerenciamento de materiais e a postagem em massa do WeChat não são amigáveis com o Java, e este artigo precisa ser combinado com meu artigo anterior e documentos oficiais.
Ao depurar os números de teste de envio em massa, você só precisa ver se a mensagem de envio em massa pode ser montada com sucesso e não precisa ver o resultado (ela não será enviada de qualquer maneira), porque o WeChat ainda não abriu essa função (provavelmente também não está aberto).
1. Declaração de massa
No site da plataforma pública, as contas de assinatura são fornecidas com uma permissão de envio em massa por dia e as contas de serviço são fornecidas com quatro permissões de envio em massa por mês (mês natural).
1. Para contas de assinatura autenticadas, a interface de envio de massa pode ser chamada com sucesso uma vez por dia. Esse envio em massa pode ser selecionado para enviar a todos os usuários ou a uma determinada tag;
2. Embora as chamadas diárias do desenvolvedor usando a interface de envio de massa avançada sejam limitadas a 100 vezes para contas de serviço de autenticação, os usuários podem receber apenas 4 mensagens por mês. Seja em sites de plataforma pública ou usando interfaces de envio em massa, os usuários podem receber apenas 4 mensagens por mês. Mais de 4 remetentes em massa não enviarão ao usuário;
3. Os desenvolvedores podem definir ativamente o ClientMSGid para evitar empurrões repetidos.
4. A interface de massa limita 60 solicitações por minuto e solicitações que excedam o limite serão negadas.
5. A capacidade de inserir sua própria conta e outras contas públicas nos links de texto e mensagem de texto que foram publicados em um artigo de massa.
2. O processo de envio em massa de mensagens de texto
1. Primeiro, use a interface de imagem na imagem e mensagem de texto de upload para fazer upload com sucesso e obtenha o URL da imagem; Consulte o texto anterior para fazer upload da imagem e mensagem de texto para obter o método URL
2. Ao fazer upload de materiais de mensagem gráfica e de texto, use o URL da imagem obtido na etapa anterior;
3. Use o envio em massa para tags de usuário ou envio em massa de listas OpenID para enviar as mensagens de texto e texto. Durante o envio em massa, o WeChat executará a verificação original e retornará os resultados da operação de envio de massa;
4. No processo acima, se necessário, você também pode visualizar as mensagens gráficas e de texto, consultar o status de envio em massa ou excluir as mensagens de envio em massa etc.
3. O processo de envio de outros tipos de mensagens, como imagens e textos de massa
1. Se for uma mensagem de texto em massa, basta enviá -la diretamente de acordo com as seguintes instruções da interface;
2. Se você estiver enviando mensagens como fotos de massa, vídeos, etc., precisará preparar o MediaId com antecedência através da interface de gerenciamento de materiais.
4. IS_TO_ALL DESCRIÇÃO
Usado para definir se deseja enviar a todos os usuários, o valor é verdadeiro ou falso, selecione TRUE, a mensagem é enviada a todos os usuários do grupo e selecione False para enviar aos usuários no grupo especificado de acordo com tag_id.
5. Dois tipos de métodos de envio de massa
Enviando em massa de acordo com a tag, o número da assinatura e o número de serviço devem ser autenticados
Interface: https://api.weixin.qq.com/cgi-bin/message/mass/sendall?access_token=access_token
O envio em massa de acordo com a Lista OpenID é aplicável apenas a números de serviço certificados
Interface: https://api.weixin.qq.com/cgi-bin/message/mass/send?access_token=access_token
Os dados da postagem podem ser mensagens gráficas, texto, voz/áudio, imagem, vídeo e cupons de cartão (todos os lugares onde media_id são usados, agora você pode usar o material permanente media_id no gerenciamento de materiais)
1. O media_id nos dados postais da mensagem de texto precisa ser obtido através da interface do material da mensagem de texto de texto (https://api.weixin.qq.com/cgi-bin/media/uploadnews?access_token=access_token)
É o mesmo que os dados de postagem da nova interface de material gráfico permanente no gerenciamento de materiais, mas a interface é diferente e o JSON retornado tem um tipo adicional e criou_at. Consulte o método de adicionar material gráfico permanente no meu artigo anterior
2. Media_id em Voice/Audio e Postagem Os dados precisam ser obtidos através do upload e download da interface de arquivo multimídia. Consulte o novo método de material temporário/permanente no meu artigo anterior
3. Media_Id em dados de postagem de vídeo Os dados são os mais problemáticos. Você deve primeiro obter media_id através do upload e baixar interface de arquivo multimídia (após o teste, o prompt de erro permanente da próxima etapa é inválida media_id) e, em seguida, obter um media_id através da interface especial. Este é o Media_ID necessário para o envio em massa.
6. Controlador de amostra a granel
@RequestMapping ("/SendByopenId") public MassMsGresult SendByopeNid () lança Exceção {// Envie uma mensagem de texto em massa de acordo com a lista OpenID String MediaPath1 = "C: /Users/Phil/Pictures/Image/8538572f61d7a94cf0b9fe0f290c290c290c20c20c20c20c20c20c23f20c290c290c290c290c290c290c290c290c290c290c290c290c290c290c290c20cb.bictures/Image/8538572f61d7a944cf0bictures/image/85385720 UPLOPLEMEDIASRESULT result1 = httprequtil.uploadtempmedia ("Phil_token", "Image", MediaPath1); String MediaPath2 = "C: /users/phil/pictures/image/685977abgw1f8xqp46dgyj20qo0zktfi.jpg"; UPLOPLEMEDIASRESULT RESULT2 = httprequil.uploadtempmedia ("Phil_token", "Image", MediaPath2); List <UploadNewsMedia> Array = new ArrayList <> (); UploadNewsMedia entity1 = new UploadNewsMedia (); entity1.setAuthor ("Phil"); entity1.setContent ("A única experiência você pode entender a vida, apenas saber como apreciá -la, só sabe como entender, em sua vida, sempre haverá alguém que faz você rir o mais doce, e sempre haverá alguém que fará você se sentir o mais profundo, esquecer, tratar -se gentil"); entity1.setContent_source_url ("http://blog.csdn.net/phil_jing"); // entity1.setDigest ("Digest"); entity1.setshow_conver_pic (1); entity1.setthumb_media_id (resultado1.getmedia_id ()); entity1.settitle ("sopa de galinha de alma"); Array.add (entidade1); UploadNewsMedia entity2 = new UploadNewsMedia (); entity2.setAuthor ("Phil"); entidade. entity2.setcontent_source_url ("http://www.qq.com"); // entity2.setDigest ("Digest"); entity2.setshow_conver_pic (0); entity2.setthumb_media_id (resultado2.getmedia_id ()); entity2.setTitle ("Classic Quotes"); Array.add (entidade2); UploadmediasResult ur = httprequtil.uploadnewsmedia ("phil_token", array); List <String> OpenIds = new ArrayList <> (); OpenIds.add ("OVHQ5V9-ZSHUcax_ntcqwip-sbcg"); OpenIds.Add ("OVHQ5V6CW3INKWUSCL3OLODIF0CC"); MassMSGRESULT result_News = wechatmsgservice.sendmpnewstoopenId ("Phil_token", OpenIds, ur.getmedia_id ()); Logger.debug ("Send by OpenId msg {}", resultado_news.geterrrsg ()); // Envie uma mensagem de texto com base na lista OpenID MassMsGresult result_text = wechatmsgservice.sendTextToopenId ("Phil_token", OpenIds, "O que é a felicidade? A felicidade é um estado psicológico e o sentimento de si mesmo. Aqueles que podem se tornar felizes o tempo todo e tudo são as pessoas mais felizes. As pessoas mais felizes são as pessoas mais felizes. Logger.debug ("Send by OpenId msg {}", resultado_text.geterrMsg ()); retornar nulo; }7. Algumas das classes e métodos utilizados
Método de envio em massa
/ *** Envie mensagens de texto com base na tag* @param accessToken Token Autorizado* @param entidade de entidade Objeto de mensagem gráfica* @return*/ public MassmsGresult SendTextToTAG (String accessToken, int tagid, String content) {MassmsGresult resultado = null; Treemap <string, string> params = new Treemap <> (); params.put ("access_token", accessToken); // Post Parâmetros enviados mapa <string, object> filterParams = new HashMap <> (); filterparams.put ("is_to_all", false); filterparams.put ("tag_id", tagid); Mapa <string, object> textParams = new Hashmap <> (); textParams.put ("conteúdo", conteúdo); Treemap <string, object> dataParams = new Treemap <> (); DataParams.put ("filtro", filterparams); DataParams.put ("Texto", TextParams); DataParams.put ("msgtype", "text"); Dados da String = jsonutil.tojSonstring (DataParams); String json = httprequtil.httpsdefaultExecute (SystemConfig.Post_Method, wechatconfig.send_all_mass_message_url, params, dados); tente {resultado = jsonutil.FromjSonstring (JSON, MassMsGresult.class); } catch (Exceção e) {e.printStackTrace (); } resultado de retorno; } / ** * Mensagens de texto em massa com base em tags * @param accessToken Autorize token * @param tag tagi * @param mediaid uploadmedia método recebe * @return * / public MassmsGresult SendmpNewStoTag (string accessToken, int tagid, string mediaid) {Massmsult resultado = Null; Treemap <string, string> params = new Treemap <> (); params.put ("access_token", accessToken); // Post Parâmetros enviados mapa <string, object> filterParams = new HashMap <> (); filterparams.put ("is_to_all", false); filterparams.put ("tag_id", tagid); Mapa <string, object> mpnewsparams = new hashmap <> (); mpnewsparams.put ("media_id", mediaId); Treemap <string, object> dataParams = new Treemap <> (); DataParams.put ("filtro", filterparams); DataParams.put ("MPNews", MPNewsParams); DataParams.put ("MSGTYPE", "MPNews"); DataParams.put ("send_ignore_reprint", 0); // string data = jsonutil.tojSonstring (DataParams); String json = httprequtil.httpsdefaultExecute (SystemConfig.Post_Method, wechatconfig.send_all_mass_message_url, params, dados); tente {resultado = jsonutil.FromjSonstring (JSON, MassMsGresult.class); } catch (Exceção e) {e.printStackTrace (); } resultado de retorno; } / ** * imagens em massa com base em tags * @param accessToken Token autorizado * @param tag tagi * @param mediaid uploadmedia me método * @return * / public MassmsGresult sendImageToTAG (string accessToken, int tagid, string mediaId) {Massmsult resultado = null; Treemap <string, string> params = new Treemap <> (); params.put ("access_token", accessToken); // Post Parâmetros enviados mapa <string, object> filterParams = new HashMap <> (); filterparams.put ("is_to_all", false); filterparams.put ("tag_id", tagid); Mapa <string, object> imageParams = new hashmap <> (); imageparams.put ("media_id", mediaId); Treemap <string, object> dataParams = new Treemap <> (); DataParams.put ("filtro", filterparams); DataParams.put ("Image", ImageParams); DataParams.put ("msgtype", "imagem"); Dados da String = jsonutil.tojSonstring (DataParams); String json = httprequtil.httpsdefaultExecute (SystemConfig.Post_Method, wechatconfig.send_all_mass_message_url, params, dados); tente {resultado = jsonutil.FromjSonstring (JSON, MassMsGresult.class); } catch (Exceção e) {e.printStackTrace (); } resultado de retorno; }/** * Voz/áudio em massa com base na tag * @param AccessToken Token autorizado * @param tag tag * @param mediaid uploadmedia método Gets * @return */public MassMsGresult SendVoiceToTag (string accessToken, int tagid, string mediaId) {MassMSGresult Result = Null; Treemap <string, string> params = new Treemap <> (); params.put ("access_token", accessToken); // Post Parâmetros enviados mapa <string, object> filterParams = new HashMap <> (); filterparams.put ("is_to_all", false); filterparams.put ("tag_id", tagid); Mapa <string, objeto> VoiceParams = new Hashmap <> (); VoiceParams.put ("Media_id", MediaId); Treemap <string, object> dataParams = new Treemap <> (); DataParams.put ("filtro", filterparams); DataParams.put ("Voice", VoiceParams); DataParams.put ("msgtype", "voz"); Dados da String = jsonutil.tojSonstring (DataParams); String json = httprequtil.httpsdefaultExecute (SystemConfig.Post_Method, wechatconfig.send_all_mass_message_url, params, dados); tente {resultado = jsonutil.FromjSonstring (JSON, MassMsGresult.class); } catch (Exceção e) {e.printStackTrace (); } resultado de retorno; } / ** * Vídeos em massa com base em tags * @param AccessToken Token autorizado * @param tag tag * @param mediaid uploadmedia método Gets * @return * / public MassmsGresult SendVideoToTAG (string accessToken, int tagid, string mediaId) {Massmsult resultado = Null; Treemap <string, string> params = new Treemap <> (); params.put ("access_token", accessToken); // Post Parâmetros enviados mapa <string, object> filterParams = new HashMap <> (); filterparams.put ("is_to_all", false); filterparams.put ("tag_id", tagid); Mapa <string, objeto> mpvideoparams = new hashmap <> (); mpvideoparams.put ("media_id", mediaid); Treemap <string, object> dataParams = new Treemap <> (); DataParams.put ("filtro", filterparams); DataParams.put ("mpvideo", mpvideoparams); DataParams.put ("msgtype", "mpvideo"); Dados da String = jsonutil.tojSonstring (DataParams); String json = httprequtil.httpsdefaultExecute (SystemConfig.Post_Method, wechatconfig.send_all_mass_message_url, params, dados); tente {resultado = jsonutil.FromjSonstring (JSON, MassMsGresult.class); } catch (Exceção e) {e.printStackTrace (); } resultado de retorno; } / ** * cupons de cartão em massa com base em tags * @param accessToken Autorizado Token * @param tag tag * @param card_id * @return * / public MassMsGresult SendwxCardToTAG (string accessToken, int tagid, string cardid) {Massmsult resultado = null; Treemap <string, string> params = new Treemap <> (); params.put ("access_token", accessToken); // Post Parâmetros enviados mapa <string, object> filterParams = new HashMap <> (); filterparams.put ("is_to_all", false); filterparams.put ("tag_id", tagid); Mapa <string, objeto> wxcardParams = new Hashmap <> (); wxcardParams.put ("card_id", cardid); Treemap <string, object> dataParams = new Treemap <> (); DataParams.put ("filtro", filterparams); DataParams.put ("WXCARD", WXCARDPARAMS); DataParams.put ("msgtype", "wxcard"); Dados da String = jsonutil.tojSonstring (DataParams); String json = httprequtil.httpsdefaultExecute (SystemConfig.Post_Method, wechatconfig.send_all_mass_message_url, params, dados); tente {resultado = jsonutil.FromjSonstring (JSON, MassMsGresult.class); } catch (Exceção e) {e.printStackTrace (); } resultado de retorno; } / ** * Envie mensagens de texto em massa com base no OpenId * @param accessToken Autorizado Token * @param tag tagi * @param MediaId UPLOPLEMEDIA Método Gets * @return * / public MassMsGresult SendmpNewSTopenId (String AccessToken, List <String> OpenIds, String MediaId) {MassMSGSURSULT (String NULL; Treemap <string, string> params = new Treemap <> (); params.put ("access_token", accessToken); // Post Parâmetros enviados mapa <string, object> mpnewsparams = new hashmap <> (); mpnewsparams.put ("media_id", mediaId); Treemap <string, object> dataParams = new Treemap <> (); DataParams.put ("Touser", OpenIds); DataParams.put ("MPNews", MPNewsParams); DataParams.put ("MSGTYPE", "MPNews"); DataParams.put ("send_ignore_reprint", 0); Dados da String = jsonutil.tojSonstring (DataParams); String json = httprequtil.httpsDefaultExecute (SystemConfig.Post_Method, wechatconfig.send_mass_message_url, params, dados); tente {resultado = jsonutil.FromjSonstring (JSON, MassMsGresult.class); } catch (Exceção e) {e.printStackTrace (); } resultado de retorno; } / ** * Mensagens de texto em massa com base no OpenId * @param accessToken Authorization Token * @param OpenIds OpenId * @param Content * @return * / public MassMsGresult SendTextToopenId (String AccessToken, List <String> OpenIds, String Content) {Massmsult resultado = Null; Treemap <string, string> params = new Treemap <> (); params.put ("access_token", accessToken); // Post Parâmetros enviados mapa <string, object> textParams = new HashMap <> (); textParams.put ("conteúdo", conteúdo); Treemap <string, object> dataParams = new Treemap <> (); DataParams.put ("Touser", OpenIds); DataParams.put ("Texto", TextParams); DataParams.put ("msgtype", "text"); Dados da String = jsonutil.tojSonstring (DataParams); System.out.println (dados); String json = httprequtil.httpsDefaultExecute (SystemConfig.Post_Method, wechatconfig.send_mass_message_url, params, dados); tente {resultado = jsonutil.FromjSonstring (JSON, MassMsGresult.class); } catch (Exceção e) {e.printStackTrace (); } resultado de retorno; } / ** * Envie mensagens de voz em massa com base em OpenId * @param accessToken Authorization Token * @param OpenIds OpenId * @param mediaId * @return * / public MassMsGresult SendvocieTopenId (string accessToken, list <string> OpenIds, string mediaId) {Massmsult resultado = Nulk; Treemap <string, string> params = new Treemap <> (); params.put ("access_token", accessToken); // Post Parâmetros enviados mapa <string, object> VoiceParams = new HashMap <> (); VoiceParams.put ("Media_id", MediaId); Treemap <string, object> dataParams = new Treemap <> (); DataParams.put ("Touser", OpenIds); DataParams.put ("Voice", VoiceParams); DataParams.put ("msgtype", "voz"); Dados da String = jsonutil.tojSonstring (DataParams); System.out.println (dados); String json = httprequtil.httpsDefaultExecute (SystemConfig.Post_Method, wechatconfig.send_mass_message_url, params, dados); tente {resultado = jsonutil.FromjSonstring (JSON, MassMsGresult.class); } catch (Exceção e) {e.printStackTrace (); } resultado de retorno; } / ** * Mensagens de imagem em massa com base no OpenId * @param accessToken Token autorizado * @param openIds OpenId * @param mediaId * @return * / public MassMsGresult sendImageTopenId (string accessToken, list <string> OpenIds, string mediaId) {Massmsult Result = Null; Treemap <string, string> params = new Treemap <> (); params.put ("access_token", accessToken); // Post Parâmetros enviados mapa <string, object> imageParams = new HashMap <> (); imageparams.put ("media_id", mediaId); Treemap <string, object> dataParams = new Treemap <> (); DataParams.put ("Touser", OpenIds); DataParams.put ("Image", ImageParams); DataParams.put ("msgtype", "imagem"); Dados da String = jsonutil.tojSonstring (DataParams); System.out.println (dados); String json = httprequtil.httpsDefaultExecute (SystemConfig.Post_Method, wechatconfig.send_mass_message_url, params, dados); tente {resultado = jsonutil.FromjSonstring (JSON, MassMsGresult.class); } catch (Exceção e) {e.printStackTrace (); } resultado de retorno; } / ** * Mensagens de vídeo em massa com base no OpenID * @param accessToken Autorizado Token * @param OpenIds OpenId * @param mpvideomedia uploadmediavideo O método obtém mídia * @return * / public MassMSGRESULTVideoTooToPENID (string accessToken, list <tringIds, mpVideomEd Treemap <string, string> params = new Treemap <> (); params.put ("access_token", accessToken); // POST Parâmetros enviados Treemap <String, Object> DataParams = new Treemap <> (); DataParams.put ("Touser", OpenIds); DataParams.put ("mpvideo", mpvideomedia); DataParams.put ("msgtype", "mpvideo"); Dados da String = jsonutil.tojSonstring (DataParams); System.out.println (dados); String json = httprequtil.httpsDefaultExecute (SystemConfig.Post_Method, wechatconfig.send_mass_message_url, params, dados); tente {resultado = jsonutil.FromjSonstring (JSON, MassMsGresult.class); } catch (Exceção e) {e.printStackTrace (); } resultado de retorno; } / ** * Mensagem de cupom do cartão de massa com base no OpenID * @param accessToken Authorization Token * @param openIds OpenId * @param mediaId * @return * / public MassMsGresult SendwxCardToopenId (string accessToken, list <String> OpenIds, string cardId) {MassmsGresult Result = Null; Treemap <string, string> params = new Treemap <> (); params.put ("access_token", accessToken); // Post Parâmetros enviados mapa <string, object> wxcardParams = new Hashmap <> (); wxcardParams.put ("card_id", cardid); Treemap <string, object> dataParams = new Treemap <> (); DataParams.put ("Touser", OpenIds); DataParams.put ("WXCARD", WXCARDPARAMS); DataParams.put ("msgtype", "wxcard"); Dados da String = jsonutil.tojSonstring (DataParams); String json = httprequtil.httpsDefaultExecute (SystemConfig.Post_Method, wechatconfig.send_mass_message_url, params, dados); tente {resultado = jsonutil.FromjSonstring (JSON, MassMsGresult.class); } catch (Exceção e) {e.printStackTrace (); } resultado de retorno; }Video Post Data Bean
/ ** * Video Post Data Bean * @Author Phil * @Date 20 de setembro de 2017 * */ classe pública mpvideomedia {private string media_id; título de sequência privada; Descrição de String Private; }Obtenha media_id no post de vídeo em massa
/ ** * Obtenha media_id no post do vídeo em massa * * @param accessToken * @param uploadVideo * @return */ public static uploadmediasResult uploadmediaVideo (string accessToken, mpvideomedia mpvideomedia) {uploadmediassult resultado = Null; Treemap <string, string> params = new Treemap <string, string> (); params.put ("access_token", accessToken); // POST Parâmetros enviados String Data = jsonutil.tojSonstring (mpvideomedia); String json = httprequtil.httpsDefaultExecute (SystemConfig.Post_Method, wechatconfig.upload_video_media_url, params, dados); resultado = jsonutil.FromjSonstring (json, uploadmediasResult.class); resultado de retorno; }Resultados retornados pela massa
pacote com.phil.wechat.msg.model.resp; importar com.phil.wechat.base.result.resultstate; / *** Resultado retornado por mensagens em massa* envio em massa de acordo com a lista OpenID* @Author Phil* @Date 2 de julho de 2017**/ public class MassmsGresult estende o resultado estate {private string; // Os tipos de arquivos de mídia incluem imagem (imagem), voz (voz), vídeo (vídeo) e miniatura (polegar) e o número de vezes é notícia, ou seja, mensagens gráficas e de texto private string msg_id; String privada msg_data_id; }Classe de configuração
// Envie a missa pelo grupo public static final string send_all_mass_message_url = "https://api.weixin.qq.com/cgi-bin/message/mass/sendall"; // Envie mensagens em massa de acordo com o OpenID (pelo menos 2 OpenIds, até 10.000 10.000) Public Static Final String send_mass_message_url = "https://api.weixin.qq.com/cgi-bin/message/mass/send"; // Carregar o material gráfico e de mensagem de texto 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" Na postagem de vídeo em massa;
Em relação ao código -fonte, espero que ajude você
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.