PayOldApi优化

This commit is contained in:
jinyu 2016-05-30 16:26:38 +08:00
parent f956c66481
commit d518eef5f8
6 changed files with 60 additions and 61 deletions

View File

@ -39,7 +39,7 @@ public class MapUtil {
Map<String, String> map = new HashMap<String, String>(); Map<String, String> map = new HashMap<String, String>();
JSONObject obj = null; JSONObject obj = null;
if (object instanceof String) { if (object instanceof String) {
obj = JSONObject.parseObject(object.toString()); obj = JSONObject.parseObject((String) object);
} else { } else {
obj = ListsuffixResultSerializer.serializeToJSON(object); obj = ListsuffixResultSerializer.serializeToJSON(object);
} }

View File

@ -25,8 +25,6 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference; import com.alibaba.fastjson.TypeReference;
import com.alibaba.fastjson.parser.Feature; import com.alibaba.fastjson.parser.Feature;
import com.foxinmy.weixin4j.cache.CacheStorager;
import com.foxinmy.weixin4j.cache.FileCacheStorager;
import com.foxinmy.weixin4j.exception.WeixinException; import com.foxinmy.weixin4j.exception.WeixinException;
import com.foxinmy.weixin4j.http.weixin.JsonResult; import com.foxinmy.weixin4j.http.weixin.JsonResult;
import com.foxinmy.weixin4j.http.weixin.WeixinRequestExecutor; import com.foxinmy.weixin4j.http.weixin.WeixinRequestExecutor;
@ -42,6 +40,7 @@ import com.foxinmy.weixin4j.mp.oldpayment.WeixinOldPayAccount;
import com.foxinmy.weixin4j.mp.oldpayment.WeixinOldPaymentSignature; import com.foxinmy.weixin4j.mp.oldpayment.WeixinOldPaymentSignature;
import com.foxinmy.weixin4j.mp.token.WeixinTokenCreator; import com.foxinmy.weixin4j.mp.token.WeixinTokenCreator;
import com.foxinmy.weixin4j.payment.PayRequest; import com.foxinmy.weixin4j.payment.PayRequest;
import com.foxinmy.weixin4j.setting.Weixin4jSettings;
import com.foxinmy.weixin4j.sign.WeixinPaymentSignature; import com.foxinmy.weixin4j.sign.WeixinPaymentSignature;
import com.foxinmy.weixin4j.sign.WeixinSignature; import com.foxinmy.weixin4j.sign.WeixinSignature;
import com.foxinmy.weixin4j.token.TokenManager; import com.foxinmy.weixin4j.token.TokenManager;
@ -68,6 +67,7 @@ import com.foxinmy.weixin4j.xml.ListsuffixResultDeserializer;
*/ */
public class PayOldApi extends MpApi { public class PayOldApi extends MpApi {
private final Weixin4jSettings<WeixinOldPayAccount> settings;
private final WeixinOldPayAccount weixinAccount; private final WeixinOldPayAccount weixinAccount;
private final TokenManager tokenManager; private final TokenManager tokenManager;
private final WeixinSignature weixinMD5Signature; private final WeixinSignature weixinMD5Signature;
@ -77,32 +77,26 @@ public class PayOldApi extends MpApi {
* 默认使用weixin4j.properties配置信息 * 默认使用weixin4j.properties配置信息
*/ */
public PayOldApi() { public PayOldApi() {
this(JSON.parseObject(Weixin4jConfigUtil.getValue("account"), this(new Weixin4jSettings<WeixinOldPayAccount>(JSON.parseObject(
WeixinOldPayAccount.class), new FileCacheStorager<Token>( Weixin4jConfigUtil.getValue("account"),
Weixin4jConfigUtil.getClassPathValue("weixin4j.tmpdir", WeixinOldPayAccount.class)));
System.getProperty("java.io.tmpdir"))));
} }
public PayOldApi(WeixinOldPayAccount payAccount) { /**
this(payAccount, new FileCacheStorager<Token>( *
Weixin4jConfigUtil.getClassPathValue("weixin4j.tmpdir", * @param settings
System.getProperty("java.io.tmpdir")))); * 微信配置信息
} */
public PayOldApi(Weixin4jSettings<WeixinOldPayAccount> settings) {
public PayOldApi(CacheStorager<Token> cacheStorager) { this.settings = settings;
this(JSON.parseObject(Weixin4jConfigUtil.getValue("account"), this.weixinAccount = settings.getAccount();
WeixinOldPayAccount.class), cacheStorager);
}
public PayOldApi(WeixinOldPayAccount weixinAccount,
CacheStorager<Token> cacheStorager) {
this.weixinAccount = weixinAccount;
this.tokenManager = new TokenManager(new WeixinTokenCreator( this.tokenManager = new TokenManager(new WeixinTokenCreator(
weixinAccount.getId(), weixinAccount.getSecret()), weixinAccount.getId(), weixinAccount.getSecret()),
cacheStorager); settings.getCacheStorager0());
this.weixinMD5Signature = new WeixinPaymentSignature( this.weixinMD5Signature = new WeixinPaymentSignature(
weixinAccount.getPartnerKey()); weixinAccount.getPartnerKey());
this.weixinOldSignature = new WeixinOldPaymentSignature(); this.weixinOldSignature = new WeixinOldPaymentSignature(
weixinAccount.getPaySignKey(), weixinAccount.getPartnerKey());
} }
public WeixinOldPayAccount getWeixinPayAccount() { public WeixinOldPayAccount getWeixinPayAccount() {
@ -145,10 +139,8 @@ public class PayOldApi extends MpApi {
*/ */
public String createPayJsRequestJson(PayPackageV2 payPackage) { public String createPayJsRequestJson(PayPackageV2 payPackage) {
PayRequest payRequest = new PayRequest(weixinAccount.getId(), PayRequest payRequest = new PayRequest(weixinAccount.getId(),
weixinOldSignature.sign(payPackage, weixinOldSignature.sign(payPackage));
weixinAccount.getPartnerKey())); payRequest.setPaySign(weixinOldSignature.sign(payRequest));
payRequest.setPaySign(weixinOldSignature.sign(payRequest,
weixinAccount.getPaySignKey()));
payRequest.setSignType(SignType.SHA1); payRequest.setSignType(SignType.SHA1);
return JSON.toJSONString(payRequest); return JSON.toJSONString(payRequest);
} }
@ -287,9 +279,7 @@ public class PayOldApi extends MpApi {
KeyStore ks = null; KeyStore ks = null;
String jksPwd = ""; String jksPwd = "";
File jksFile = new File(String.format("%s%stenpay_cacert.jks", File jksFile = new File(String.format("%s%stenpay_cacert.jks",
Weixin4jConfigUtil.getClassPathValue("weixin4j.tmpdir", settings.getTmpdir0(), File.separator));
System.getProperty("java.io.tmpdir")),
File.separator));
// create jks ca // create jks ca
if (!jksFile.exists()) { if (!jksFile.exists()) {
CertificateFactory cf = CertificateFactory CertificateFactory cf = CertificateFactory

View File

@ -65,9 +65,9 @@ public class NativePayResponseV2 extends PayRequest {
super(weixinAccount.getId(), null); super(weixinAccount.getId(), null);
this.retCode = "0"; this.retCode = "0";
this.retMsg = "OK"; this.retMsg = "OK";
WeixinOldPaymentSignature weixinSignature = new WeixinOldPaymentSignature(); WeixinOldPaymentSignature weixinSignature = new WeixinOldPaymentSignature(
setPackageInfo(weixinSignature.sign(payPackage, weixinAccount.getPaySignKey(), weixinAccount.getPartnerKey());
weixinAccount.getPartnerKey())); setPackageInfo(weixinSignature.sign(payPackage));
Map<String, String> map = new HashMap<String, String>(); Map<String, String> map = new HashMap<String, String>();
map.put("appid", weixinAccount.getId()); map.put("appid", weixinAccount.getId());
map.put("appkey", weixinAccount.getPaySignKey()); map.put("appkey", weixinAccount.getPaySignKey());

View File

@ -1,7 +1,5 @@
package com.foxinmy.weixin4j.mp.oldpayment; package com.foxinmy.weixin4j.mp.oldpayment;
import java.util.Map;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.JSONPath; import com.alibaba.fastjson.JSONPath;
@ -20,6 +18,20 @@ import com.foxinmy.weixin4j.util.MapUtil;
*/ */
public class WeixinOldPaymentSignature extends AbstractWeixinSignature { public class WeixinOldPaymentSignature extends AbstractWeixinSignature {
/**
* 支付签名密钥
*/
private final String paySignKey;
/**
* package签名密钥
*/
private final String partnerKey;
public WeixinOldPaymentSignature(String paySignKey, String partnerKey) {
this.paySignKey = paySignKey;
this.partnerKey = partnerKey;
}
@Override @Override
public boolean lowerCase() { public boolean lowerCase() {
return true; return true;
@ -27,15 +39,12 @@ public class WeixinOldPaymentSignature extends AbstractWeixinSignature {
@Override @Override
public String sign(Object obj) { public String sign(Object obj) {
return DigestUtil.SHA1(join(obj).toString()); if (obj instanceof String) {
} obj = JSON.parse((String) obj);
public String sign(Object obj, String paySignKey) {
if (obj instanceof Map) {
JSONPath.set(obj, "appKey", paySignKey);
} else { } else {
((JSONObject) JSON.toJSON(obj)).put("appKey", paySignKey); obj = ((JSONObject) JSON.toJSON(obj));
} }
JSONPath.set(obj, "appKey", paySignKey);
return DigestUtil.SHA1(join(obj).toString()); return DigestUtil.SHA1(join(obj).toString());
} }
@ -44,11 +53,9 @@ public class WeixinOldPaymentSignature extends AbstractWeixinSignature {
* *
* @param packageInfo * @param packageInfo
* package对象 * package对象
* @param partnerKey
* 签名key
* @return * @return
*/ */
public String sign(PayPackageV2 packageInfo, String partnerKey) { public String sign(PayPackageV2 packageInfo) {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
// a.对所有传入参数按照字段名的 ASCII 码从小到大排序(字典序) , // a.对所有传入参数按照字段名的 ASCII 码从小到大排序(字典序) ,
// 使用 URL 键值 对的格式( key1=value1&key2=value2...)拼接成字符串 string1 // 使用 URL 键值 对的格式( key1=value1&key2=value2...)拼接成字符串 string1

View File

@ -23,7 +23,7 @@ import com.foxinmy.weixin4j.mp.model.KfSession.KfSessionCounter;
/** /**
* 客服消息测试 * 客服消息测试
* *
* @className MessageNotifyTest * @className CustomTest
* @author jinyu(foxinmy@gmail.com) * @author jinyu(foxinmy@gmail.com)
* @date 2014年4月10日 * @date 2014年4月10日
* @since JDK 1.6 * @since JDK 1.6

View File

@ -10,6 +10,7 @@ import org.junit.Test;
import com.foxinmy.weixin4j.exception.WeixinException; import com.foxinmy.weixin4j.exception.WeixinException;
import com.foxinmy.weixin4j.mp.api.PayOldApi; import com.foxinmy.weixin4j.mp.api.PayOldApi;
import com.foxinmy.weixin4j.mp.oldpayment.WeixinOldPayAccount; import com.foxinmy.weixin4j.mp.oldpayment.WeixinOldPayAccount;
import com.foxinmy.weixin4j.setting.Weixin4jSettings;
import com.foxinmy.weixin4j.type.IdQuery; import com.foxinmy.weixin4j.type.IdQuery;
import com.foxinmy.weixin4j.type.IdType; import com.foxinmy.weixin4j.type.IdType;
@ -24,12 +25,13 @@ import com.foxinmy.weixin4j.type.IdType;
*/ */
public class PayTest { public class PayTest {
protected final static PayOldApi PAY2; protected final static PayOldApi PAY2;
protected final static WeixinOldPayAccount ACCOUNT2; protected final static Weixin4jSettings<WeixinOldPayAccount> settings;
static { static {
ACCOUNT2 = new WeixinOldPayAccount("请填入v2版本的appid", settings = new Weixin4jSettings<WeixinOldPayAccount>(
"请填入v2版本的appSecret", "请填入v2版本的paysignkey", "请填入v2版本的partnerId", new WeixinOldPayAccount("请填入v2版本的appid", "请填入v2版本的appSecret",
"请填入v2版本的partnerKey"); "请填入v2版本的paysignkey", "请填入v2版本的partnerId",
PAY2 = new PayOldApi(ACCOUNT2); "请填入v2版本的partnerKey"));
PAY2 = new PayOldApi(settings);
} }
/** /**
* 商户证书文件 * 商户证书文件