diff --git a/README.md b/README.md
index d8ce6d44..95ee5e4b 100644
--- a/README.md
+++ b/README.md
@@ -3,12 +3,38 @@ weixin4j
tencent weixin platform java sdk 微信公众平台开发工具包 http://mp.weixin.qq.com/wiki
+功能列表
+-------
+
+* TokenApi token实现API
+
+* MediaApi 上传/下载媒体文件API
+
+* NotifyApi 客服消息API
+
+* MassApi 群发消息API
+
+* UserApi 用户管理API
+
+* GroupApi 分组管理API
+
+* MenuApi 底部菜单API
+
+* QrApi 二维码API
+
+* TmplApi 模板消息API
+
+* HelperApi 辅助API
+
+* netty服务器 & 消息分发
+
+
如何使用
--------
-1.编辑config.properties文件,填入appid/appsecret信息,当然也可通过构造函数传入.
+1.编辑weixin.properties文件,填入appid/appsecret信息,当然也可通过构造函数传入.
-2.实例化一个WeixinProxy对象,如无特别指明appid/appsecret则使用config.properties中的值.
+2.实例化一个WeixinProxy对象,如无特别指明appid/appsecret则使用weixin.properties中的值.
WeixinProxy weixinProxy = new WeixinProxy();
// weixinProxy = new WeixinProxy(appid,appsecret);
@@ -19,18 +45,13 @@ tencent weixin platform java sdk 微信公众平台开发工具包 http://mp.wei
WeixinProxy weixinProxy = new WeixinProxy(new RedisTokenApi());
// weixinProxy = new WeixinProxy(new RedisTokenApi(appid,appsecret));
-4.mvn package.
+4.mvn package,得到一个zip的压缩包,解压到启动目录(见src/main/startup.sh/APP_HOME)
-注意事项
---------
-> 为了避免引入到工程造成config.properties配置文件的冲突
-
-> 暂且把其放在WeixinProxy类同一目录下,package时会一起打入jar包
-
-> 如果不想使用这种方式可以去掉pom.xml的resources节点最后一个子节点
-
-> 并修改src/main/java/com/foxinmy/weixin4j/util/ConfigUtil类相关代码以便正确获取api的uri.
+5.启动netty服务
+ com.foxinmy.weixin4j.server.WeixinServiceBootstrap
+ sh startup.sh start
+
更新LOG
-------
2014-10-27
diff --git a/pom.xml b/pom.xml
index c3da8610..e2c16f26 100644
--- a/pom.xml
+++ b/pom.xml
@@ -47,22 +47,6 @@
-
-
- src/main/resources
-
- logback.xml
-
-
-
- src/main/java
-
- **/*.properties
- **/error.xml
- **/README.md
-
-
-
weixin4j
diff --git a/src/main/java/com/foxinmy/weixin4j/WeixinProxy.java b/src/main/java/com/foxinmy/weixin4j/WeixinProxy.java
index 72e75ba6..84104082 100644
--- a/src/main/java/com/foxinmy/weixin4j/WeixinProxy.java
+++ b/src/main/java/com/foxinmy/weixin4j/WeixinProxy.java
@@ -6,6 +6,7 @@ import java.util.List;
import com.alibaba.fastjson.JSONObject;
import com.foxinmy.weixin4j.api.GroupApi;
+import com.foxinmy.weixin4j.api.HelperApi;
import com.foxinmy.weixin4j.api.MassApi;
import com.foxinmy.weixin4j.api.MediaApi;
import com.foxinmy.weixin4j.api.MenuApi;
@@ -49,6 +50,7 @@ public class WeixinProxy {
private final MenuApi menuApi;
private final QrApi qrApi;
private final TmplApi tmplApi;
+ private final HelperApi helperApi;
/**
* 默认采用文件存放Token跟配置文件中的appi信息
@@ -76,6 +78,7 @@ public class WeixinProxy {
this.menuApi = new MenuApi(tokenApi);
this.qrApi = new QrApi(tokenApi);
this.tmplApi = new TmplApi(tokenApi);
+ this.helperApi = new HelperApi(tokenApi);
}
/**
@@ -91,10 +94,11 @@ public class WeixinProxy {
* 媒体类型
* @return 上传到微信服务器返回的媒体标识
* @throws WeixinException
- * @throws IOException
+ * @throws IOException
* @see 上传下载说明
* @see com.foxinmy.weixin4j.type.MediaType
+ * @see com.foxinmy.weixin4j.api.MediaApi
*/
public String uploadMedia(File file, MediaType mediaType)
throws WeixinException, IOException {
@@ -110,6 +114,7 @@ public class WeixinProxy {
* 媒体类型
* @return 上传到微信服务器返回的媒体标识
* @throws WeixinException
+ * @see com.foxinmy.weixin4j.api.MediaApi
* @see {@link com.foxinmy.weixin4j.WeixinProxy#uploadMedia(File, MediaType)}
*/
public String uploadMedia(String fileName, byte[] data, MediaType mediaType)
@@ -129,10 +134,11 @@ public class WeixinProxy {
* 媒体类型
* @return 写入硬盘后的文件对象
* @throws WeixinException
- * @throws IOException
+ * @throws IOException
* @see 上传下载说明
* @see com.foxinmy.weixin4j.type.MediaType
+ * @see com.foxinmy.weixin4j.api.MediaApi
*/
public File downloadMedia(String mediaId, MediaType mediaType)
throws WeixinException, IOException {
@@ -146,6 +152,7 @@ public class WeixinProxy {
* @param mediaType
* @return 二进制数据包
* @throws WeixinException
+ * @see com.foxinmy.weixin4j.api.MediaApi
* @see {@link com.foxinmy.weixin4j.WeixinProxy#downloadMedia(String, MediaType)}
*/
public byte[] downloadMediaData(String mediaId, MediaType mediaType)
@@ -167,6 +174,7 @@ public class WeixinProxy {
* @see com.foxinmy.weixin4j.msg.notify.VideoNotify
* @see com.foxinmy.weixin4j.msg.notify.VoiceNotify
* @see com.foxinmy.weixin4j.msg.notify.ArticleNotify
+ * @see com.foxinmy.weixin4j.api.NotifyApi
*/
public BaseResult sendNotify(BaseNotify notify) throws WeixinException {
return notifyApi.sendNotify(notify);
@@ -183,6 +191,7 @@ public class WeixinProxy {
* @throws WeixinException
* @see com.foxinmy.weixin4j.msg.model.Article
* @see com.foxinmy.weixin4j.msg.notify.ArticleNotify
+ * @see com.foxinmy.weixin4j.api.NotifyApi
*/
public BaseResult sendNotify(String touser, List articles)
throws WeixinException {
@@ -203,6 +212,7 @@ public class WeixinProxy {
* @see com.foxinmy.weixin4j.msg.model.Music
* @see com.foxinmy.weixin4j.msg.model.Video
* @see com.foxinmy.weixin4j.msg.model.Voice
+ * @see com.foxinmy.weixin4j.api.NotifyApi
*/
public BaseResult sendNotify(String touser, BaseMsg baseMsg)
throws WeixinException {
@@ -224,6 +234,7 @@ public class WeixinProxy {
* 查询第几页 从1开始
* @throws WeixinException
* @see com.foxinmy.weixin4j.model.CustomRecord
+ * @see com.foxinmy.weixin4j.api.NotifyApi
* @see 查询客服聊天记录
*/
@@ -245,6 +256,7 @@ public class WeixinProxy {
* @see 上传图文消息
* @see com.foxinmy.weixin4j.model.MpArticle
+ * @see com.foxinmy.weixin4j.api.MassApi
*/
public String uploadArticle(List articles)
throws WeixinException {
@@ -262,8 +274,10 @@ public class WeixinProxy {
* 描述 可为空
* @return 上传后的ID
* @throws WeixinException
+ *
* @see 高级群发
+ * @see com.foxinmy.weixin4j.api.MassApi
* @see {@link com.foxinmy.weixin4j.api.MediaApi#uploadMedia(File, MediaType)}
*/
public String uploadVideo(String mediaId, String title, String desc)
@@ -284,6 +298,7 @@ public class WeixinProxy {
* @throws WeixinException
* @see com.foxinmy.weixin4j.model.Group
* @see com.foxinmy.weixin4j.type.MediaType
+ * @see com.foxinmy.weixin4j.api.MassApi
* @see {@link com.foxinmy.weixin4j.api.MediaApi#uploadMedia(File, MediaType)}
* @see {@link com.foxinmy.weixin4j.api.GroupApi#getGroupByOpenId(String)}
* @see {@link com.foxinmy.weixin4j.api.GroupApi#getGroups()}
@@ -304,6 +319,7 @@ public class WeixinProxy {
* @throws WeixinException
* @see com.foxinmy.weixin4j.model.MpArticle
* @see com.foxinmy.weixin4j.model.Group
+ * @see com.foxinmy.weixin4j.api.MassApi
* @see {@link com.foxinmy.weixin4j.api.MediaApi#uploadMedia(File, MediaType)}
* @see {@link com.foxinmy.weixin4j.api.MassApi#uploadNews(List)}
* @see {@link com.foxinmy.weixin4j.WeixinProxy#massByGroup(String,MediaType,String)}
@@ -326,6 +342,7 @@ public class WeixinProxy {
* @throws WeixinException
* @see com.foxinmy.weixin4j.model.User
* @see com.foxinmy.weixin4j.type.MediaType
+ * @see com.foxinmy.weixin4j.api.MassApi
* @see {@link com.foxinmy.weixin4j.api.MediaApi#uploadMedia(File, MediaType)}
* @see {@link com.foxinmy.weixin4j.WeixinProxy#massByOpenIds(JSONObject,String...)}
*/
@@ -345,6 +362,7 @@ public class WeixinProxy {
* @throws WeixinException
* @see com.foxinmy.weixin4j.model.MpArticle
* @see com.foxinmy.weixin4j.model.User
+ * @see com.foxinmy.weixin4j.api.MassApi
* @see {@link com.foxinmy.weixin4j.api.MediaApi#uploadMedia(File, MediaType)}
* @see {@link com.foxinmy.weixin4j.api.MediaApi#uploadNews(List)}
* @see {@link com.foxinmy.weixin4j.WeixinProxy#massByOpenIds(String,MediaType,String...)}
@@ -365,6 +383,7 @@ public class WeixinProxy {
* @throws WeixinException
* @see 删除群发
+ * @see com.foxinmy.weixin4j.api.MassApi
* @see {@link com.foxinmy.weixin4j.WeixinProxy#massByGroup(JSONObject, String)}
* @see {@link com.foxinmy.weixin4j.WeixinProxy#massByOpenIds(JSONObject, String...)
*/
@@ -382,6 +401,7 @@ public class WeixinProxy {
* @see 获取用户token
* @see com.foxinmy.weixin4j.model.UserToken
+ * @see com.foxinmy.weixin4j.api.UserApi
*/
public UserToken getAccessToken(String code) throws WeixinException {
return userApi.getAccessToken(code);
@@ -398,7 +418,8 @@ public class WeixinProxy {
* href="http://mp.weixin.qq.com/wiki/index.php?title=%E7%BD%91%E9%A1%B5%E6%8E%88%E6%9D%83%E8%8E%B7%E5%8F%96%E7%94%A8%E6%88%B7%E5%9F%BA%E6%9C%AC%E4%BF%A1%E6%81%AF#.E7.AC.AC.E5.9B.9B.E6.AD.A5.EF.BC.9A.E6.8B.89.E5.8F.96.E7.94.A8.E6.88.B7.E4.BF.A1.E6.81.AF.28.E9.9C.80scope.E4.B8.BA_snsapi_userinfo.29">拉取用户信息
* @see com.foxinmy.weixin4j.model.User
* @see com.foxinmy.weixin4j.model.UserToken
- * {@link com.foxinmy.weixin4j.WeixinProxy#getAccessToken(String)}
+ * @see com.foxinmy.weixin4j.api.UserApi
+ * @see {@link com.foxinmy.weixin4j.WeixinProxy#getAccessToken(String)}
*/
public User getUser(UserToken token) throws WeixinException {
return userApi.getUser(token);
@@ -418,6 +439,7 @@ public class WeixinProxy {
* @see 获取用户信息
* @see com.foxinmy.weixin4j.model.User
+ * @see com.foxinmy.weixin4j.api.UserApi
*/
public User getUser(String openId) throws WeixinException {
return userApi.getUser(openId);
@@ -433,6 +455,7 @@ public class WeixinProxy {
* @see 获取关注者列表
* @see com.foxinmy.weixin4j.model.Following
+ * @see com.foxinmy.weixin4j.api.UserApi
*/
public Following getFollowing(String nextOpenId) throws WeixinException {
return userApi.getFollowing(nextOpenId);
@@ -450,7 +473,8 @@ public class WeixinProxy {
* @see 获取关注者列表
* @see com.foxinmy.weixin4j.model.Following
- * @see com.foxinmy.weixin4j.WeixinProxy#getFollowing(String)
+ * @see com.foxinmy.weixin4j.api.UserApi
+ * @see {@link com.foxinmy.weixin4j.WeixinProxy#getFollowing(String)}
*/
public List getAllFollowing() throws WeixinException {
return userApi.getAllFollowing();
@@ -466,6 +490,7 @@ public class WeixinProxy {
* @throws WeixinException
* @see 设置用户备注名
+ * @see com.foxinmy.weixin4j.api.UserApi
*/
public BaseResult remarkUserName(String openId, String remark)
throws WeixinException {
@@ -483,6 +508,7 @@ public class WeixinProxy {
* href="http://mp.weixin.qq.com/wiki/index.php?title=%E5%88%86%E7%BB%84%E7%AE%A1%E7%90%86%E6%8E%A5%E5%8F%A3#.E5.88.9B.E5.BB.BA.E5.88.86.E7.BB.84">创建分组
* @see com.foxinmy.weixin4j.model.Group
* @see com.foxinmy.weixin4j.model.Group#toCreateJson()
+ * @see com.foxinmy.weixin4j.api.GroupApi
*/
public Group createGroup(String name) throws WeixinException {
return groupApi.createGroup(name);
@@ -496,6 +522,7 @@ public class WeixinProxy {
* @see 查询所有分组
* @see com.foxinmy.weixin4j.model.Group
+ * @see com.foxinmy.weixin4j.api.GroupApi
*/
public List getGroups() throws WeixinException {
return groupApi.getGroups();
@@ -511,6 +538,7 @@ public class WeixinProxy {
* @see 查询用户所在分组
* @see com.foxinmy.weixin4j.model.Group
+ * @see com.foxinmy.weixin4j.api.GroupApi
*/
public int getGroupByOpenId(String openId) throws WeixinException {
return groupApi.getGroupByOpenId(openId);
@@ -528,6 +556,7 @@ public class WeixinProxy {
* href="http://mp.weixin.qq.com/wiki/index.php?title=%E5%88%86%E7%BB%84%E7%AE%A1%E7%90%86%E6%8E%A5%E5%8F%A3#.E4.BF.AE.E6.94.B9.E5.88.86.E7.BB.84.E5.90.8D">修改分组名
* @see com.foxinmy.weixin4j.model.Group
* @see com.foxinmy.weixin4j.model.Group#toModifyJson()
+ * @see com.foxinmy.weixin4j.api.GroupApi
*/
public BaseResult modifyGroup(int groupId, String name)
throws WeixinException {
@@ -545,6 +574,7 @@ public class WeixinProxy {
* @see 移动分组
* @see com.foxinmy.weixin4j.model.Group
+ * @see com.foxinmy.weixin4j.api.GroupApi
*/
public BaseResult moveGroup(String openId, int groupId)
throws WeixinException {
@@ -560,6 +590,7 @@ public class WeixinProxy {
* href="http://mp.weixin.qq.com/wiki/index.php?title=%E8%87%AA%E5%AE%9A%E4%B9%89%E8%8F%9C%E5%8D%95%E5%88%9B%E5%BB%BA%E6%8E%A5%E5%8F%A3">创建自定义菜单
* @see com.foxinmy.weixin4j.model.Button
* @see com.foxinmy.weixin4j.type.ButtonType
+ * @see com.foxinmy.weixin4j.api.MenuApi
*/
public BaseResult createMenu(List