个人订阅号有很多接口没有权限,可以申请一个测试账号
申请测试账号
扫码后配置URL和token,并扫码关注测试账号,之后获取所有权限
1.2、其他消息回复
1.2.1 图文消息
图文消息参数
图文消息基本单元实体类
/** 图文消息标题 */ private String Title; /** 图文消息描述 */ private String Description; /** 图片链接,支持JPG、PNG格式,较好的效果为大图360*200,小图200*200 */ private String PicUrl; /** 点击图文消息跳转链接 */ private String Url;
消息基础类
/** 开发者微信号 */ private String ToUserName; /** 发送方帐号(一个OpenID) */ private String FromUserName; /** 消息创建时间 (整型) */ private long CreateTime; /** 值为text表示是文本消息 */ private String MsgType;
图文消息实体类
public class NewsMessage extends BaseMessage { /** 图文消息个数,限制为10条以内 */ private ListArticles; /** 多条图文消息信息,默认第一个item为大图,注意,如果图文数超过10,则将会无响应 */ private Integer ArticleCount;
初始化图文消息
public static String initNewsMessage(String toUserName, String fromUserName) { String message = null; NewsMessage newsMessage = new NewsMessage(); ListnewList = new ArrayList<>(); News news = new News(); news.setDescription("Kobe Bryant 1978年8月23日出生于美国宾夕法尼亚州费城,前美国职业篮球运动员,司职得分后卫/小前锋(锋卫摇摆人),整个NBA生涯(1996年-2016年)一直效力于NBA洛杉矶湖人队,是前美国职业篮球运动员乔·布莱恩特的儿子。"); news.setTitle("Mamba"); news.setPicUrl("../../baike/c0=baike80,5,5,80,26/sign=aea37a7496510fb36c147fc5b85aa3f0/d8f9d72a6059252d9c4429c93c9b033b5ab5b9af.jpg"); news.setUrl("http://baike.baidu.com/subview/16030/16030.htm"); News news2 = new News(); news2.setDescription("这是一部由美国著名黑人导演斯派克·李于上赛季湖人队对阵马刺队西部决赛开始着手拍摄的关于记录科比职业生涯的纪录片。"); news2.setTitle("Kobe doing work"); news2.setPicUrl("../../baike/w=268;g=0/sign=f931f6c1d62a60595210e61c100f53a6/1ad5ad6eddc451da29f516e3b7fd5266d01632b2.jpg"); news2.setUrl("http://www.le.com/ptv/vplay/25119097.html"); newList.add(news); newList.add(news2); newsMessage.setToUserName(fromUserName); newsMessage.setFromUserName(toUserName); newsMessage.setCreateTime(new Date().getTime()); newsMessage.setMsgType(Message.MESSAGE_NEWS.getMsgCode()); newsMessage.setArticles(newList); newsMessage.setArticleCount(newList.size()); return message = newsMessage2xml(newsMessage); }
图片消息需要一个MdiaId
封装图片消息
public static String initImageMessage(String toUserName, String fromUserName) { String filePath = "F:\\其他常用\\images\\beauty.jpg"; ImageBean imageBean = new ImageBean(); try { imageBean.setMediaId(FileUploadUtil.upload4MediaId(filePath, TokenUtil.getToken().getToken(), "image")); } catch (Exception e) { e.printStackTrace(); } ImageMessage message = new ImageMessage(); message.setFromUserName(toUserName); message.setToUserName(fromUserName); message.setCreateTime(new Date().getTime()); message.setMsgType(Message.MESSAGE_IMAGE.getMsgCode()); message.setImage(imageBean); return imageMessage2xml(message); }
与图片消息的回复类似
图片(image): 2M,支持PNG\JPEG\JPG\GIF格式
语音(voice):2M,播放长度不超过60s,支持AMR\MP3格式
视频(video):10MB,支持MP4格式
缩略图(thumb):64KB,支持JPG格式
自测回复失败
2.1 获取access_token接口
菜单类型:
1、click:点击推事件用户点击click类型按钮后,微信服务器会通过消息接口推送消息类型为event的结构给开发者(参考消息接口指南),并且带上按钮中开发者填写的key值,开发者可以通过自定义的key值与用户进行交互; 2、view:跳转URL用户点击view类型按钮后,微信客户端将会打开开发者在按钮中填写的网页URL,可与网页授权获取用户基本信息接口结合,获得用户基本信息。 3、scancode_push:扫码推事件用户点击按钮后,微信客户端将调起扫一扫工具,完成扫码操作后显示扫描结果(如果是URL,将进入URL),且会将扫码的结果传给开发者,开发者可以下发消息。 4、scancode_waitmsg:扫码推事件且弹出“消息接收中”提示框用户点击按钮后,微信客户端将调起扫一扫工具,完成扫码操作后,将扫码的结果传给开发者,同时收起扫一扫工具,然后弹出“消息接收中”提示框,随后可能会收到开发者下发的消息。 5、pic_sysphoto:弹出系统拍照发图用户点击按钮后,微信客户端将调起系统相机,完成拍照操作后,会将拍摄的相片发送给开发者,并推送事件给开发者,同时收起系统相机,随后可能会收到开发者下发的消息。 6、pic_photo_or_album:弹出拍照或者相册发图用户点击按钮后,微信客户端将弹出选择器供用户选择“拍照”或者“从手机相册选择”。用户选择后即走其他两种流程。 7、pic_weixin:弹出微信相册发图器用户点击按钮后,微信客户端将调起微信相册,完成选择操作后,将选择的相片发送给开发者的服务器,并推送事件给开发者,同时收起相册,随后可能会收到开发者下发的消息。 8、location_select:弹出地理位置选择器用户点击按钮后,微信客户端将调起地理位置选择工具,完成选择操作后,将选择的地理位置发送给开发者的服务器,同时收起位置选择工具,随后可能会收到开发者下发的消息。 9、media_id:下发消息(除文本消息)用户点击media_id类型按钮后,微信服务器会将开发者填写的永久素材id对应的素材下发给用户,永久素材类型可以是图片、音频、视频、图文消息。请注意:永久素材id必须是在“素材管理/新增永久素材”接口上传后获得的合法id。 10、view_limited:跳转图文消息URL用户点击view_limited类型按钮后,微信客户端将打开开发者在按钮中填写的永久素材id对应的图文消息URL,永久素材类型只支持图文消息。请注意:永久素材id必须是在“素材管理/新增永久素材”接口上传后获得的合法id。
public static Menu initMenu() { Menu menu = new Menu(); // click类型菜单 ClickButton clickMenu = new ClickButton(); clickMenu.setName(Constants.Menu.MENU_CLICK.getMenuName()); clickMenu.setType(Constants.Menu.MENU_CLICK.getMenuCode()); // 如果有多个click类型的菜单,需通过key值区分 clickMenu.setKey("key_click"); // view类型菜单 ViewButton viewMenu = new ViewButton(); viewMenu.setName(Constants.Menu.MENU_VIEW.getMenuName()); viewMenu.setType(Constants.Menu.MENU_VIEW.getMenuCode()); viewMenu.setUrl("http://me.cztv.com/video-3187806.html"); // 扫描事件 ClickButton scanMenu = new ClickButton(); scanMenu.setName(Constants.Menu.MENU_SCANCODE_PUSH.getMenuName()); scanMenu.setType(Constants.Menu.MENU_SCANCODE_PUSH.getMenuCode()); scanMenu.setKey("key_scan"); // 地理位置类型 ClickButton locationMenu = new ClickButton(); locationMenu.setName(Constants.Menu.MENU_LOCATION.getMenuName()); locationMenu.setType(Constants.Menu.MENU_LOCATION.getMenuCode()); locationMenu.setKey("key_location"); // 给一个主菜单设置子菜单 BaseButton button = new BaseButton(); button.setName("菜单"); button.setSub_button(new BaseButton[] { scanMenu, locationMenu }); // 给菜单设置所有菜单 menu.setButton(new BaseButton[] { clickMenu, viewMenu, button }); return menu; }
发送post请求创建菜单
public static int createMenu(String token, String menu) { int code = 0; String url = Constants.Constant.MENU_URL.getDesc().replace("ACCESS_TOKEN", token); String result = HttpUtil.doPostStr(url, menu); Mapmap = JsonUtil.toMap(result); if (null != map) { code = (int) map.get("errcode"); } return code; }
事件推送的类型:
1 点击菜单拉取消息时的事件推送 2 点击菜单跳转链接时的事件推送 3 scancode_push:扫码推事件的事件推送 4 scancode_waitmsg:扫码推事件且弹出“消息接收中”提示框的事件推送 5 pic_sysphoto:弹出系统拍照发图的事件推送 6 pic_photo_or_album:弹出拍照或者相册发图的事件推送 7 pic_weixin:弹出微信相册发图器的事件推送 8 location_select:弹出地理位置选择器的事件推送