From 2edc00a7b5f00a534278aeb72c23520630096132 Mon Sep 17 00:00:00 2001 From: shitg Date: Fri, 20 May 2016 15:07:57 +0800 Subject: [PATCH] =?UTF-8?q?=E7=B4=A0=E6=9D=90=E7=AE=A1=E7=90=86=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=20API=20=E5=8F=8A=20=E7=9B=B8=E5=85=B3=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E6=96=87=E4=BB=B6=EF=BC=9B=20=E6=96=B0=E5=A2=9E=20Med?= =?UTF-8?q?iaArticle=20=E5=AF=B9=E8=B1=A1=EF=BC=8C=E6=B0=B8=E4=B9=85?= =?UTF-8?q?=E7=B4=A0=E6=9D=90=E5=9B=BE=E6=96=87=E6=B6=88=E6=81=AF=E7=9A=84?= =?UTF-8?q?=20model?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/jfinal/weixin/api/APIConfig.java | 16 ++ .../com/jfinal/weixin/api/MaterialApi.java | 230 ++++++++++++++++++ .../jfinal/weixin/api/model/MediaArticle.java | 25 ++ src/main/resources/wechat_api.properties | 24 +- .../jfinal/weixin/api/MaterialApiTest.java | 171 +++++++++++++ .../com/jfinal/weixin/api/MenuApiTest.java | 4 +- src/test/resources/wechat_api.properties | 24 +- 7 files changed, 491 insertions(+), 3 deletions(-) create mode 100644 src/main/java/com/jfinal/weixin/api/MaterialApi.java create mode 100644 src/main/java/com/jfinal/weixin/api/model/MediaArticle.java create mode 100644 src/test/java/com/jfinal/weixin/api/MaterialApiTest.java diff --git a/src/main/java/com/jfinal/weixin/api/APIConfig.java b/src/main/java/com/jfinal/weixin/api/APIConfig.java index 17631bc..7eeb822 100644 --- a/src/main/java/com/jfinal/weixin/api/APIConfig.java +++ b/src/main/java/com/jfinal/weixin/api/APIConfig.java @@ -97,4 +97,20 @@ public class APIConfig { public final static String WX__USER_TAGS_TAGGING_BATCH = apiProp.get("user.tags.taging.batch"); public final static String WX__USER_TAGS_UNTAGGING_BATCH = apiProp.get("user.tags.untaging.batch"); public final static String WX__USER_TAGS_USER_GET = apiProp.get("user.tags.user.get"); + + /** + * ====================================================== + * ==================== 素材管理 ================== + * ====================================================== + */ + public static final String WX__MEDIA_UPLOAD_TEMP = apiProp.get("media.upload.temp"); + public static final String WX__MEDIA_DOWNLOAD_TEMP = apiProp.get("media.download.temp"); + public static final String WX__MATERAL_NEWS_ADD = apiProp.get("material.news.add"); + public static final String WX__MATERAL_IMG_UPLOAD = apiProp.get("material.img.upload"); + public static final String WX__MATERAL_UPLOAD = apiProp.get("material.upload"); + public static final String WX__MATERAL_GET = apiProp.get("material.get"); + public static final String WX__MATERAL_DEL = apiProp.get("material.del"); + public static final String WX__MATERAL_NEWS_UPDATE = apiProp.get("material.news.update"); + public static final String WX__MATERAL_COUNT_GET = apiProp.get("material.count.get"); + public static final String WX__MATERAL_BATCH_GET = apiProp.get("material.batch.get"); } diff --git a/src/main/java/com/jfinal/weixin/api/MaterialApi.java b/src/main/java/com/jfinal/weixin/api/MaterialApi.java new file mode 100644 index 0000000..915bba9 --- /dev/null +++ b/src/main/java/com/jfinal/weixin/api/MaterialApi.java @@ -0,0 +1,230 @@ +package com.jfinal.weixin.api; + +import com.alibaba.fastjson.JSON; +import com.jfinal.utils.MediaFile; +import com.jfinal.utils.http.HttpUtil; +import com.jfinal.weixin.api.model.MediaArticle; +import com.jfinal.weixin.common.MediaType; + +import java.io.File; +import java.io.InputStream; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 素材管理 api + * 新增,获取临时素材 + * 新增,获取,删除永久素材,获取永久素材总数,列表 + * 多媒体文件有格式和大小限制 + * 图片(image): 1M,支持JPG格式 + * 语音(voice):2M,播放长度不超过60s,支持AMR\MP3格式 + * 视频(video):10MB,支持MP4格式 + * 缩略图(thumb):64KB,支持JPG格式 + * Created by shitiangao on 16/5/20. + */ +public enum MaterialApi { + ice; + + /** + * 上传临时素材 + * 1、对于临时素材,每个素材(media_id)会在开发者上传或粉丝发送到微信服务器3天后自动删除 + * (所以用户发送给开发者的素材,若开发者需要,应尽快下载到本地),以节省服务器资源。 + * 2、media_id是可复用的。 + * 3、素材的格式大小等要求与公众平台官网一致。具体是,图片大小不超过2M,支持bmp/png/jpeg/jpg/gif格式, + * 语音大小不超过5M,长度不超过60秒,支持mp3/wma/wav/amr格式 + * 4、需使用https调用。 + * @param accessToken + * @param mediaType 上传的临时多媒体文件格式 + * @param file 需要上传的文件 + * @return ApiResult + */ + public ApiResult uploadTempMedia(String accessToken, MediaType mediaType, File file) { + String url = APIConfig.WX__MEDIA_UPLOAD_TEMP; + url = url.replace("ACCESS_TOKEN", accessToken).replace("TYPE", mediaType.toString()); + + return ApiResult.create(HttpUtil.upload(url, file, "")); + } + + /** + * 获取临时素材 + * @param mediaId 素材Id + * @return MediaFile + */ + public MediaFile getTempMedia(String accessToken, String mediaId) { + String url = APIConfig.WX__MEDIA_DOWNLOAD_TEMP; + url = url.replace("ACCESS_TOKEN", accessToken).replace("MEDIA_ID", mediaId); + + return HttpUtil.download(url); + } + + /** + * 新增永久素材 + * 永久图片素材新增后,将带有URL返回给开发者, + * 开发者可以在腾讯系域名内使用(腾讯系域名外使用,图片将被屏蔽) + * @param accessToken + * @param list 图文信息列表 + * @return + */ + public ApiResult addMaterialNews(String accessToken, List list) { + String url = APIConfig.WX__MATERAL_NEWS_ADD; + url = url.replace("ACCESS_TOKEN", accessToken); + + Map> postData = new HashMap<>(); + postData.put("articles", list); + + return ApiResult.create(HttpUtil.post(url, JSON.toJSONString(postData))); + } + + /** + * 修改永久图文素材 + * 也可以更新在公众平台官网素材管理模块中保存的图文消息(永久图文素材) + * @param accessToken + * @param mediaId 要修改的图文消息的id + * @param index 要更新的文章在图文消息中的位置(多图文消息时,此字段才有意义),第一篇为0 + * @param article 图文消息对象 + * @return + */ + public ApiResult updateMaterialNews(String accessToken, String mediaId, + Integer index, MediaArticle article) { + String url = APIConfig.WX__MATERAL_NEWS_UPDATE; + url = url.replace("ACCESS_TOKEN", accessToken); + + Map dataMap = new HashMap(); + dataMap.put("media_id", mediaId); + dataMap.put("index", index); + dataMap.put("articles", article); + + return ApiResult.create(HttpUtil.post(url, JSON.toJSONString(dataMap))); + } + + + /** + * 上传图文消息内的图片获取URL + * 本接口所上传的图片不占用公众号的素材库中图片数量的5000个的限制。 + * 图片仅支持jpg/png格式,大小必须在1MB以下。 + * @param accessToken + * @param file + * @return + */ + public ApiResult uploadMaterialImg(String accessToken, File file) { + String url = APIConfig.WX__MATERAL_IMG_UPLOAD; + url = url.replace("ACCESS_TOKEN", accessToken); + + return ApiResult.create(HttpUtil.upload(url, file, "")); + } + + /** + * 新增其他类型永久素材 + * 通过POST表单来调用接口,表单id为media, + * 包含需要上传的素材内容,有filename、filelength、content-type等信息。 + * 注意:图片素材将进入公众平台官网素材管理模块中的默认分组。 + * @param accessToken + * @param mediaType 媒体文件类型,MediaType 图片(image)、语音(voice)、视频(video)和缩略图(thumb) + * @param file + * @return + */ + public ApiResult uploadMaterial(String accessToken, MediaType mediaType, File file) { + String url = APIConfig.WX__MATERAL_UPLOAD; + url = url.replace("ACCESS_TOKEN", accessToken).replace("TYPE", mediaType.toString()); + + return ApiResult.create(HttpUtil.upload(url, file, "")); + } + + /** + * 新增视频类型永久素材 + * 在上传视频素材时需要POST另一个表单,id为description,包含素材的描述信息 + * @param accessToken + * @param file + * @param title 视频素材的标题 + * @param introduction 视频素材的描述 + * @return + */ + public ApiResult addMaterialVideo(String accessToken, File file, String title, String introduction) { + String url = APIConfig.WX__MATERAL_UPLOAD; + url = url.replace("ACCESS_TOKEN", accessToken).replace("TYPE", "video"); + + Map dataMap = new HashMap(); + dataMap.put("title", title); + dataMap.put("introduction", introduction); + + return ApiResult.create(HttpUtil.upload(url, file, JSON.toJSONString(dataMap))); + } + + /** + * 获取永久素材 + * 1、获取永久素材也可以获取公众号在公众平台官网素材管理模块中新建的图文消息、图片、语音、视频等素材 + * (但需要先通过获取素材列表来获知素材的media_id) + * 2、临时素材无法通过本接口获取 + * 3、调用该接口需https协议 + * @param accessToken + * @param mediaId + * @return + * 微信此接口有三种返回, + * 图文消息返回详细内容,视频消息返回属性和下载地址,此两种为 json 消息 + * 其他类型素材返回的是文件 + */ + public InputStream getMaterial(String accessToken, String mediaId) { + String url = APIConfig.WX__MATERAL_GET; + url = url.replace("ACCESS_TOKEN", accessToken); + + Map dataMap = new HashMap(); + dataMap.put("media_id", mediaId); + + return HttpUtil.download(url, JSON.toJSONString(dataMap)); + } + + /** + * 删除永久素材 + * 请谨慎操作本接口,因为它可以删除公众号在公众平台官网素材管理模块中新建的图文消息、语音、视频等素材 + * (但需要先通过获取素材列表来获知素材的media_id) + * @param accessToken + * @param mediaId 要删除的图文消息的id + * @return + */ + public ApiResult delMaterial(String accessToken, String mediaId) { + String url = APIConfig.WX__MATERAL_DEL; + url = url.replace("ACCESS_TOKEN", accessToken); + + Map dataMap = new HashMap(); + dataMap.put("media_id", mediaId); + + return ApiResult.create(HttpUtil.post(url, JSON.toJSONString(dataMap))); + } + + + /** + * 获取素材总数 + * 1.永久素材的总数,也会计算公众平台官网素材管理中的素材 + * 2.图片和图文消息素材(包括单图文和多图文)的总数上限为5000,其他素材的总数上限为1000 + * @param accessToken + * @return + */ + public ApiResult getMaterialCount(String accessToken) { + String url = APIConfig.WX__MATERAL_COUNT_GET; + url = url.replace("ACCESS_TOKEN", accessToken); + + return ApiResult.create(HttpUtil.post(url)); + } + + /** + * 获取素材列表 + * 在新增了永久素材后,开发者可以分类型获取永久素材的列表。 + * @param type 素材的类型 MediaType + * @param offset 从全部素材的该偏移位置开始返回,0表示从第一个素材 返回 + * @param count 返回素材的数量,取值在1到20之间 + * @return + */ + public ApiResult getMaterialBatch(String accessToken, MediaType type, + Integer offset, Integer count) { + String url = APIConfig.WX__MATERAL_BATCH_GET; + url = url.replace("ACCESS_TOKEN", accessToken); + + Map dataMap = new HashMap(); + dataMap.put("type", type.toString()); + dataMap.put("offset", offset); + dataMap.put("count", count); + + return ApiResult.create(HttpUtil.post(url, JSON.toJSONString(dataMap))); + } +} diff --git a/src/main/java/com/jfinal/weixin/api/model/MediaArticle.java b/src/main/java/com/jfinal/weixin/api/model/MediaArticle.java new file mode 100644 index 0000000..94feecc --- /dev/null +++ b/src/main/java/com/jfinal/weixin/api/model/MediaArticle.java @@ -0,0 +1,25 @@ +package com.jfinal.weixin.api.model; + +import lombok.Data; + +/** + * Created by shitiangao on 16/5/20. + */ +@Data +public class MediaArticle { + // 标题 + private String title; + // 图文消息的封面图片素材id(必须是永久mediaID) + private String thumb_media_id; + // 作者 + private String author; + // 图文消息的摘要,仅有单图文消息才有摘要,多图文此处为空 + private String digest; + // 是否显示封面,0为false,即不显示,1为true,即显示 + private boolean show_cover_pic; + // 图文消息的具体内容,支持HTML标签,必须少于2万字符,小于1M,且此处会去除JS + private String content; + // 图文消息的原文地址,即点击“阅读原文”后的URL + private String content_source_url; + +} diff --git a/src/main/resources/wechat_api.properties b/src/main/resources/wechat_api.properties index 45257cf..2bc4ded 100644 --- a/src/main/resources/wechat_api.properties +++ b/src/main/resources/wechat_api.properties @@ -82,4 +82,26 @@ user.tags.taging.batch = https://api.weixin.qq.com/cgi-bin/tags/members/batchtag ## \u6279\u91CF\u4E3A\u7528\u6237\u53D6\u6D88\u6807\u7B7E user.tags.untaging.batch = https://api.weixin.qq.com/cgi-bin/tags/members/batchuntagging?access_token=ACCESS_TOKEN ## \u83B7\u53D6\u7528\u6237\u8EAB\u4E0A\u7684\u6807\u7B7E\u5217\u8868 -user.tags.user.get = https://api.weixin.qq.com/cgi-bin/tags/getidlist?access_token=ACCESS_TOKEN \ No newline at end of file +user.tags.user.get = https://api.weixin.qq.com/cgi-bin/tags/getidlist?access_token=ACCESS_TOKEN + +### ======================== \u7D20\u6750\u7BA1\u7406 ========================= +##\u4E0A\u4F20\u4E34\u65F6\u7D20\u6750 +media.upload.temp = https://api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE +##\u83B7\u5F97\u4E34\u65F6\u7D20\u6750 +media.download.temp = https://api.weixin.qq.com/cgi-bin/media/get?access_token=ACCESS_TOKEN&media_id=MEDIA_ID +##\u65B0\u589E\u6C38\u4E45\u7D20\u6750 +material.news.add = https://api.weixin.qq.com/cgi-bin/material/add_news?access_token=ACCESS_TOKEN +##\u4E0A\u4F20\u6C38\u4E45\u7D20\u6750\u4E2D\u7684\u56FE\u7247 +material.img.upload = https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=ACCESS_TOKEN +##\u4E0A\u4F20\u5176\u4ED6\u7C7B\u6C38\u4E45\u7D20\u6750 +material.upload = https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=ACCESS_TOKEN&type=TYPE +##\u83B7\u53D6\u6C38\u4E45\u7D20\u6750 +material.get = https://api.weixin.qq.com/cgi-bin/material/get_material?access_token=ACCESS_TOKEN +##\u5220\u9664\u6C38\u4E45\u7D20\u6750 +material.del = https://api.weixin.qq.com/cgi-bin/material/del_material?access_token=ACCESS_TOKEN +##\u7F16\u8F91\u6C38\u4E45\u56FE\u6587\u7D20\u6750 +material.news.update = https://api.weixin.qq.com/cgi-bin/material/update_news?access_token=ACCESS_TOKEN +##\u83B7\u53D6\u6C38\u4E45\u7D20\u6750\u7684\u603B\u6570 +material.count.get = https://api.weixin.qq.com/cgi-bin/material/get_materialcount?access_token=ACCESS_TOKEN +##\u83B7\u53D6\u6C38\u4E45\u7D20\u6750\u5217\u8868 +material.batch.get = https://api.weixin.qq.com/cgi-bin/material/batchget_material?access_token=ACCESS_TOKEN \ No newline at end of file diff --git a/src/test/java/com/jfinal/weixin/api/MaterialApiTest.java b/src/test/java/com/jfinal/weixin/api/MaterialApiTest.java new file mode 100644 index 0000000..b491465 --- /dev/null +++ b/src/test/java/com/jfinal/weixin/api/MaterialApiTest.java @@ -0,0 +1,171 @@ +package com.jfinal.weixin.api; + +import com.jfinal.utils.MediaFile; +import com.jfinal.weixin.api.model.MediaArticle; +import com.jfinal.weixin.common.MediaType; +import org.junit.Test; + +import java.io.File; +import java.io.FileOutputStream; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Created by shitiangao on 16/5/20. + */ +public class MaterialApiTest { + + String accessToken = "hObhYZn7rmsgYnk8bxH2W__eQGtfxEMwp7wEh3euguoTa8JgmqIvLdG-L149fGFl9_S-MIoMCVozYxjxLgPDn4ywoI8ZjjlK7sLGRaGNdNn2KC0M87guv43JzkRGX1KZUCDaAEANVW"; + + /** + * 测试上传临时素材: pass + * 2016年05月20日14:53:39 + * @throws Exception + */ + @Test + public void testUploadMedia() throws Exception { + ApiResult res = MaterialApi.ice.uploadTempMedia( + accessToken, MediaType.image, new File("/Users/shitiangao/git/oo.jpg")); + System.out.println(res.getJson()); + + // 返回信息如下 + // {"type":"image","media_id":"UR6maovG-ZLeSjtXbRnjqGyY5kzgg3TFIxzbOv8v8s6EXk3HDwypOa13xXHDqF2k","created_at":1463709720} + } + + /** + * 测试得到临时素材: pass + * 2016年05月20日14:53:46 + * @throws Exception + */ + @Test + public void testGetMedia() throws Exception { + MediaFile media = MaterialApi.ice.getTempMedia(accessToken, "UR6maovG-ZLeSjtXbRnjqGyY5kzgg3TFIxzbOv8v8s6EXk3HDwypOa13xXHDqF2k"); + String filePath = "/Users/shitiangao/qqs.jpg"; + FileOutputStream fos = new FileOutputStream(filePath); + byte[] buf = new byte[1024]; + while(media.getFileStream().read(buf) != -1) { + fos.write(buf); + } + fos.close(); + System.out.println("end"); + } + + /** + * 测试新增图文消息素材的接口: pass + * 2016年05月20日14:53:53 + * @throws Exception + */ + @Test + public void testAddMaterialNews() throws Exception { + Map> postData = new HashMap<>(); + List list = new ArrayList<>(); + + MediaArticle article = new MediaArticle(); + article.setAuthor("天天"); + article.setContent("无聊的你在干嘛"); + article.setContent_source_url("http://u917x3t5kh.proxy.qqbrowser.cc/news/1"); + article.setDigest("摘要消息"); + article.setShow_cover_pic(true); + article.setThumb_media_id("i9RrsyzYgWd8jZBKIIf6LsmCKQDkjBGj8RKoacTFiO4"); + article.setTitle("标题测试"); + + list.add(article); + postData.put("articles", list); +// System.out.println(JSON.toJSONString(postData)); + + ApiResult res = MaterialApi.ice.addMaterialNews(accessToken, list); + System.out.println(res.getJson()); + //{"media_id":"i9RrsyzYgWd8jZBKIIf6LpqDHT-AJMMhl4BISXIY9xg"} + } + + /** + * 测试上传永久素材的接口 + * 2016年05月20日14:54:08 + * @throws Exception + */ + @Test + public void testUploadMaterial() throws Exception { + //上传图片 +// ApiResult res = MaterialApi.ice.uploadMaterialImg(accessToken, new File("/Users/shitiangao/git/tiger.jpg")); +// System.out.println(res.getJson()); + //返回结果 + // oo.jpg + //{"url":"http://mmbiz.qpic.cn/mmbiz/sY4QfB9ibibV2WzdJhreibu6iaZBlZaVg4ibskeg5Q8fWamhia1QAziaM16HCVwIHcJagQFP1UVhO5dbDibme20lX1pddA/0"} + // tiger.jpg + // {"url":"http://mmbiz.qpic.cn/mmbiz/sY4QfB9ibibV2WzdJhreibu6iaZBlZaVg4ibsOBlrXDiaGpgeD052Crnq0qhcy00hMoY7tZdPic10A1wI0LIvyvLiamQvA/0"} + + //通过上传其他素材接口来上传图片 + ApiResult res = MaterialApi.ice.uploadMaterial(accessToken, MediaType.image, new File("/Users/shitiangao/git/tiger.jpg")); + System.out.println(res.getJson()); + //返回 + //{ + // "media_id":"i9RrsyzYgWd8jZBKIIf6LsmCKQDkjBGj8RKoacTFiO4", + // "url":"https://mmbiz.qlogo.cn/mmbiz/sY4QfB9ibibV2WzdJhreibu6iaZBlZaVg4ibsOBlrXDiaGpgeD052Crnq0qhcy00hMoY7tZdPic10A1wI0LIvyvLiamQvA/0?wx_fmt=jpeg" + // } + + } + + /** + * 测试得到永久素材列表接口: pass + * 2016年05月20日14:54:12 + * 测试表明 + * 通过 uploadMaterialImg 接口上传的图片不在得到的结果中; + * 通过 uplaodMaterial 附加类型的接口上传的素材才在得到的结果中, 才有 media_id + */ + @Test + public void testGetMaterialBatch() { + ApiResult res = MaterialApi.ice.getMaterialBatch(accessToken, MediaType.image, 0, 20); + System.out.println(res.getJson()); + //{"item":[],"total_count":0,"item_count":0} + //{ + // "item":[{ + // "media_id":"i9RrsyzYgWd8jZBKIIf6LsmCKQDkjBGj8RKoacTFiO4", + // "name":"tiger.jpg","update_time":1463725122, + // "url":"https://mmbiz.qlogo.cn/mmbiz\/sY4QfB9ibibV2WzdJhreibu6iaZBlZaVg4ibsOBlrXDiaGpgeD052Crnq0qhcy00hMoY7tZdPic10A1wI0LIvyvLiamQvA/0?wx_fmt=jpeg"} + // ],"total_count":1,"item_count":1} + + } + + @Test + public void testDelMaterial() { + ApiResult res = MaterialApi.ice.delMaterial(accessToken, "i9RrsyzYgWd8jZBKIIf6LpqDHT-AJMMhl4BISXIY9xg"); + System.out.println(res.getJson()); + //{"errcode":0,"errmsg":"ok"} + } + + /** + * 测试图文信息更新: pass + * 2016年05月20日14:54:22 + */ + @Test + public void testUpdateMaterial() { + MediaArticle article = new MediaArticle(); + article.setAuthor("1天天"); + article.setContent("1无聊的你在干嘛"); + article.setContent_source_url("http://u917x3t5kh.proxy.qqbrowser.cc/news/1"); + article.setDigest("1摘要消息"); + article.setShow_cover_pic(true); + article.setThumb_media_id("i9RrsyzYgWd8jZBKIIf6LsmCKQDkjBGj8RKoacTFiO4"); + article.setTitle("1标题测试"); + + ApiResult res = MaterialApi.ice.updateMaterialNews(accessToken, "i9RrsyzYgWd8jZBKIIf6LsPyW2b-g0Kkz-tE90IyfpM", 0, article); + // 用删除了的 media_id 试 + // {"errcode":40007,"errmsg":"invalid media_id hint: [g3czya0920e297]"} + // 然后新建一条,再更新 + // {"errcode":0,"errmsg":"ok"} + // 返回成功 + } + + /** + * 测试获取素材总数: pass + * 2016年05月20日14:54:26 + */ + @Test + public void testGetMaterialCount() { + ApiResult res = MaterialApi.ice.getMaterialCount(accessToken); + System.out.println(res.getJson()); + //{"voice_count":0,"video_count":0,"image_count":1,"news_count":1} + } +} \ No newline at end of file diff --git a/src/test/java/com/jfinal/weixin/api/MenuApiTest.java b/src/test/java/com/jfinal/weixin/api/MenuApiTest.java index b4dcea8..c20a998 100644 --- a/src/test/java/com/jfinal/weixin/api/MenuApiTest.java +++ b/src/test/java/com/jfinal/weixin/api/MenuApiTest.java @@ -98,6 +98,7 @@ public class MenuApiTest { */ @Test public void menuAddConditional() { + Menu menu = new Menu(); MenuButton mb01 = new MenuButton(); @@ -107,6 +108,7 @@ public class MenuApiTest { MenuMatchrule rule = new MenuMatchrule(); rule.setSex(1); + rule.setTag_id("102"); menu.setButton(new MenuButton[]{mb01}); menu.setMatchrule(rule); @@ -115,7 +117,7 @@ public class MenuApiTest { System.out.println(JSON.toJSONString(menu, true)); //调用API生成菜单 - ApiResult apiResult = MenuApi.ice.createConditionalMenu(WxTestKit.getAccessToken(), menu.toJSON()); + ApiResult apiResult = MenuApi.ice.createConditionalMenu(token, menu.toJSON()); System.out.println(apiResult.toJSON()); } diff --git a/src/test/resources/wechat_api.properties b/src/test/resources/wechat_api.properties index 45257cf..2bc4ded 100644 --- a/src/test/resources/wechat_api.properties +++ b/src/test/resources/wechat_api.properties @@ -82,4 +82,26 @@ user.tags.taging.batch = https://api.weixin.qq.com/cgi-bin/tags/members/batchtag ## \u6279\u91CF\u4E3A\u7528\u6237\u53D6\u6D88\u6807\u7B7E user.tags.untaging.batch = https://api.weixin.qq.com/cgi-bin/tags/members/batchuntagging?access_token=ACCESS_TOKEN ## \u83B7\u53D6\u7528\u6237\u8EAB\u4E0A\u7684\u6807\u7B7E\u5217\u8868 -user.tags.user.get = https://api.weixin.qq.com/cgi-bin/tags/getidlist?access_token=ACCESS_TOKEN \ No newline at end of file +user.tags.user.get = https://api.weixin.qq.com/cgi-bin/tags/getidlist?access_token=ACCESS_TOKEN + +### ======================== \u7D20\u6750\u7BA1\u7406 ========================= +##\u4E0A\u4F20\u4E34\u65F6\u7D20\u6750 +media.upload.temp = https://api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=TYPE +##\u83B7\u5F97\u4E34\u65F6\u7D20\u6750 +media.download.temp = https://api.weixin.qq.com/cgi-bin/media/get?access_token=ACCESS_TOKEN&media_id=MEDIA_ID +##\u65B0\u589E\u6C38\u4E45\u7D20\u6750 +material.news.add = https://api.weixin.qq.com/cgi-bin/material/add_news?access_token=ACCESS_TOKEN +##\u4E0A\u4F20\u6C38\u4E45\u7D20\u6750\u4E2D\u7684\u56FE\u7247 +material.img.upload = https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=ACCESS_TOKEN +##\u4E0A\u4F20\u5176\u4ED6\u7C7B\u6C38\u4E45\u7D20\u6750 +material.upload = https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=ACCESS_TOKEN&type=TYPE +##\u83B7\u53D6\u6C38\u4E45\u7D20\u6750 +material.get = https://api.weixin.qq.com/cgi-bin/material/get_material?access_token=ACCESS_TOKEN +##\u5220\u9664\u6C38\u4E45\u7D20\u6750 +material.del = https://api.weixin.qq.com/cgi-bin/material/del_material?access_token=ACCESS_TOKEN +##\u7F16\u8F91\u6C38\u4E45\u56FE\u6587\u7D20\u6750 +material.news.update = https://api.weixin.qq.com/cgi-bin/material/update_news?access_token=ACCESS_TOKEN +##\u83B7\u53D6\u6C38\u4E45\u7D20\u6750\u7684\u603B\u6570 +material.count.get = https://api.weixin.qq.com/cgi-bin/material/get_materialcount?access_token=ACCESS_TOKEN +##\u83B7\u53D6\u6C38\u4E45\u7D20\u6750\u5217\u8868 +material.batch.get = https://api.weixin.qq.com/cgi-bin/material/batchget_material?access_token=ACCESS_TOKEN \ No newline at end of file -- Gitee