重构token实现机制

This commit is contained in:
jy.hu
2015-01-10 22:17:13 +08:00
parent 5b40a3728c
commit 9f8af3f725
22 changed files with 311 additions and 281 deletions
@@ -15,9 +15,6 @@ import com.foxinmy.weixin4j.mp.type.BillType;
import com.foxinmy.weixin4j.mp.type.IdQuery;
import com.foxinmy.weixin4j.mp.type.IdType;
import com.foxinmy.weixin4j.mp.type.RefundType;
import com.foxinmy.weixin4j.token.FileTokenHolder;
import com.foxinmy.weixin4j.token.TokenHolder;
import com.foxinmy.weixin4j.type.AccountType;
import com.foxinmy.weixin4j.util.ConfigUtil;
/**
@@ -35,11 +32,8 @@ public class WeixinPayProxy {
private final Pay2Api pay2Api;
private final Pay3Api pay3Api;
/**
* 默认采用文件存放Token信息
*/
public WeixinPayProxy() {
this(new FileTokenHolder(AccountType.MP));
this(ConfigUtil.getWeixinMpAccount());
}
/**
@@ -49,18 +43,9 @@ public class WeixinPayProxy {
* 微信账户
*/
public WeixinPayProxy(WeixinMpAccount weixinAccount) {
this(new FileTokenHolder(weixinAccount));
}
/**
* TokenHolder对象
*
* @param tokenHolder
*/
public WeixinPayProxy(TokenHolder tokenHolder) {
this.pay2Api = new Pay2Api(tokenHolder);
this.pay3Api = new Pay3Api(tokenHolder);
int version = ((WeixinMpAccount) tokenHolder.getAccount()).getVersion();
this.pay2Api = new Pay2Api(weixinAccount);
this.pay3Api = new Pay3Api(weixinAccount);
int version = weixinAccount.getVersion();
if (version == 2) {
this.payApi = this.pay2Api;
} else if (version == 3) {
@@ -37,6 +37,7 @@ import com.foxinmy.weixin4j.msg.model.MpArticle;
import com.foxinmy.weixin4j.msg.model.Video;
import com.foxinmy.weixin4j.token.FileTokenHolder;
import com.foxinmy.weixin4j.token.TokenHolder;
import com.foxinmy.weixin4j.token.WeixinTokenCreator;
import com.foxinmy.weixin4j.type.AccountType;
import com.foxinmy.weixin4j.type.MediaType;
@@ -66,7 +67,7 @@ public class WeixinProxy {
* 默认采用文件存放Token信息
*/
public WeixinProxy() {
this(new FileTokenHolder(AccountType.MP));
this(new FileTokenHolder(new WeixinTokenCreator(AccountType.MP)));
}
/**
@@ -87,7 +88,7 @@ public class WeixinProxy {
* 微信账户
*/
public WeixinProxy(WeixinMpAccount weixinAccount) {
this(new FileTokenHolder(weixinAccount));
this(new FileTokenHolder(new WeixinTokenCreator(weixinAccount)));
}
/**
@@ -544,8 +545,9 @@ public class WeixinProxy {
* href="http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html">获取用户token</a>
* @see com.foxinmy.weixin4j.mp.model.OauthToken
* @see com.foxinmy.weixin4j.mp.api.UserApi
*/
public OauthToken getOauthToken(String code) throws WeixinException {
*/
public OauthToken getOauthToken(String code, String appid, String appsecret)
throws WeixinException {
return userApi.getOauthToken(code, appid, appsecret);
}
@@ -8,7 +8,6 @@ import com.alibaba.fastjson.TypeReference;
import com.foxinmy.weixin4j.exception.WeixinException;
import com.foxinmy.weixin4j.http.Response;
import com.foxinmy.weixin4j.model.Token;
import com.foxinmy.weixin4j.model.WeixinMpAccount;
import com.foxinmy.weixin4j.mp.model.SemQuery;
import com.foxinmy.weixin4j.mp.model.SemResult;
import com.foxinmy.weixin4j.token.TokenHolder;
@@ -33,7 +32,8 @@ public class HelperApi extends MpApi {
/**
* 长链接转短链接
*
* @param url 待转换的链接
* @param url
* 待转换的链接
* @return 短链接
* @throws WeixinException
* @see <a
@@ -65,10 +65,8 @@ public class HelperApi extends MpApi {
* @throws WeixinException
*/
public SemResult semantic(SemQuery semQuery) throws WeixinException {
WeixinMpAccount weixinAccount = (WeixinMpAccount) tokenHolder.getAccount();
String semantic_uri = getRequestUri("semantic_uri");
Token token = tokenHolder.getToken();
semQuery.appid(weixinAccount.getId());
Response response = request.post(
String.format(semantic_uri, token.getAccessToken()),
semQuery.toJson());
@@ -37,6 +37,7 @@ import com.foxinmy.weixin4j.exception.WeixinException;
import com.foxinmy.weixin4j.http.Response;
import com.foxinmy.weixin4j.http.SSLHttpRequest;
import com.foxinmy.weixin4j.model.Token;
import com.foxinmy.weixin4j.model.WeixinMpAccount;
import com.foxinmy.weixin4j.mp.payment.PayUtil;
import com.foxinmy.weixin4j.mp.payment.RefundConverter;
import com.foxinmy.weixin4j.mp.payment.v2.Order;
@@ -48,7 +49,6 @@ import com.foxinmy.weixin4j.mp.type.IdQuery;
import com.foxinmy.weixin4j.mp.type.RefundType;
import com.foxinmy.weixin4j.mp.type.SignType;
import com.foxinmy.weixin4j.mp.util.ExcelUtil;
import com.foxinmy.weixin4j.token.TokenHolder;
import com.foxinmy.weixin4j.util.ConfigUtil;
import com.foxinmy.weixin4j.util.DateUtil;
import com.foxinmy.weixin4j.util.MapUtil;
@@ -66,8 +66,8 @@ public class Pay2Api extends PayApi {
private final HelperApi helperApi;
public Pay2Api(TokenHolder tokenHolder) {
super(tokenHolder);
public Pay2Api(WeixinMpAccount weixinAccount) {
super(weixinAccount);
this.helperApi = new HelperApi(tokenHolder);
}
@@ -180,7 +180,7 @@ public class Pay2Api extends PayApi {
}
String sign = PayUtil
.paysignMd5(map, weixinAccount.getPartnerKey());
map.put("sign", sign.toLowerCase());
map.put("sign", sign.toUpperCase());
SSLContext ctx = null;
KeyStore ks = null;
@@ -232,6 +232,7 @@ public class Pay2Api extends PayApi {
}
}
}
System.err.println(response.getAsString());
return response.getAsObject(new TypeReference<RefundResult>() {
});
}
@@ -28,6 +28,7 @@ import com.foxinmy.weixin4j.exception.WeixinException;
import com.foxinmy.weixin4j.http.Response;
import com.foxinmy.weixin4j.http.SSLHttpRequest;
import com.foxinmy.weixin4j.http.XmlResult;
import com.foxinmy.weixin4j.model.WeixinMpAccount;
import com.foxinmy.weixin4j.mp.payment.PayUtil;
import com.foxinmy.weixin4j.mp.payment.RefundConverter;
import com.foxinmy.weixin4j.mp.payment.v3.ApiResult;
@@ -38,7 +39,6 @@ import com.foxinmy.weixin4j.mp.type.BillType;
import com.foxinmy.weixin4j.mp.type.IdQuery;
import com.foxinmy.weixin4j.mp.type.IdType;
import com.foxinmy.weixin4j.mp.util.ExcelUtil;
import com.foxinmy.weixin4j.token.TokenHolder;
import com.foxinmy.weixin4j.util.ConfigUtil;
import com.foxinmy.weixin4j.util.DateUtil;
import com.foxinmy.weixin4j.util.RandomUtil;
@@ -54,8 +54,8 @@ import com.foxinmy.weixin4j.util.RandomUtil;
*/
public class Pay3Api extends PayApi {
public Pay3Api(TokenHolder tokenHolder) {
super(tokenHolder);
public Pay3Api(WeixinMpAccount weixinAccount) {
super(weixinAccount);
}
/**
@@ -16,7 +16,9 @@ import com.foxinmy.weixin4j.mp.payment.v3.ApiResult;
import com.foxinmy.weixin4j.mp.type.BillType;
import com.foxinmy.weixin4j.mp.type.IdQuery;
import com.foxinmy.weixin4j.mp.type.SignType;
import com.foxinmy.weixin4j.token.FileTokenHolder;
import com.foxinmy.weixin4j.token.TokenHolder;
import com.foxinmy.weixin4j.token.WeixinTokenCreator;
import com.foxinmy.weixin4j.util.DateUtil;
/**
@@ -30,12 +32,13 @@ import com.foxinmy.weixin4j.util.DateUtil;
* @see com.foxinmy.weixin4j.mp.api.Pay3Api
*/
public abstract class PayApi extends MpApi {
protected final TokenHolder tokenHolder;
protected final WeixinMpAccount weixinAccount;
public PayApi(TokenHolder tokenHolder) {
this.tokenHolder = tokenHolder;
this.weixinAccount = (WeixinMpAccount) tokenHolder.getAccount();
public PayApi(WeixinMpAccount weixinAccount) {
this.weixinAccount = weixinAccount;
this.tokenHolder = new FileTokenHolder(new WeixinTokenCreator(
weixinAccount));
}
/**
@@ -10,7 +10,6 @@ import com.foxinmy.weixin4j.exception.WeixinException;
import com.foxinmy.weixin4j.http.JsonResult;
import com.foxinmy.weixin4j.http.Response;
import com.foxinmy.weixin4j.model.Token;
import com.foxinmy.weixin4j.model.WeixinAccount;
import com.foxinmy.weixin4j.mp.model.Following;
import com.foxinmy.weixin4j.mp.model.OauthToken;
import com.foxinmy.weixin4j.mp.model.User;
@@ -39,17 +38,19 @@ public class UserApi extends MpApi {
*
* @param code
* 用户授权后返回的code
* @param appid
* @param appsecret
* @return token对象
* @throws WeixinException
* @see <a
* href="http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html">获取用户token</a>
* @see com.foxinmy.weixin4j.mp.model.OauthToken
*/
public OauthToken getOauthToken(String code) throws WeixinException {
WeixinAccount weixinAccount = tokenHolder.getAccount();
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,
weixinAccount.getId(), weixinAccount.getSecret(), code));
Response response = request.get(String.format(user_token_uri, appid,
appsecret, code));
return response.getAsObject(new TypeReference<OauthToken>() {
});
@@ -20,4 +20,4 @@ bill_path=/tmp/weixin/bill
# ca\u8bc1\u4e66\u5b58\u653e\u7684\u5b8c\u6574\u8def\u5f84 (V2\u7248\u672c\u540e\u7f00\u4e3a*.pfx,V3\u7248\u672c\u540e\u7f00\u4e3a*.p12)
ca_file=/tmp/weixin/xxxxx.p12
# classpath\u8def\u5f84\u4e0b\u53ef\u4ee5\u8fd9\u4e48\u5199
ca_file=classpath:xxxxx.pfx
# ca_file=classpath:xxxxx.pfx
@@ -7,6 +7,7 @@ import org.junit.Test;
import com.foxinmy.weixin4j.exception.WeixinException;
import com.foxinmy.weixin4j.token.FileTokenHolder;
import com.foxinmy.weixin4j.token.TokenHolder;
import com.foxinmy.weixin4j.token.WeixinTokenCreator;
import com.foxinmy.weixin4j.type.AccountType;
/**
@@ -23,7 +24,7 @@ public class TokenTest {
@Before
public void setUp() {
tokenHolder = new FileTokenHolder(AccountType.MP);
tokenHolder = new FileTokenHolder(new WeixinTokenCreator(AccountType.MP));
}
@Test
@@ -16,5 +16,7 @@ qr_path=/tmp/weixin/qr
media_path=/tmp/weixin/media
# \u5bf9\u8d26\u5355\u4fdd\u5b58\u8def\u5f84
bill_path=/tmp/weixin/bill
# ca\u8bc1\u4e66\u5b58\u653e\u7684\u5b8c\u6574\u8def\u5f84
ca_file=/tmp/weixin/xxxxx.p12 | xxxxx.pfx
# ca\u8bc1\u4e66\u5b58\u653e\u7684\u5b8c\u6574\u8def\u5f84 (V2\u7248\u672c\u540e\u7f00\u4e3a*.pfx,V3\u7248\u672c\u540e\u7f00\u4e3a*.p12)
ca_file=/tmp/weixin/xxxxx.p12
# classpath\u8def\u5f84\u4e0b\u53ef\u4ee5\u8fd9\u4e48\u5199
# ca_file=classpath:xxxxx.pfx