Java微信公众平台之群发接口(高级群发)

再次吐槽下,微信素材管理和群发这块文档对Java很不友好,此文需要结合我前文和官方文档

测试号调试群发只需看是否群发消息是否能组装成功,不需要看结果如何(反正不会发送成功的),因为微信还没开放这个功能(估计也不会开放的)。

一、群发说明

在公众平台网站上,为订阅号提供了每天一条的群发权限,为服务号提供每月(自然月)4条的群发权限。

1、对于认证订阅号,群发接口每天可成功调用1次,此次群发可选择发送给全部用户或某个标签;

2、对于认证服务号虽然开发者使用高级群发接口的每日调用限制为100次,但是用户每月只能接收4条,无论在公众平台网站上,还是使用接口群发,用户每月只能接收4条群发消息,多于4条的群发将对该用户发送失败;

3、开发者可以主动设置 clientmsgid 来避免重复推送。

4、群发接口每分钟限制请求60次,超过限制的请求会被拒绝。

5、图文消息正文中插入自己帐号和其他公众号已群发文章链接的能力。

二、群发图文消息过程

1、首先,预先将图文消息中需要用到的图片,使用上传图文消息内图片接口,上传成功并获得图片 URL;参考前文的上传图文消息内的图片获取URL方法
2、上传图文消息素材,需要用到图片时,请使用上一步获取的图片 URL;
3、使用对用户标签的群发,或对 OpenID 列表的群发,将图文消息群发出去,群发时微信会进行原创校验,并返回群发操作结果;
4、在上述过程中,如果需要,还可以预览图文消息、查询群发状态,或删除已群发的消息等。

三、群发图片、文本等其他消息类型的过程

1、如果是群发文本消息,则直接根据下面的接口说明进行群发即可;
2、如果是群发图片、视频等消息,则需要预先通过素材管理接口准备好 mediaID。

四、is_to_all说明

用于设定是否向全部用户发送,值为true或false,选择true该消息群发给所有用户,选择false可根据tag_id发送给指定群组的用户。

五、两种群发方式

根据标签进行群发,订阅号与服务号必须通过认证

接口:https://api.weixin.qq.com/cgi-bin/message/mass/sendall?access_token=ACCESS_TOKEN

根据OpenID列表群发,只适用于认证后的服务号

接口:https://api.weixin.qq.com/cgi-bin/message/mass/send?access_token=ACCESS_TOKEN

post数据可以是图文消息、文本、语音/音频、图片、视频、卡券消息(所有使用到media_id的地方,现在都可以使用素材管理中的永久素材media_id了)

1、图文消息post数据中的media_id需要通过上传图文消息素材接口获取(https://api.weixin.qq.com/cgi-bin/media/uploadnews?access_token=ACCESS_TOKEN)
这个跟素材管理里的新增永久图文素材接口post数据一样,只是接口不一样、返回的json多了一个type和created_at,参考我前文的新增永久图文素材方法
2、语音/音频、图片post数据中的media_id需要通过上传下载多媒体文件接口获得,参考我前文的新增临时/永久素材方法

3、视频post数据中的media_id最麻烦,先得通过上传下载多媒体文件接口获取到media_id(经测试,永久的下一步报错提示无效media_id),然后再通过特别接口再获取到一个media_id,这才是群发所需要的media_id

六、群发示例Controller

@RequestMapping("/sendByOpenid")
public MassMsgResult sendByOpenid() throws Exception {
  // 根据OpenID列表群发图文消息
  String 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";
  UploadMediasResult result2 = HttpReqUtil.uploadTempMedia("phil_token", "image", mediaPath2);
  List<UploadNewsMedia> array = new ArrayList<>();
  UploadNewsMedia entity1 = new UploadNewsMedia();
  entity1.setAuthor("phil");
  entity1.setContent("人生只有经历才会懂得,只有懂得才知道珍惜,一生中,总会有一个人让你笑得最甜,也总会有一个人让你痛得最深,忘记,是善待自己");
  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("心灵鸡汤");
  array.add(entity1);
  UploadNewsMedia entity2 = new UploadNewsMedia();
  entity2.setAuthor("phil");
  entity2.setContent("什么是幸福,幸福就是自己的一种愉快的心理状态和感受。时时、事事都能使自己快乐的人才是最幸福的人。最快乐的人,就是最幸福的人。笑口常开的人,是最幸福的。");
  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(" 经典语录");
  array.add(entity2);
  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 {} " ,result_news.getErrmsg());
  // 根据OpenID列表群发文字消息
  MassMsgResult result_text = wechatMsgService.sendTextToOpenid("phil_token", openids,
  "什么是幸福,幸福就是自己的一种愉快的心理状态和感受。时时、事事都能使自己快乐的人才是最幸福的人。最快乐的人,就是最幸福的人。笑口常开的人,是最幸福的");
  logger.debug(" send by openid msg {} " ,result_text.getErrmsg());
  return null;
}

七、部分用到的类和方法

群发方法

/**
 * 根据标签进行群发文本消息
 * @param accessToken 授权token
 * @param entity 图文消息对象
 * @return
 */
public MassMsgResult sendTextToTag(String accessToken, int tagId, String content){
  MassMsgResult result = null;
  TreeMap<String, String> params = new TreeMap<>();
  params.put("access_token", accessToken);
  // post 提交的参数
  Map<String, Object> filterParams = new HashMap<>();
  filterParams.put("is_to_all", false);
  filterParams.put("tag_id", tagId);
  Map<String, Object> textParams = new HashMap<>();
  textParams.put("content", content);
  TreeMap<String,Object> dataParams = new TreeMap<>();
  dataParams.put("filter", filterParams);
  dataParams.put("text", textParams);
  dataParams.put("msgtype", "text");
  String data = JsonUtil.toJsonString(dataParams);
  String json = HttpReqUtil.HttpsDefaultExecute(SystemConfig.POST_METHOD, WechatConfig.SEND_ALL_MASS_MESSAGE_URL, params, data);
  try {
    result = JsonUtil.fromJsonString(json, MassMsgResult.class);
  } catch (Exception e) {
    e.printStackTrace();
  }
  return result;
} 

/**
 * 根据标签进行群发图文消息
 * @param accessToken 授权token
 * @param tagId 标签
 * @param mediaId uploadMedia方法获得
 * @return
 */
public MassMsgResult sendMpnewsToTag(String accessToken, int tagId, String mediaId){
  MassMsgResult result = null;
  TreeMap<String, String> params = new TreeMap<>();
  params.put("access_token", accessToken);
  // post 提交的参数
  Map<String, Object> filterParams = new HashMap<>();
  filterParams.put("is_to_all", false);
  filterParams.put("tag_id", tagId);
  Map<String, Object> mpnewsParams = new HashMap<>();
  mpnewsParams.put("media_id", mediaId);
  TreeMap<String,Object> dataParams = new TreeMap<>();
  dataParams.put("filter", 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, data);
  try {
    result = JsonUtil.fromJsonString(json, MassMsgResult.class);
  } catch (Exception e) {
    e.printStackTrace();
  }
  return result;
} 

/**
 * 根据标签进行群发图片
 * @param accessToken 授权token
 * @param tagId 标签
 * @param mediaId uploadMedia方法获得
 * @return
 */
public MassMsgResult sendImageToTag(String accessToken, int tagId, String mediaId){
  MassMsgResult result = null;
  TreeMap<String, String> params = new TreeMap<>();
  params.put("access_token", accessToken);
  // post 提交的参数
  Map<String, Object> filterParams = new HashMap<>();
  filterParams.put("is_to_all", false);
  filterParams.put("tag_id", tagId);
  Map<String, Object> imageParams = new HashMap<>();
  imageParams.put("media_id", mediaId);
  TreeMap<String,Object> dataParams = new TreeMap<>();
  dataParams.put("filter", filterParams);
  dataParams.put("image", imageParams);
  dataParams.put("msgtype", "image");
  String data = JsonUtil.toJsonString(dataParams);
  String json = HttpReqUtil.HttpsDefaultExecute(SystemConfig.POST_METHOD, WechatConfig.SEND_ALL_MASS_MESSAGE_URL, params, data);
  try {
    result = JsonUtil.fromJsonString(json, MassMsgResult.class);
  } catch (Exception e) {
    e.printStackTrace();
  }
  return result;
} 

/**
 * 根据标签进行群发语音/音频
 * @param accessToken 授权token
 * @param tagId 标签
 * @param mediaId uploadMedia方法获得
 * @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 提交的参数
  Map<String, Object> filterParams = new HashMap<>();
  filterParams.put("is_to_all", false);
  filterParams.put("tag_id", tagId);
  Map<String, Object> voiceParams = new HashMap<>();
  voiceParams.put("media_id", mediaId);
  TreeMap<String,Object> dataParams = new TreeMap<>();
  dataParams.put("filter", filterParams);
  dataParams.put("voice", voiceParams);
  dataParams.put("msgtype", "voice");
  String data = JsonUtil.toJsonString(dataParams);
  String json = HttpReqUtil.HttpsDefaultExecute(SystemConfig.POST_METHOD, WechatConfig.SEND_ALL_MASS_MESSAGE_URL, params, data);
  try {
    result = JsonUtil.fromJsonString(json, MassMsgResult.class);
  } catch (Exception e) {
    e.printStackTrace();
  }
  return result;
} 

/**
 * 根据标签进行群发视频
 * @param accessToken 授权token
 * @param tagId 标签
 * @param mediaId uploadMedia方法获得
 * @return
 */
public MassMsgResult sendVideoToTag(String accessToken, int tagId, String mediaId){
  MassMsgResult result = null;
  TreeMap<String, String> params = new TreeMap<>();
  params.put("access_token", accessToken);
  // post 提交的参数
  Map<String, Object> filterParams = new HashMap<>();
  filterParams.put("is_to_all", false);
  filterParams.put("tag_id", tagId);
  Map<String, Object> mpvideoParams = new HashMap<>();
  mpvideoParams.put("media_id", mediaId);
  TreeMap<String,Object> dataParams = new TreeMap<>();
  dataParams.put("filter", filterParams);
  dataParams.put("mpvideo", mpvideoParams);
  dataParams.put("msgtype", "mpvideo");
  String data = JsonUtil.toJsonString(dataParams);
  String json = HttpReqUtil.HttpsDefaultExecute(SystemConfig.POST_METHOD, WechatConfig.SEND_ALL_MASS_MESSAGE_URL, params, data);
  try {
    result = JsonUtil.fromJsonString(json, MassMsgResult.class);
  } catch (Exception e) {
    e.printStackTrace();
  }
  return result;
} 

/**
 * 根据标签进行群发卡券
 * @param accessToken 授权token
 * @param tagId 标签
 * @param card_id
 * @return
 */
public MassMsgResult sendWxCardToTag(String accessToken, int tagId, String cardId){
  MassMsgResult result = null;
  TreeMap<String, String> params = new TreeMap<>();
  params.put("access_token", accessToken);
  // post 提交的参数
  Map<String, Object> filterParams = new HashMap<>();
  filterParams.put("is_to_all", false);
  filterParams.put("tag_id", tagId);
  Map<String, Object> wxcardParams = new HashMap<>();
  wxcardParams.put("card_id", cardId);
  TreeMap<String,Object> dataParams = new TreeMap<>();
  dataParams.put("filter", filterParams);
  dataParams.put("wxcard", wxcardParams);
  dataParams.put("msgtype", "wxcard");
  String data = JsonUtil.toJsonString(dataParams);
  String json = HttpReqUtil.HttpsDefaultExecute(SystemConfig.POST_METHOD, WechatConfig.SEND_ALL_MASS_MESSAGE_URL, params, data);
  try {
    result = JsonUtil.fromJsonString(json, MassMsgResult.class);
  } catch (Exception e) {
    e.printStackTrace();
  }
  return result;
} 

/**
 * 根据OpenId进行群发图文消息
 * @param accessToken 授权token
 * @param tagId 标签
 * @param mediaId uploadMedia方法获得
 * @return
 */
public MassMsgResult sendMpnewsToOpenid(String accessToken, List<String> openids, String mediaId){
  MassMsgResult result = null;
  TreeMap<String, String> params = new TreeMap<>();
  params.put("access_token", accessToken);
  // post 提交的参数
  Map<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);
  String data = JsonUtil.toJsonString(dataParams);
  String json = HttpReqUtil.HttpsDefaultExecute(SystemConfig.POST_METHOD, WechatConfig.SEND_MASS_MESSAGE_URL, params, data);
  try {
    result = JsonUtil.fromJsonString(json, MassMsgResult.class);
  } catch (Exception e) {
    e.printStackTrace();
  }
  return result;
} 

/**
 * 根据OpenId进行群发文本消息
 * @param accessToken 授权token
 * @param openids openid
 * @param content
 * @return
 */
public MassMsgResult sendTextToOpenid(String accessToken, List<String> openids, String content){
  MassMsgResult result = null;
  TreeMap<String, String> params = new TreeMap<>();
  params.put("access_token", accessToken);
  // post 提交的参数
  Map<String, Object> textParams = new HashMap<>();
  textParams.put("content", content);
  TreeMap<String,Object> dataParams = new TreeMap<>();
  dataParams.put("touser", openids);
  dataParams.put("text", textParams);
  dataParams.put("msgtype", "text");
  String data = JsonUtil.toJsonString(dataParams);
  System.out.println(data);
  String json = HttpReqUtil.HttpsDefaultExecute(SystemConfig.POST_METHOD, WechatConfig.SEND_MASS_MESSAGE_URL, params, data);
  try {
    result = JsonUtil.fromJsonString(json, MassMsgResult.class);
  } catch (Exception e) {
    e.printStackTrace();
  }
  return result;
} 

/**
 * 根据OpenId进行群发语音消息
 * @param accessToken 授权token
 * @param openids openid
 * @param mediaId
 * @return
 */
public MassMsgResult sendVocieToOpenid(String accessToken, List<String> openids, String mediaId){
  MassMsgResult result = null;
  TreeMap<String, String> params = new TreeMap<>();
  params.put("access_token", accessToken);
  // post 提交的参数
  Map<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", "voice");
  String data = JsonUtil.toJsonString(dataParams);
  System.out.println(data);
  String json = HttpReqUtil.HttpsDefaultExecute(SystemConfig.POST_METHOD, WechatConfig.SEND_MASS_MESSAGE_URL, params, data);
  try {
    result = JsonUtil.fromJsonString(json, MassMsgResult.class);
  } catch (Exception e) {
    e.printStackTrace();
  }
  return result;
} 

/**
 * 根据OpenId进行群发图片消息
 * @param accessToken 授权token
 * @param openids openid
 * @param mediaId
 * @return
 */
public MassMsgResult sendImageToOpenid(String accessToken, List<String> openids, String mediaId){
  MassMsgResult result = null;
  TreeMap<String, String> params = new TreeMap<>();
  params.put("access_token", accessToken);
  // post 提交的参数
  Map<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", "image");
  String data = JsonUtil.toJsonString(dataParams);
  System.out.println(data);
  String json = HttpReqUtil.HttpsDefaultExecute(SystemConfig.POST_METHOD, WechatConfig.SEND_MASS_MESSAGE_URL, params, data);
  try {
    result = JsonUtil.fromJsonString(json, MassMsgResult.class);
  } catch (Exception e) {
    e.printStackTrace();
  }
  return result;
} 

/**
 * 根据OpenId进行群发视频消息
 * @param accessToken 授权token
 * @param openids openid
 * @param mpVideoMedia uploadMediaVideo方法获得media
 * @return
 */
public MassMsgResult sendVideoToOpenid(String accessToken, List<String> openids, MpVideoMedia mpVideoMedia){
  MassMsgResult result = null;
  TreeMap<String, String> params = new TreeMap<>();
  params.put("access_token", accessToken);
  // post 提交的参数
  TreeMap<String,Object> dataParams = new TreeMap<>();
  dataParams.put("touser", openids);
  dataParams.put("mpvideo", mpVideoMedia);
  dataParams.put("msgtype", "mpvideo");
  String data = JsonUtil.toJsonString(dataParams);
  System.out.println(data);
  String json = HttpReqUtil.HttpsDefaultExecute(SystemConfig.POST_METHOD, WechatConfig.SEND_MASS_MESSAGE_URL, params, data);
  try {
    result = JsonUtil.fromJsonString(json, MassMsgResult.class);
  } catch (Exception e) {
    e.printStackTrace();
  }
  return result;
} 

/**
 * 根据OpenId进行群发卡券消息
 * @param accessToken 授权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 提交的参数
  Map<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");
  String data = JsonUtil.toJsonString(dataParams);
  String json = HttpReqUtil.HttpsDefaultExecute(SystemConfig.POST_METHOD, WechatConfig.SEND_MASS_MESSAGE_URL, params, data);
  try {
    result = JsonUtil.fromJsonString(json, MassMsgResult.class);
  } catch (Exception e) {
    e.printStackTrace();
  }
  return result;
}

视频post数据bean

/**
 * 视频post数据bean
 * @author phil
 * @date 2017年9月20日
 *
 */
public class MpVideoMedia {
  private String media_id;
  private String title;
  private String description;
}

获取群发视频post中的media_id

/**
 * 获取群发视频post中的media_id
 *
 * @param accessToken
 * @param uploadVideo
 * @return
 */
public static UploadMediasResult uploadMediaVideo(String accessToken, MpVideoMedia mpVideoMedia) {
  UploadMediasResult result = null;
  TreeMap<String, String> params = new TreeMap<String, String>();
  params.put("access_token", accessToken);
  // post 提交的参数
  String data = JsonUtil.toJsonString(mpVideoMedia);
  String json = HttpReqUtil.HttpsDefaultExecute(SystemConfig.POST_METHOD, WechatConfig.UPLOAD_VIDEO_MEDIA_URL,
      params, data);
  result = JsonUtil.fromJsonString(json, UploadMediasResult.class);
  return result;
}

群发返回的结果

package com.phil.wechat.msg.model.resp; 

import com.phil.wechat.base.result.ResultState; 

/**
 * 群发消息返回的结果
 * 根据OpenID列表群发
 * @author phil
 * @date 2017年7月2日
 *
 */
public class MassMsgResult extends ResultState{  

  private String type; //媒体文件类型,分别有图片(image)、语音(voice)、视频(video)和缩略图(thumb),次数为news,即图文消息
  private String msg_id;
  private String msg_data_id;
}

配置类

// 按分组进行群发
public static final String SEND_ALL_MASS_MESSAGE_URL = "https://api.weixin.qq.com/cgi-bin/message/mass/sendall";
// 按照openid进行群发消息(OpenID最少2个,最多10000个 10000个)
public static final String SEND_MASS_MESSAGE_URL = "https://api.weixin.qq.com/cgi-bin/message/mass/send";
//上传图文消息素材
public static final String UPLOAD_NEWS_MEDIA_URL = "https://api.weixin.qq.com/cgi-bin/media/uploadnews";
//获取群发视频post中的media_id
public static final String UPLOAD_VIDEO_MEDIA_URL = " https://api.weixin.qq.com/cgi-bin/media/uploadvideo";

关于源码,希望帮到了你

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

您可能感兴趣的文章:

  • Java微信公众平台开发(15) 微信JSSDK的使用
  • Java微信公众平台开发(14) 微信web开发者工具使用
  • Java微信公众平台开发(12) 微信用户信息的获取
  • Java微信公众平台开发(10) 微信自定义菜单的创建实现
  • Java微信公众平台开发(9) 关键字回复以及客服接口实现
  • Java微信公众平台开发(8) 多媒体消息回复
  • Java微信公众平台开发(7) 公众平台测试帐号的申请
  • Java微信公众平台开发(5) 文本及图文消息回复的实现
  • Java微信公众平台之素材管理
  • Java微信公众平台之获取地理位置
(0)

相关推荐

  • Java微信公众平台开发(14) 微信web开发者工具使用

    为帮助开发者更方便.更安全地开发和调试基于微信的网页,微信推出了 web 开发者工具.它是一个桌面应用,通过模拟微信客户端的表现,使得开发者可以使用这个工具方便地在 PC 或者 Mac 上进行开发和调试工作.你可以: 使用自己的微信号来调试微信网页授权 调试.检验页面的 JS-SDK 相关功能与权限,模拟大部分 SDK 的输入和输出 使用基于 weinre 的移动调试功能 利用集成的 Chrome DevTools 协助开发 该工具界面主要由几大部分组成,如下图所示: 顶部菜单栏是刷新.后退.选

  • Java微信公众平台开发(8) 多媒体消息回复

    之前我们在做消息回复的时候我们对回复的消息简单做了分类,前面也有讲述如何回复[普通消息类型消息],这里将讲述多媒体消息的回复方法,[多媒体消息]包含回复图片消息/回复语音消息/回复视频消息/回复音乐消息,这里以图片消息的回复为例进行讲解! 还记得之前将消息分类的标准就是一种是不需要上传多媒体资源到腾讯服务器的而另外一种是需要的,所以在这里我们所需要做的第一步就是上传资源到腾讯服务器,这里我们调用[素材管理]接口(后面将会有专门的章节讲述)进行图片的上传,同样的这个接口可以提供我们对语音.视频.音

  • Java微信公众平台之获取地理位置

    本部分需要用到微信的JS-SDK,微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包. 通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照.选图.语音.位置等手机系统的能力,同时可以直接使用微信分享.扫一扫.卡券.支付等微信特有的能力,为微信用户提供更优质的网页体验. 官方文档 一.JS-SDK引入 1.先登录微信公众平台进入"公众号设置"的"功能设置"里填写"JS接口安全域名",和网页授权一样只是个域名. 2

  • Java微信公众平台开发(7) 公众平台测试帐号的申请

    前面几篇一直都在写一些比较基础接口的使用,在这个过程中一直使用的都是我个人微博认证的一个个人账号,原本准备这篇是写[多媒体消息回复]的,后来主要到我个人账号的接口权限不够,所以在这里插入一篇[公众平台测试帐号的申请]的文章,同时也提醒各位开发者一定要注意在开发过程中需要注意接口权限,以防想当然的写完代码才发现接口不能使用,但是同样的我们也可以先预演接口的功能然后再将其应用到实际中! ①登入到微信公众平台,我们到[开发]-->[开发者工具]-->[公众平台测试账号]--进入: 首次进入可能会需要

  • Java微信公众平台开发(15) 微信JSSDK的使用

    在前面的文章中有介绍到我们在微信web开发过程中常常用到的 [微信JSSDK中Config配置] ,但是我们在真正的使用中我们不仅仅只是为了配置Config而已,而是要在我们的项目中真正去使用微信JS-SDK给我们带来便捷,那么这里我们就简述如何在微信web开发中使用必要的方法!微信的JS-SDk中为我们提供的方法很多,这里我有一个简单截图如下: 在上图的提供的所有口中我们可以按照接口实现的难易程度分成两个部分: 较易实现:基础接口.分享接口.设备信息接口.地理位置接口.界面操作接口.微信扫一扫

  • Java微信公众平台之素材管理

    微信素材管理和群发这块文档对Java很不友好.本文只对新增临时素材,新增永久素材做介绍,其余获取.删除.修改自行补充 公众号经常有需要用到一些临时性的多媒体素材的场景,例如在使用接口特别是发送消息时,对多媒体文件.多媒体消息的获取和调用等操作,是通过media_id来进行的.素材管理接口对所有认证的订阅号和服务号开放. 素材的限制 图片(image): 2M,支持PNG\JPEG\JPG\GIF格式 语音(voice):2M,播放长度不超过60s,支持AMR\MP3格式 视频(video):10

  • Java微信公众平台开发(9) 关键字回复以及客服接口实现

    我们在微信公众号的后台可以发现微信给我们制定了两种模式,一种是开发者模式(也就是我们一直在做的开发),还有一种模式是编辑模式,然而很蛋疼的是有些功能一旦我们切换到开发者模式下就无法使用了,比较典型的就是关键字回复以及服务器无响应的时候返回的[服务器无法响应]等问题 ,这里我给出的解决方案是:①对关键字给出关键字回复的代码实现:②[服务器5s无响应]解决方案是接入多客服,以方便我们的消息处理! (一)关键字自动回复 在前面的文章中我们已经完成对消息回复的分类以及实现,这里说的关键字回复只是对消息回

  • Java微信公众平台开发(12) 微信用户信息的获取

    前面的文章有讲到微信的一系列开发文章,包括token获取.菜单创建等,在这一篇将讲述在微信公众平台开发中如何获取微信用户的信息,在上一篇我们有说道微信用户和微信公众账号之间的联系可以通过Openid关联,所以在这里我们就采用openid去获取用户微信信息,并实现一个简单场景应用:当微信新用户关注我们的微信公众平台的时候我们自动回复一篇图文消息,然后在图文消息中标题为:[尊敬的:XXX,你好!],而且在图文消息中的图片就是用户的微信头像,如下图: 有关获取微信用户信息的文档我们可以参照:http:

  • Java微信公众平台开发(5) 文本及图文消息回复的实现

    上篇我们说到回复消息可以根据是否需要上传文件到微信服务器可划分为[普通消息]和[多媒体消息],这里我们来讲述普通消息的回复实现,在消息回复中存在一个关键字段[openid],它是微信用户对于公众号的唯一标识,这里不做过多解释后面将给出时间专门来讲解微信生态中的关键字! (一)回复文本消息 在前面我们已经完成了对消息的分类和回复消息实体的建立,这里回复文本消息需要用到的就是我们的TextMessage,我们把回复文本消息在[文本消息]类型中给出回复!在我们做消息回复的时候需要设置消息的接收人ToU

  • Java微信公众平台开发(10) 微信自定义菜单的创建实现

    自定义菜单这个功能在我们普通的编辑模式下是可以直接在后台编辑的,但是一旦我们进入开发模式之后我们的自定义菜单就需要自己用代码实现,所以对于刚开始接触的人来说可能存在一定的疑惑,这里我说下平时我们在开发模式下常用的两种自定义菜单的实现方式:①不用写实现代码,直接用网页测试工具Post json字符串生成菜单:②就是在我们的开发中用代码实现菜单生成!(参考文档:http://mp.weixin.qq.com/wiki/10/0234e39a2025342c17a7d23595c6b40a.html 

随机推荐