diff --git a/CHANGE.md b/CHANGE.md
index b5272f4e..dc2f12a1 100644
--- a/CHANGE.md
+++ b/CHANGE.md
@@ -172,4 +172,8 @@
* 2015-02-05
- + release 1.2
\ No newline at end of file
+ + release 1.2
+
+* 2015-03-06
+
+ + 新增oauth授权接口
\ No newline at end of file
diff --git a/weixin4j-mp/README.md b/weixin4j-mp/README.md
index f21b3660..5cdeb3fa 100644
--- a/weixin4j-mp/README.md
+++ b/weixin4j-mp/README.md
@@ -170,4 +170,8 @@ weixin4j-mp
* 2015-01-31
- + **weixin4j-mp-api**: 新增数据分析接口
\ No newline at end of file
+ + **weixin4j-mp-api**: 新增数据分析接口
+
+* 2015-03-06
+
+ + **weixin4j-mp-api**: 新增oauth授权接口
\ No newline at end of file
diff --git a/weixin4j-mp/weixin4j-mp-api/README.md b/weixin4j-mp/weixin4j-mp-api/README.md
index 880b7e32..a2f1c03d 100644
--- a/weixin4j-mp/weixin4j-mp-api/README.md
+++ b/weixin4j-mp/weixin4j-mp-api/README.md
@@ -33,20 +33,23 @@ weixin4j-mp-api
* DataApi `数据统计API`
+* OauthApi `oauth授权API`
+
如何使用
--------
1.API工程可以单独打包到其他项目中使用,需新增或拷贝`weixin.properties`文件到项目的`classpath`中
weixin.properties说明
-| 属性名 | 说明 |
-| :---------- | :-------------- |
-| account | 微信公众号信息 `json格式` |
-| token_path | 使用FileTokenHolder时token保存的物理路径 |
-| qr_path | 调用二维码接口时保存二维码图片的物理路径 |
-| media_path | 调用媒体接口时保存媒体文件的物理路径 |
-| bill_path | 调用下载对账单接口保存excel文件的物理路径 |
-| ca_file | 调用某些接口(支付相关)强制需要auth的ca授权文件 |
+| 属性名 | 说明 |
+| :---------- | :-------------- |
+| account | 微信公众号信息 `json格式` |
+| token_path | 使用FileTokenHolder时token保存的物理路径 |
+| qr_path | 调用二维码接口时保存二维码图片的物理路径 |
+| media_path | 调用媒体接口时保存媒体文件的物理路径 |
+| bill_path | 调用下载对账单接口保存excel文件的物理路径 |
+| ca_file | 调用某些接口(支付相关)强制需要auth的ca授权文件 |
+| redirect_uri | 调用OauthApi接口时需要填写的重定向路径 |
示例(properties中换行用右斜杆\\)
@@ -66,6 +69,8 @@ weixin.properties说明
# ca证书存放的完整路径 (V2版本后缀为*.pfx,V3版本后缀为*.p12)
ca_file=/tmp/weixin/xxxxx.p12
#classpath路径下:ca_file=classpath:xxxxx.p12
+
+ redirect_uri=http://xxx
2.实例化一个`WeixinProxy`对象,调用API,需要强调的是如果只传入appid,appsecret两个参数将无法调用支付相关接口
@@ -149,4 +154,8 @@ weixin.properties说明
* 2015-01-31
- + 新增数据分析接口
\ No newline at end of file
+ + 新增数据分析接口
+
+* 2015-03-06
+
+ + 新增oauth授权接口
\ No newline at end of file
diff --git a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/WeixinProxy.java b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/WeixinProxy.java
index 02c4a09c..0026d4d8 100644
--- a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/WeixinProxy.java
+++ b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/WeixinProxy.java
@@ -25,7 +25,6 @@ import com.foxinmy.weixin4j.mp.model.CustomRecord;
import com.foxinmy.weixin4j.mp.model.Following;
import com.foxinmy.weixin4j.mp.model.Group;
import com.foxinmy.weixin4j.mp.model.KfAccount;
-import com.foxinmy.weixin4j.mp.model.OauthToken;
import com.foxinmy.weixin4j.mp.model.QRParameter;
import com.foxinmy.weixin4j.mp.model.SemQuery;
import com.foxinmy.weixin4j.mp.model.SemResult;
@@ -525,40 +524,6 @@ public class WeixinProxy {
return massApi.getMassNews(msgId);
}
- /**
- * oauth授权code换取token
- *
- * @param code
- * 用户授权后返回的code
- * @return token对象
- * @throws WeixinException
- * @see 获取用户token
- * @see com.foxinmy.weixin4j.mp.model.OauthToken
- * @see com.foxinmy.weixin4j.mp.api.UserApi
- */
- public OauthToken getOauthToken(String code, String appid, String appsecret)
- throws WeixinException {
- return userApi.getOauthToken(code, appid, appsecret);
- }
-
- /**
- * ouath获取用户信息
- *
- * @param token
- * 授权票据
- * @return 用户对象
- * @throws WeixinException
- * @see 拉取用户信息
- * @see com.foxinmy.weixin4j.mp.model.User
- * @see com.foxinmy.weixin4j.mp.model.OauthToken
- * @see com.foxinmy.weixin4j.mp.api.UserApi
- */
- public User getUser(OauthToken token) throws WeixinException {
- return userApi.getUser(token);
- }
-
/**
* 获取用户信息
*
diff --git a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/UserApi.java b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/UserApi.java
index 47de3342..5d133a77 100644
--- a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/UserApi.java
+++ b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/UserApi.java
@@ -11,7 +11,6 @@ import com.foxinmy.weixin4j.http.JsonResult;
import com.foxinmy.weixin4j.http.Response;
import com.foxinmy.weixin4j.model.Token;
import com.foxinmy.weixin4j.mp.model.Following;
-import com.foxinmy.weixin4j.mp.model.OauthToken;
import com.foxinmy.weixin4j.mp.model.User;
import com.foxinmy.weixin4j.mp.type.Lang;
import com.foxinmy.weixin4j.token.TokenHolder;
@@ -33,51 +32,6 @@ public class UserApi extends MpApi {
this.tokenHolder = tokenHolder;
}
- /**
- * oauth授权code获取token
- *
- * @param code
- * 用户授权后返回的code
- * @param appid
- * @param appsecret
- * @return token对象
- * @throws WeixinException
- * @see 获取用户token
- * @see com.foxinmy.weixin4j.mp.model.OauthToken
- */
- public OauthToken getOauthToken(String code, String appid, String appsecret)
- throws WeixinException {
- String user_token_uri = getRequestUri("sns_user_token_uri");
- Response response = request.get(String.format(user_token_uri, appid,
- appsecret, code));
-
- return response.getAsObject(new TypeReference() {
- });
- }
-
- /**
- * oauth获取用户信息
- *
- * @param token
- * 授权票据
- * @return 用户对象
- * @throws WeixinException
- * @see 拉取用户信息
- * @see com.foxinmy.weixin4j.mp.model.User
- * @see com.foxinmy.weixin4j.mp.model.OauthToken
- * @see {@link com.foxinmy.weixin4j.mp.api.UserApi#getOauthToken(String)}
- */
- public User getUser(OauthToken token) throws WeixinException {
- String user_info_uri = getRequestUri("sns_user_info_uri");
- Response response = request.get(String.format(user_info_uri,
- token.getAccessToken(), token.getOpenid()));
-
- return response.getAsObject(new TypeReference() {
- });
- }
-
/**
* 获取用户信息
*
diff --git a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/weixin.properties b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/weixin.properties
index 3b36adf2..5ad4b236 100644
--- a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/weixin.properties
+++ b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/weixin.properties
@@ -16,7 +16,10 @@ tenpay_gw_base_url=https://gw.tenpay.com
# \u7f51\u9875\u6388\u6743\u83b7\u53d6\u7528\u6237\u4fe1\u606f
user_auth_uri=https://open.weixin.qq.com/connect/oauth2/authorize?appid=%s&redirect_uri=%s&response_type=code&scope=%s&state=%s#wechat_redirect
+sns_user_auth_uri=https://open.weixin.qq.com/connect/qrconnect?appid=%s&redirect_uri=%s&response_type=code&scope=%s&state=%s#wechat_redirect
sns_user_token_uri=https://api.weixin.qq.com/sns/oauth2/access_token?appid=%s&secret=%s&code=%s&grant_type=authorization_code
+sns_token_refresh_uri=https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=%s&grant_type=refresh_token&refresh_token=%s
+sns_auth_token_uri=https://api.weixin.qq.com/sns/auth?access_token=%s&openid=%s
sns_user_info_uri=https://api.weixin.qq.com/sns/userinfo?access_token=%s&openid=%s&lang=zh_CN
# \u76f4\u63a5\u83b7\u53d6\u7528\u6237\u4fe1\u606f
diff --git a/weixin4j-mp/weixin4j-mp-api/src/main/resources/weixin.properties b/weixin4j-mp/weixin4j-mp-api/src/main/resources/weixin.properties
index 44d80deb..e0f29edb 100644
--- a/weixin4j-mp/weixin4j-mp-api/src/main/resources/weixin.properties
+++ b/weixin4j-mp/weixin4j-mp-api/src/main/resources/weixin.properties
@@ -1,6 +1,6 @@
# \u6d4b\u8bd5\u4e4b\u7528 \u6b63\u5f0f\u73af\u5883\u4e0bcopy\u4e00\u4efd\u5230classpath
# \u516c\u4f17\u53f7\u4fe1\u606f
-account={"id":"wxb72a4f2dbf27b59d","secret":"7ecc93fa8662f518a39c037fd599e1f5",\
+account={"id":"wx4ab8f8de58159a57","secret":"1d4eb0f4bf556aaed539f30ed05ca795",\
"token":"\u5f00\u653e\u8005\u7684token",\
"encodingAesKey":"\u516c\u4f17\u53f7\u8bbe\u7f6e\u4e86\u52a0\u5bc6\u65b9\u5f0f\u4e14\u4e3a\u300c\u5b89\u5168\u6a21\u5f0f\u300d\u65f6\u9700\u8981\u586b\u5165",\
"mchId":"V3.x\u7248\u672c\u4e0b\u7684\u5fae\u4fe1\u5546\u6237\u53f7 \u670d\u52a1\u53f7\u652f\u4ed8\u65f6\u9700\u8981\u586b\u5165",\
diff --git a/weixin4j-mp/weixin4j-mp-api/src/test/java/com/foxinmy/weixin4j/mp/test/MenuTest.java b/weixin4j-mp/weixin4j-mp-api/src/test/java/com/foxinmy/weixin4j/mp/test/MenuTest.java
index fb347441..7153b524 100644
--- a/weixin4j-mp/weixin4j-mp-api/src/test/java/com/foxinmy/weixin4j/mp/test/MenuTest.java
+++ b/weixin4j-mp/weixin4j-mp-api/src/test/java/com/foxinmy/weixin4j/mp/test/MenuTest.java
@@ -57,6 +57,20 @@ public class MenuTest extends TokenTest {
Assert.assertEquals(0, result.getCode());
}
+ @Test
+ public void create1() throws WeixinException {
+ btnList = new ArrayList