移除过时方法,工具类迁移

This commit is contained in:
egan
2021-08-01 23:33:02 +08:00
parent d40efb21c5
commit 4d1ad05fa8
19 changed files with 113 additions and 188 deletions

View File

@@ -46,6 +46,7 @@ import com.egzosn.pay.common.http.HttpConfigStorage;
import com.egzosn.pay.common.http.UriVariables;
import com.egzosn.pay.common.util.DateUtils;
import com.egzosn.pay.common.util.Util;
import com.egzosn.pay.common.util.sign.SignTextUtils;
import com.egzosn.pay.common.util.sign.SignUtils;
import com.egzosn.pay.common.util.str.StringUtils;
@@ -94,7 +95,6 @@ public class AliPayService extends BasePayService<AliPayConfigStorage> {
public AliPayService(AliPayConfigStorage payConfigStorage, HttpConfigStorage configStorage) {
super(payConfigStorage, configStorage);
payConfigStorage.loadCertEnvironment();
}
public AliPayService(AliPayConfigStorage payConfigStorage) {
@@ -187,7 +187,7 @@ public class AliPayService extends BasePayService<AliPayConfigStorage> {
*/
protected Map<String, Object> setSign(Map<String, Object> parameters) {
parameters.put("sign_type", payConfigStorage.getSignType());
String sign = createSign(SignUtils.parameterText(parameters, "&", SIGN), payConfigStorage.getInputCharset());
String sign = createSign(SignTextUtils.parameterText(parameters, "&", SIGN), payConfigStorage.getInputCharset());
parameters.put(SIGN, sign);
return parameters;
@@ -566,9 +566,7 @@ public class AliPayService extends BasePayService<AliPayConfigStorage> {
* @param billType 账单类型商户通过接口或商户经开放平台授权后其所属服务商通过接口可以获取以下账单类型trade、signcustomertrade指商户基于支付宝交易收单的业务账单signcustomer是指基于商户支付宝余额收入及支出等资金变动的帐务账单
* @return 返回支付方下载对账单的结果
*/
@Deprecated
@Override
public Map<String, Object> downloadbill(Date billDate, String billType) {
public Map<String, Object> downloadBill(Date billDate, String billType) {
return this.downloadBill(billDate, "trade".equals(billType) ? AliPayBillType.TRADE_DAY : AliPayBillType.SIGNCUSTOMER_DAY);
}
@@ -614,7 +612,7 @@ public class AliPayService extends BasePayService<AliPayConfigStorage> {
if (transactionType == AliTransactionType.DOWNLOADBILL) {
if (tradeNoOrBillDate instanceof Date) {
return downloadbill((Date) tradeNoOrBillDate, outTradeNoBillType);
return downloadBill((Date) tradeNoOrBillDate, outTradeNoBillType);
}
throw new PayErrorException(new PayException("failure", "非法类型异常:" + tradeNoOrBillDate.getClass()));
}
@@ -627,7 +625,7 @@ public class AliPayService extends BasePayService<AliPayConfigStorage> {
//设置签名
setSign(parameters);
return requestTemplate.getForObject(getReqUrl() + "?" + UriVariables.getMapToParameters(parameters), JSONObject.class);
return requestTemplate.getForObject(getReqUrl(transactionType) + "?" + UriVariables.getMapToParameters(parameters), JSONObject.class);
}
/**

View File

@@ -3,11 +3,17 @@ package com.egzosn.pay.baidu.api;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.security.*;
import java.security.KeyFactory;
import java.security.NoSuchAlgorithmException;
import java.security.PublicKey;
import java.security.Signature;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.X509EncodedKeySpec;
import java.util.*;
import com.egzosn.pay.common.util.sign.encrypt.Base64;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
@@ -30,7 +36,9 @@ import com.egzosn.pay.common.http.HttpConfigStorage;
import com.egzosn.pay.common.http.UriVariables;
import com.egzosn.pay.common.util.DateUtils;
import com.egzosn.pay.common.util.Util;
import com.egzosn.pay.common.util.sign.SignTextUtils;
import com.egzosn.pay.common.util.sign.SignUtils;
import com.egzosn.pay.common.util.sign.encrypt.Base64;
import com.egzosn.pay.common.util.str.StringUtils;
@@ -85,7 +93,8 @@ public class BaiduPayService extends BasePayService<BaiduPayConfigStorage> {
try {
boolean checkSign = this.checkReturnSign(params, payConfigStorage.getKeyPublic(), (String) params.get(RSA_SIGN));
return checkSign;
} catch (Exception e) {
}
catch (Exception e) {
LOG.info("验签失败", e);
}
return false;
@@ -100,7 +109,8 @@ public class BaiduPayService extends BasePayService<BaiduPayConfigStorage> {
boolean verify = signature.verify(Base64.decode(rsaSign));
LOG.info("使用公钥进行验签: " + verify);
return verify;
} catch (Exception e) {
}
catch (Exception e) {
LOG.info("使用公钥进行验签出错, 返回false", e);
}
return false;
@@ -111,9 +121,7 @@ public class BaiduPayService extends BasePayService<BaiduPayConfigStorage> {
* 将公钥字符串进行Base64 decode之后生成X509标准公钥
*
* @param publicKey 公钥原始字符串
*
* @return X509标准公钥
*
* @throws InvalidKeySpecException
* @throws NoSuchAlgorithmException
*/
@@ -131,9 +139,7 @@ public class BaiduPayService extends BasePayService<BaiduPayConfigStorage> {
* 对输入参数进行key过滤排序和字符串拼接
*
* @param params 待签名参数集合
*
* @return 待签名内容
*
* @throws UnsupportedEncodingException
*/
private String signContent(Map<String, Object> params) throws UnsupportedEncodingException {
@@ -172,7 +178,6 @@ public class BaiduPayService extends BasePayService<BaiduPayConfigStorage> {
* 非空、且非签名字段
*
* @param key 待签名参数key值
*
* @return true | false
*/
private static boolean legalKey(String key) {
@@ -520,9 +525,7 @@ public class BaiduPayService extends BasePayService<BaiduPayConfigStorage> {
* @param accessToken 用户token
* @return 对账单
*/
@Deprecated
@Override
public Map<String, Object> downloadbill(Date billDate, String accessToken) {
public Map<String, Object> downloadBill(Date billDate, String accessToken) {
return downloadBill(billDate, new BaiduBillType(accessToken, BaiduTransactionType.DOWNLOAD_ORDER_BILL.name()));
}
@@ -609,7 +612,7 @@ public class BaiduPayService extends BasePayService<BaiduPayConfigStorage> {
LOG.info("百度支付签名参数:" + JSON.toJSONString(result));
String waitSignVal = SignUtils.parameterText(result, "&", false, ignoreKeys);
String waitSignVal = SignTextUtils.parameterText(result, "&", false, ignoreKeys);
return SignUtils.RSA.createSign(waitSignVal, payConfigStorage.getKeyPrivate(), payConfigStorage.getInputCharset());
}
}

View File

@@ -1 +0,0 @@
package com.egzosn.pay.baidu;

View File

@@ -11,11 +11,11 @@ import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.alibaba.fastjson.JSON;
import com.egzosn.pay.common.bean.BillType;
import com.egzosn.pay.common.bean.MethodType;
import com.egzosn.pay.common.bean.Order;
import com.egzosn.pay.common.bean.PayMessage;
@@ -252,7 +252,7 @@ public abstract class BasePayService<PC extends PayConfigStorage> implements Pay
*/
@Override
public <T> T cancel(String tradeNo, String outTradeNo, Callback<T> callback) {
return callback.perform(close(tradeNo, outTradeNo));
return callback.perform(cancel(tradeNo, outTradeNo));
}
/**
@@ -264,7 +264,7 @@ public abstract class BasePayService<PC extends PayConfigStorage> implements Pay
*/
@Override
public Map<String, Object> cancel(String tradeNo, String outTradeNo) {
return Collections.EMPTY_MAP;
return Collections.emptyMap();
}
@@ -297,19 +297,16 @@ public abstract class BasePayService<PC extends PayConfigStorage> implements Pay
}
/**
* 目前只支持日账单
* 下载对账单
*
* @param billDate 账单时间:具体请查看对应支付平台
* @param billType 账单类型,具体请查看对应支付平台
* @param callback 处理器
* @param <T> 返回类型
* @param billDate 账单时间:日账单格式为yyyy-MM-dd月账单格式为yyyy-MM。
* @param billType 账单类型 内部自动转化 {@link BillType}
* @return 返回支付方下载对账单的结果
*/
@Override
public <T> T downloadbill(Date billDate, String billType, Callback<T> callback) {
return callback.perform(downloadbill(billDate, billType));
public Map<String, Object> downloadBill(Date billDate, String billType){
return Collections.emptyMap();
}
/**
* 转账
*

View File

@@ -276,11 +276,10 @@ public interface PayService<PC extends PayConfigStorage> {
* 下载对账单
*
* @param billDate 账单时间日账单格式为yyyy-MM-dd月账单格式为yyyy-MM。
* @param billType 账单类型
* @param billType 账单类型 内部自动转化 {@link BillType}
* @return 返回支付方下载对账单的结果
*/
@Deprecated
Map<String, Object> downloadbill(Date billDate, String billType);
Map<String, Object> downloadBill(Date billDate, String billType);
/**
* 下载对账单
@@ -291,16 +290,6 @@ public interface PayService<PC extends PayConfigStorage> {
*/
Map<String, Object> downloadBill(Date billDate, BillType billType);
/**
* 下载对账单
*
* @param billDate 账单时间:具体请查看对应支付平台
* @param billType 账单类型,具体请查看对应支付平台
* @param callback 处理器
* @param <T> 返回类型
* @return 返回支付方下载对账单的结果
*/
<T> T downloadbill(Date billDate, String billType, Callback<T> callback);
/**

View File

@@ -18,6 +18,11 @@ public class PayErrorException extends RuntimeException {
this.error = error;
}
public PayErrorException(PayError error, Throwable throwable) {
super(error.getString(), throwable);
this.error = error;
}
public PayError getPayError() {
return error;

View File

@@ -460,11 +460,11 @@ public class PayController {
* @param order 订单的请求体
* @return 返回支付方下载对账单的结果
*/
@RequestMapping("downloadbill")
public Object downloadbill(QueryOrder order) {
@RequestMapping("downloadBill")
public Object downloadBill(QueryOrder order) {
PayResponse payResponse = service.getPayResponse(order.getPayId());
return payResponse.getService().downloadbill(order.getBillDate(), order.getBillType());
return payResponse.getService().downloadBill(order.getBillDate(), order.getBillType());
}

View File

@@ -8,6 +8,7 @@ import com.egzosn.pay.common.bean.MethodType;
import com.egzosn.pay.common.bean.PayOrder;
import com.egzosn.pay.common.bean.RefundOrder;
import com.egzosn.pay.common.http.HttpConfigStorage;
import com.egzosn.pay.common.util.sign.SignTextUtils;
import com.egzosn.pay.common.util.sign.SignUtils;
import com.egzosn.pay.demo.request.QueryOrder;
import com.egzosn.pay.union.api.UnionPayConfigStorage;
@@ -130,7 +131,7 @@ public class UnionPayController {
public Map<String, Object> app() {
Map<String, Object> data = new HashMap<>();
data.put("code", 0);
PayOrder order = new PayOrder("订单title", "摘要", BigDecimal.valueOf(0.01), SignUtils.randomStr());
PayOrder order = new PayOrder("订单title", "摘要", BigDecimal.valueOf(0.01), SignTextUtils.randomStr());
//App支付
order.setTransactionType(UnionTransactionType.APP);
@@ -178,7 +179,7 @@ public class UnionPayController {
public Map<String, Object> microPay(BigDecimal price, String authCode) {
//获取对应的支付账户操作工具可根据账户id
//条码付
PayOrder order = new PayOrder("egan order", "egan order", null == price ? BigDecimal.valueOf(0.01) : price, SignUtils.randomStr(), UnionTransactionType.CONSUME);
PayOrder order = new PayOrder("egan order", "egan order", null == price ? BigDecimal.valueOf(0.01) : price, SignTextUtils.randomStr(), UnionTransactionType.CONSUME);
//设置授权码,条码等
order.setAuthCode(authCode);
//支付结果
@@ -275,9 +276,9 @@ public class UnionPayController {
* @param order 订单的请求体
* @return 返回支付方下载对账单的结果
*/
@RequestMapping("downloadbill")
public Object downloadbill(QueryOrder order) {
return service.downloadbill(order.getBillDate(), order.getBillType());
@RequestMapping("downloadBill")
public Object downloadBill(QueryOrder order) {
return service.downloadBill(order.getBillDate(), order.getBillType());
}

View File

@@ -47,7 +47,7 @@ public class ApyAccountRepository {
ApyAccount apyAccount2 = new ApyAccount();
apyAccount2.setPayId(2);
apyAccount2.setPartner("1469188802");
apyAccount2.setAppId("wx3344f4aed352deae");
apyAccount2.setAppId("wx3344f4aed352de09");
// TODO 2017/2/9 16:20 author: egan sign_type只有单一key时public_key与private_key相等比如sign_type=MD5的情况
apyAccount2.setPublicKey("991ded080***************f7fc61095");
apyAccount2.setPrivateKey("991ded080***************f7fc61095");

View File

@@ -22,6 +22,7 @@ import com.egzosn.pay.common.http.HttpConfigStorage;
import com.egzosn.pay.common.http.UriVariables;
import com.egzosn.pay.common.util.DateUtils;
import com.egzosn.pay.common.util.Util;
import com.egzosn.pay.common.util.sign.SignTextUtils;
import com.egzosn.pay.common.util.sign.SignUtils;
import com.egzosn.pay.common.util.str.StringUtils;
import com.egzosn.pay.fuiou.bean.FuiouRefundResult;
@@ -141,7 +142,7 @@ public class FuiouPayService extends BasePayService<FuiouPayConfigStorage> {
*/
public boolean signVerify(Map<String, Object> params, String responseSign) {
String sign = createSign(SignUtils.parameters2Md5Str(params, "|"), payConfigStorage.getInputCharset());
String sign = createSign(SignTextUtils.parameters2Md5Str(params, "|"), payConfigStorage.getInputCharset());
return responseSign.equals(sign);
}
@@ -156,7 +157,7 @@ public class FuiouPayService extends BasePayService<FuiouPayConfigStorage> {
LinkedHashMap<String, Object> params = new LinkedHashMap<String, Object>(3);
params.put("mchnt_cd", payConfigStorage.getPid());
params.put("order_id", orderId);
params.put("md5", createSign(SignUtils.parameters2Md5Str(params, "|"), payConfigStorage.getInputCharset()));
params.put("md5", createSign(SignTextUtils.parameters2Md5Str(params, "|"), payConfigStorage.getInputCharset()));
JSONObject resultJson = getHttpRequestTemplate().postForObject(getReqUrl() + URL_FuiouSmpAQueryGate + "?" + UriVariables.getMapToParameters(params), null, JSONObject.class);
if (null == resultJson) {
return false;
@@ -178,7 +179,7 @@ public class FuiouPayService extends BasePayService<FuiouPayConfigStorage> {
}
Map<String, Object> parameters = getOrderInfo(order);
String sign = createSign(SignUtils.parameters2Md5Str(parameters, "|"), payConfigStorage.getInputCharset());
String sign = createSign(SignTextUtils.parameters2Md5Str(parameters, "|"), payConfigStorage.getInputCharset());
parameters.put("md5", sign);
return parameters;
}
@@ -381,7 +382,7 @@ public class FuiouPayService extends BasePayService<FuiouPayConfigStorage> {
LinkedHashMap<String, Object> params = new LinkedHashMap<>();
params.put("mchnt_cd", payConfigStorage.getPid());
params.put("order_id", outTradeNo);
params.put("md5", createSign(SignUtils.parameters2Md5Str(params, "|"), payConfigStorage.getInputCharset()));
params.put("md5", createSign(SignTextUtils.parameters2Md5Str(params, "|"), payConfigStorage.getInputCharset()));
JSONObject resultJson = getHttpRequestTemplate().postForObject(getReqUrl() + URL_FuiouSmpAQueryGate + "?" + UriVariables.getMapToParameters(params), null, JSONObject.class);
return resultJson;
}
@@ -420,7 +421,7 @@ public class FuiouPayService extends BasePayService<FuiouPayConfigStorage> {
//备注
params.put("rem", "");
params.putAll(refundOrder.getAttrs());
params.put("md5", createSign(SignUtils.parameters2Md5Str(params, "|"), payConfigStorage.getInputCharset()));
params.put("md5", createSign(SignTextUtils.parameters2Md5Str(params, "|"), payConfigStorage.getInputCharset()));
JSONObject resultJson = getHttpRequestTemplate().postForObject(getReqUrl() + URL_FuiouSmpRefundGate, params, JSONObject.class);
return FuiouRefundResult.create(resultJson);
}
@@ -438,19 +439,6 @@ public class FuiouPayService extends BasePayService<FuiouPayConfigStorage> {
}
/**
* 下载对账单
*
* @param billDate 账单时间日账单格式为yyyy-MM-dd月账单格式为yyyy-MM。
* @param billType 账单类型商户通过接口或商户经开放平台授权后其所属服务商通过接口可以获取以下账单类型trade、signcustomertrade指商户基于支付宝交易收单的业务账单signcustomer是指基于商户支付宝余额收入及支出等资金变动的帐务账单
* @return 空
*/
@Deprecated
@Override
public Map<String, Object> downloadbill(Date billDate, String billType) {
return Collections.emptyMap();
}
/**
* 下载对账单
*

View File

@@ -374,18 +374,7 @@ public class PayoneerPayService extends BasePayService<PayoneerConfigStorage> im
return Collections.emptyMap();
}
/**
* 下载对账单
*
* @param billDate 账单时间日账单格式为yyyy-MM-dd月账单格式为yyyy-MM。
* @param billType 账单类型商户通过接口或商户经开放平台授权后其所属服务商通过接口可以获取以下账单类型trade、signcustomertrade指商户基于支付宝交易收单的业务账单signcustomer是指基于商户支付宝余额收入及支出等资金变动的帐务账单
* @return 返回支付方下载对账单的结果
*/
@Deprecated
@Override
public Map<String, Object> downloadbill(Date billDate, String billType) {
return Collections.emptyMap();
}
/**
* 下载对账单
*

View File

@@ -348,11 +348,6 @@ public class PayPalPayService extends BasePayService<PayPalConfigStorage> {
return resp;
}
@Deprecated
@Override
public Map<String, Object> downloadbill(Date billDate, String billType) {
return Collections.emptyMap();
}
@Override

View File

@@ -439,7 +439,6 @@ public class PayPalPayService extends BasePayService<PayPalConfigStorage> implem
* }
*
* </pre>
*
*/
@Override
public Map<String, Object> getCapture(String captureId) {
@@ -491,13 +490,6 @@ public class PayPalPayService extends BasePayService<PayPalConfigStorage> implem
return resp;
}
@Deprecated
@Override
public Map<String, Object> downloadbill(Date billDate, String billType) {
return Collections.emptyMap();
}
public Map<String, Object> downloadBill(Date billDate, BillType billType) {
return Collections.emptyMap();
}

View File

@@ -41,6 +41,7 @@ import com.egzosn.pay.common.http.UriVariables;
import com.egzosn.pay.common.util.DateUtils;
import com.egzosn.pay.common.util.Util;
import com.egzosn.pay.common.util.sign.CertDescriptor;
import com.egzosn.pay.common.util.sign.SignTextUtils;
import com.egzosn.pay.common.util.sign.SignUtils;
import com.egzosn.pay.common.util.sign.encrypt.RSA;
import com.egzosn.pay.common.util.sign.encrypt.RSA2;
@@ -80,7 +81,7 @@ public class UnionPayService extends BasePayService<UnionPayConfigStorage> {
/**
* 证书解释器
*/
private CertDescriptor certDescriptor;
private volatile CertDescriptor certDescriptor;
/**
* 构造函数
@@ -103,12 +104,13 @@ public class UnionPayService extends BasePayService<UnionPayConfigStorage> {
*/
@Override
public UnionPayService setPayConfigStorage(UnionPayConfigStorage payConfigStorage) {
super.setPayConfigStorage(payConfigStorage);
if (!payConfigStorage.isCertSign() || null != certDescriptor) {
this.payConfigStorage = payConfigStorage;
if (!payConfigStorage.isCertSign()) {
return this;
}
certDescriptor = new CertDescriptor();
if (null == certDescriptor) {
certDescriptor = new CertDescriptor();
}
try {
certDescriptor.initPrivateSignCert(payConfigStorage.getKeyPrivateCertInputStream(), payConfigStorage.getKeyPrivateCertPwd(), "PKCS12");
certDescriptor.initPublicCert(payConfigStorage.getAcpMiddleCertInputStream());
@@ -149,6 +151,7 @@ public class UnionPayService extends BasePayService<UnionPayConfigStorage> {
public String getBackTransUrl() {
return String.format(BACK_TRANS_URL, getReqUrl());
}
public String getAppTransUrl() {
return String.format(APP_TRANS_URL, getReqUrl());
}
@@ -217,7 +220,7 @@ public class UnionPayService extends BasePayService<UnionPayConfigStorage> {
public boolean signVerify(Map<String, Object> params, String sign) {
SignUtils signUtils = SignUtils.valueOf(payConfigStorage.getSignType());
String data = SignUtils.parameterText(params, "&", "signature");
String data = SignTextUtils.parameterText(params, "&", "signature");
switch (signUtils) {
case RSA:
data = SignUtils.SHA1.createSign(data, "", payConfigStorage.getInputCharset());
@@ -322,20 +325,20 @@ public class UnionPayService extends BasePayService<UnionPayConfigStorage> {
case RSA:
parameters.put(SDKConstants.param_signMethod, SDKConstants.SIGNMETHOD_RSA);
parameters.put(SDKConstants.param_certId, certDescriptor.getSignCertId());
signStr = SignUtils.SHA1.createSign(SignUtils.parameterText(parameters, "&", "signature"), "", payConfigStorage.getInputCharset());
signStr = SignUtils.SHA1.createSign(SignTextUtils.parameterText(parameters, "&", "signature"), "", payConfigStorage.getInputCharset());
parameters.put(SDKConstants.param_signature, RSA.sign(signStr, certDescriptor.getSignCertPrivateKey(payConfigStorage.getKeyPrivateCertPwd()), payConfigStorage.getInputCharset()));
break;
case RSA2:
parameters.put(SDKConstants.param_signMethod, SDKConstants.SIGNMETHOD_RSA);
parameters.put(SDKConstants.param_certId, certDescriptor.getSignCertId());
signStr = SignUtils.SHA256.createSign(SignUtils.parameterText(parameters, "&", "signature"), "", payConfigStorage.getInputCharset());
signStr = SignUtils.SHA256.createSign(SignTextUtils.parameterText(parameters, "&", "signature"), "", payConfigStorage.getInputCharset());
parameters.put(SDKConstants.param_signature, RSA2.sign(signStr, certDescriptor.getSignCertPrivateKey(payConfigStorage.getKeyPrivateCertPwd()), payConfigStorage.getInputCharset()));
break;
case SHA1:
case SHA256:
case SM3:
String key = payConfigStorage.getKeyPrivate();
signStr = SignUtils.parameterText(parameters, "&", "signature");
signStr = SignTextUtils.parameterText(parameters, "&", "signature");
key = signUtils.createSign(key, "", payConfigStorage.getInputCharset()) + "&";
parameters.put(SDKConstants.param_signature, signUtils.createSign(signStr, key, payConfigStorage.getInputCharset()));
break;
@@ -401,7 +404,7 @@ public class UnionPayService extends BasePayService<UnionPayConfigStorage> {
* @return 返回支付结果
*/
public JSONObject postOrder(PayOrder order, String url) {
public JSONObject postOrder(PayOrder order, String url) {
Map<String, Object> params = orderInfo(order);
String responseStr = getHttpRequestTemplate().postForObject(url, params, String.class);
JSONObject response = UriVariables.getParametersToMap(responseStr);
@@ -666,10 +669,8 @@ public class UnionPayService extends BasePayService<UnionPayConfigStorage> {
* @param fileType 文件类型 文件类型一般商户填写00即可
* @return 返回fileContent 请自行将数据落地
*/
@Deprecated
@Override
public Map<String, Object> downloadbill(Date billDate, String fileType) {
return downloadBill(billDate, new UnionPayBillType(fileType));
public Map<String, Object> downloadBill(Date billDate, String fileType) {
return downloadBill(billDate, new UnionPayBillType(fileType));
}
/**

View File

@@ -98,7 +98,7 @@ public class PayTest {
/*-----------文件传输类接口:后台获取对账文件交易,只有同步应答 ------------------------------*/
Map<String, Object> fileConten = service.downloadbill(new Date(), "文件类型一般商户填写00即可"); /*-----------退货交易:后台资金类交易,有同步应答和后台通知应答------------------------------*/
Map<String, Object> fileConten = service.downloadBill(new Date(), "文件类型一般商户填写00即可"); /*-----------退货交易:后台资金类交易,有同步应答和后台通知应答------------------------------*/
/*-----------回调处理-------------------*/

View File

@@ -26,6 +26,7 @@ import com.egzosn.pay.common.bean.result.PayError;
import com.egzosn.pay.common.exception.PayErrorException;
import com.egzosn.pay.common.http.HttpConfigStorage;
import com.egzosn.pay.common.util.Util;
import com.egzosn.pay.common.util.sign.SignTextUtils;
import com.egzosn.pay.common.util.sign.SignUtils;
import com.egzosn.pay.common.util.str.StringUtils;
import com.egzosn.pay.wx.youdian.bean.WxYoudianPayMessage;
@@ -80,7 +81,7 @@ public class WxYouDianPayService extends BasePayService<WxYouDianPayConfigStorag
login();
return payConfigStorage.getAccessToken();
}
String apbNonce = SignUtils.randomStr();
String apbNonce = SignTextUtils.randomStr();
StringBuilder param = new StringBuilder().append("access_token=").append(payConfigStorage.getAccessToken());
String sign = createSign(param.toString() + apbNonce, payConfigStorage.getInputCharset());
param.append("&apb_nonce=").append(apbNonce).append("&sign=").append(sign);
@@ -111,13 +112,13 @@ public class WxYouDianPayService extends BasePayService<WxYouDianPayConfigStorag
TreeMap<String, String> data = new TreeMap<>();
data.put("username", payConfigStorage.getSeller());
data.put("password", payConfigStorage.getKeyPrivate());
String apbNonce = SignUtils.randomStr();
String apbNonce = SignTextUtils.randomStr();
// 1、确定请求主体为用户登录即需要传登录的用户名username和密码password并且要生成唯一的随机数命名为apb_nonce长度为32位
// 2、将所有的参数集进行key排序
// 3、将排序后的数组从起始位置拼接成字符串如password=XXXXXXXusername=XXXXX
// 4、将拼接出来的字符串连接上apb_nonce的值即AAAAAAAAAA。再连接 password=XXXXXXXusername=XXXXXAAAAAAAAAA
String sign = createSign(SignUtils.parameterText(data, "") + apbNonce, payConfigStorage.getInputCharset());
String queryParam = SignUtils.parameterText(data) + "&apb_nonce=" + apbNonce + "&sign=" + sign;
String sign = createSign(SignTextUtils.parameterText(data, "") + apbNonce, payConfigStorage.getInputCharset());
String queryParam = SignTextUtils.parameterText(data) + "&apb_nonce=" + apbNonce + "&sign=" + sign;
JSONObject json = execute(getReqUrl(YoudianTransactionType.LOGIN) + "?" + queryParam, MethodType.GET, null);
payConfigStorage.updateAccessToken(json.getString("access_token"), json.getLongValue("viptime"));
@@ -249,10 +250,10 @@ public class WxYouDianPayService extends BasePayService<WxYouDianPayConfigStorag
data.put("paymoney", Util.conversionAmount(order.getPrice()).toString());
data.putAll(order.getAttrs());
data = preOrderHandler(data, order);
String apbNonce = SignUtils.randomStr();
String sign = createSign(SignUtils.parameterText(data, "") + apbNonce, payConfigStorage.getInputCharset());
String apbNonce = SignTextUtils.randomStr();
String sign = createSign(SignTextUtils.parameterText(data, "") + apbNonce, payConfigStorage.getInputCharset());
data.put("PayMoney", data.remove("paymoney"));
String params = SignUtils.parameterText(data) + "&apb_nonce=" + apbNonce + "&sign=" + sign;
String params = SignTextUtils.parameterText(data) + "&apb_nonce=" + apbNonce + "&sign=" + sign;
try {
JSONObject json = execute(getReqUrl(order.getTransactionType()) + "?" + params, MethodType.GET, null);
//友店比较特殊,需要在下完预订单后,自己存储 order_sn 对应 微信官方文档 out_trade_no
@@ -324,7 +325,7 @@ public class WxYouDianPayService extends BasePayService<WxYouDianPayConfigStorag
Map<String, Object> builder = new TreeMap<>();
builder.put("return_code", code.toUpperCase());
builder.put("return_msg", message);
builder.put("nonce_str", SignUtils.randomStr());
builder.put("nonce_str", SignTextUtils.randomStr());
String sgin = SignUtils.valueOf(payConfigStorage.getSignType()).sign(builder, "&key=" + payConfigStorage.getKeyPrivate(), payConfigStorage.getInputCharset());
return PayOutMessage.TEXT().content("{\"return_code\":\"" + builder.get("return_code") + "\",\"return_msg\":\"" + builder.get("return_msg") + "\",\"nonce_str\":\"" + builder.get("nonce_str") + "\",\"sign\":\"" + sgin + "\"}").build();
}
@@ -386,7 +387,7 @@ public class WxYouDianPayService extends BasePayService<WxYouDianPayConfigStorag
*/
@Override
public Map<String, Object> query(String tradeNo, String outTradeNo) {
String apbNonce = SignUtils.randomStr();
String apbNonce = SignTextUtils.randomStr();
TreeMap<String, String> data = new TreeMap<>();
data.put("access_token", payConfigStorage.getAccessToken());
@@ -396,8 +397,8 @@ public class WxYouDianPayService extends BasePayService<WxYouDianPayConfigStorag
else {
data.put("order_sn", tradeNo);
}
String sign = createSign(SignUtils.parameterText(data, "") + apbNonce, payConfigStorage.getInputCharset());
String queryParam = SignUtils.parameterText(data) + "&apb_nonce=" + apbNonce + "&sign=" + sign;
String sign = createSign(SignTextUtils.parameterText(data, "") + apbNonce, payConfigStorage.getInputCharset());
String queryParam = SignTextUtils.parameterText(data) + "&apb_nonce=" + apbNonce + "&sign=" + sign;
JSONObject jsonObject = execute(getReqUrl(YoudianTransactionType.NATIVE_STATUS) + "?" + queryParam, MethodType.GET, null);
return jsonObject;
}
@@ -417,7 +418,7 @@ public class WxYouDianPayService extends BasePayService<WxYouDianPayConfigStorag
*/
@Override
public RefundResult refund(RefundOrder refundOrder) {
String apbNonce = SignUtils.randomStr();
String apbNonce = SignTextUtils.randomStr();
TreeMap<String, String> data = new TreeMap<>();
data.put("access_token", payConfigStorage.getAccessToken());
@@ -430,8 +431,8 @@ public class WxYouDianPayService extends BasePayService<WxYouDianPayConfigStorag
//支付类型刷卡为3扫码为4
data.put("type", "4");
data.put("refund_fee", refundOrder.getRefundAmount().setScale(2, BigDecimal.ROUND_HALF_UP).toString());
String sign = createSign(SignUtils.parameterText(data, "") + apbNonce, payConfigStorage.getInputCharset());
String queryParam = SignUtils.parameterText(data) + "&apb_nonce=" + apbNonce + "&sign=" + sign;
String sign = createSign(SignTextUtils.parameterText(data, "") + apbNonce, payConfigStorage.getInputCharset());
String queryParam = SignTextUtils.parameterText(data) + "&apb_nonce=" + apbNonce + "&sign=" + sign;
JSONObject jsonObject = execute(getReqUrl(YoudianTransactionType.REFUND) + "?" + queryParam, MethodType.GET, null);
return new BaseRefundResult(jsonObject) {
@Override
@@ -494,13 +495,6 @@ public class WxYouDianPayService extends BasePayService<WxYouDianPayConfigStorag
}
@Deprecated
@Override
public Map<String, Object> downloadbill(Date billDate, String billType) {
return Collections.emptyMap();
}
@Override
public Map<String, Object> downloadBill(Date billDate, BillType billType) {

View File

@@ -217,7 +217,7 @@
#### 交易关闭接口
```java
Map result = service..close("微信单号", "我方系统单号");
Map result = service.close("微信单号", "我方系统单号");
```

View File

@@ -58,6 +58,7 @@ import com.egzosn.pay.common.http.UriVariables;
import com.egzosn.pay.common.util.DateUtils;
import com.egzosn.pay.common.util.Util;
import com.egzosn.pay.common.util.XML;
import com.egzosn.pay.common.util.sign.SignTextUtils;
import com.egzosn.pay.common.util.sign.SignUtils;
import com.egzosn.pay.common.util.sign.encrypt.RSA2;
import com.egzosn.pay.common.util.str.StringUtils;
@@ -171,7 +172,7 @@ public class WxPayService extends BasePayService<WxPayConfigStorage> implements
if (isTest) {
keyPrivate = getKeyPrivate();
}
String content = SignUtils.parameterText(params, "&", SIGN, "appId") + "&key=" + (signUtils == SignUtils.MD5 ? "" : keyPrivate);
String content = SignTextUtils.parameterText(params, "&", SIGN, "appId") + "&key=" + (signUtils == SignUtils.MD5 ? "" : keyPrivate);
return signUtils.verify(content, sign, keyPrivate, payConfigStorage.getInputCharset());
}
@@ -188,7 +189,7 @@ public class WxPayService extends BasePayService<WxPayConfigStorage> implements
//判断如果是服务商模式信息则加入
setParameters(parameters, "sub_mch_id", payConfigStorage.getSubMchId());
setParameters(parameters, "sub_appid", payConfigStorage.getSubAppId());
parameters.put(NONCE_STR, SignUtils.randomStr());
parameters.put(NONCE_STR, SignTextUtils.randomStr());
return parameters;
@@ -290,7 +291,7 @@ public class WxPayService extends BasePayService<WxPayConfigStorage> implements
params.put("noncestr", result.get(NONCE_STR));
params.put("package", "Sign=WXPay");
}
String paySign = createSign(SignUtils.parameterText(params), payConfigStorage.getInputCharset());
String paySign = createSign(SignTextUtils.parameterText(params), payConfigStorage.getInputCharset());
params.put(WxTransactionType.JSAPI.equals(order.getTransactionType()) ? "paySign" : SIGN, paySign);
return params;
}
@@ -311,7 +312,7 @@ public class WxPayService extends BasePayService<WxPayConfigStorage> implements
signTypeStr = SignUtils.HMACSHA256.getName();
}
parameters.put("sign_type", signTypeStr);
String sign = createSign(SignUtils.parameterText(parameters, "&", SIGN, "appId"), payConfigStorage.getInputCharset());
String sign = createSign(SignTextUtils.parameterText(parameters, "&", SIGN, "appId"), payConfigStorage.getInputCharset());
parameters.put(SIGN, sign);
return parameters;
}
@@ -328,9 +329,9 @@ public class WxPayService extends BasePayService<WxPayConfigStorage> implements
}
SortedMap<String, Object> parameters = new TreeMap<String, Object>();
parameters.put(MCH_ID, payConfigStorage.getMchId());
parameters.put(NONCE_STR, SignUtils.randomStr());
parameters.put(NONCE_STR, SignTextUtils.randomStr());
String sign = createSign(SignUtils.parameterText(parameters, "&", SIGN, "appId"), payConfigStorage.getInputCharset(), false);
String sign = createSign(SignTextUtils.parameterText(parameters, "&", SIGN, "appId"), payConfigStorage.getInputCharset(), false);
parameters.put(SIGN, sign);
HttpStringEntity entity = new HttpStringEntity(XML.getMap2Xml(parameters), ClientHttpRequest.APPLICATION_XML_UTF_8);
@@ -578,22 +579,8 @@ public class WxPayService extends BasePayService<WxPayConfigStorage> implements
* RECHARGE_REFUND返回当日充值退款订单
* @return 返回支付方下载对账单的结果
*/
@Deprecated
@Override
public Map<String, Object> downloadbill(Date billDate, String billType) {
Map<String, Object> parameters = getDownloadBillParam(billDate, billType, false);
//设置签名
setSign(parameters);
String respStr = requestTemplate.postForObject(getReqUrl(WxTransactionType.DOWNLOADBILL), XML.getMap2Xml(parameters), String.class);
if (respStr.indexOf("<") == 0) {
return XML.toJSONObject(respStr);
}
Map<String, Object> ret = new HashMap<String, Object>(3);
ret.put(RETURN_CODE, SUCCESS);
ret.put(RETURN_MSG_CODE, "ok");
ret.put("data", respStr);
return ret;
public Map<String, Object> downloadBill(Date billDate, String billType) {
return downloadBill(billDate, WxPayBillType.valueOf(billType));
}
/**
@@ -784,12 +771,12 @@ public class WxPayService extends BasePayService<WxPayConfigStorage> implements
* @param order 转账订单
* <pre>
*
* 注意事项:
* ◆ 当返回错误码为“SYSTEMERROR”时请不要更换商户订单号一定要使用原商户订单号重试否则可能造成重复支付等资金风险。
* ◆ XML具有可扩展性因此返回参数可能会有新增而且顺序可能不完全遵循此文档规范如果在解析回包的时候发生错误请商户务必不要换单重试请商户联系客服确认付款情况。如果有新回包字段会更新到此API文档中。
* ◆ 因为错误代码字段err_code的值后续可能会增加所以商户如果遇到回包返回新的错误码请商户务必不要换单重试请商户联系客服确认付款情况。如果有新的错误码会更新到此API文档中。
* ◆ 错误代码描述字段err_code_des只供人工定位问题时做参考系统实现时请不要依赖这个字段来做自动化处理。
* </pre>
* 注意事项:
* ◆ 当返回错误码为“SYSTEMERROR”时请不要更换商户订单号一定要使用原商户订单号重试否则可能造成重复支付等资金风险。
* ◆ XML具有可扩展性因此返回参数可能会有新增而且顺序可能不完全遵循此文档规范如果在解析回包的时候发生错误请商户务必不要换单重试请商户联系客服确认付款情况。如果有新回包字段会更新到此API文档中。
* ◆ 因为错误代码字段err_code的值后续可能会增加所以商户如果遇到回包返回新的错误码请商户务必不要换单重试请商户联系客服确认付款情况。如果有新的错误码会更新到此API文档中。
* ◆ 错误代码描述字段err_code_des只供人工定位问题时做参考系统实现时请不要依赖这个字段来做自动化处理。
* </pre>
* @return 对应的转账结果
*/
@Override
@@ -802,7 +789,7 @@ public class WxPayService extends BasePayService<WxPayConfigStorage> implements
if (!StringUtils.isEmpty(order.getRemark())) {
parameters.put("desc", order.getRemark());
}
parameters.put(NONCE_STR, SignUtils.randomStr());
parameters.put(NONCE_STR, SignTextUtils.randomStr());
if (null != order.getTransferType() && TRANSFERS == order.getTransferType()) {
transfers(parameters, order);
parameters.put("mchid", payConfigStorage.getPid());
@@ -812,7 +799,7 @@ public class WxPayService extends BasePayService<WxPayConfigStorage> implements
order.setTransferType(WxTransferType.PAY_BANK);
payBank(parameters, order);
}
parameters.put(SIGN, createSign(SignUtils.parameterText(parameters, "&", SIGN), payConfigStorage.getInputCharset()));
parameters.put(SIGN, createSign(SignTextUtils.parameterText(parameters, "&", SIGN), payConfigStorage.getInputCharset()));
return getHttpRequestTemplate().postForObject(getReqUrl(order.getTransferType()), XML.getMap2Xml(parameters), JSONObject.class);
}
@@ -875,17 +862,17 @@ public class WxPayService extends BasePayService<WxPayConfigStorage> implements
Map<String, Object> parameters = new TreeMap<String, Object>();
parameters.put(MCH_ID, payConfigStorage.getPid());
parameters.put("partner_trade_no", outNo);
parameters.put(NONCE_STR, SignUtils.randomStr());
parameters.put(NONCE_STR, SignTextUtils.randomStr());
if (StringUtils.isEmpty(wxTransferType)) {
throw new PayErrorException(new WxPayError(FAILURE, "微信转账类型 #transferQuery(String outNo, String wxTransferType) 必填详情com.egzosn.pay.wx.bean.WxTransferType"));
}
//如果类型为余额方式
if (TRANSFERS.getType().equals(wxTransferType) || GETTRANSFERINFO.getType().equals(wxTransferType)) {
parameters.put(APPID, payConfigStorage.getAppId());
parameters.put(SIGN, createSign(SignUtils.parameterText(parameters, "&", SIGN), payConfigStorage.getInputCharset()));
parameters.put(APPID, payConfigStorage.getAppId());
parameters.put(SIGN, createSign(SignTextUtils.parameterText(parameters, "&", SIGN), payConfigStorage.getInputCharset()));
return getHttpRequestTemplate().postForObject(getReqUrl(GETTRANSFERINFO), XML.getMap2Xml(parameters), JSONObject.class);
}
parameters.put(SIGN, createSign(SignUtils.parameterText(parameters, "&", SIGN), payConfigStorage.getInputCharset()));
parameters.put(SIGN, createSign(SignTextUtils.parameterText(parameters, "&", SIGN), payConfigStorage.getInputCharset()));
//默认查询银行卡的记录
return getHttpRequestTemplate().postForObject(getReqUrl(QUERY_BANK), XML.getMap2Xml(parameters), JSONObject.class);
}
@@ -932,7 +919,7 @@ public class WxPayService extends BasePayService<WxPayConfigStorage> implements
parameters.put("notify_way", "MINI_PROGRAM_JSAPI");
}
parameters.put(SIGN, createSign(SignUtils.parameterText(parameters, "&", SIGN), payConfigStorage.getInputCharset()));
parameters.put(SIGN, createSign(SignTextUtils.parameterText(parameters, "&", SIGN), payConfigStorage.getInputCharset()));
final JSONObject resp = requestTemplate.postForObject(getReqUrl(redpackOrder.getTransferType()), XML.getMap2Xml(parameters), JSONObject.class);
if (WxSendredpackType.SENDMINIPROGRAMHB != transferType || FAIL.equals(resp.getString(RESULT_CODE))) {
return resp;
@@ -942,7 +929,7 @@ public class WxPayService extends BasePayService<WxPayConfigStorage> implements
params.put("timeStamp", System.currentTimeMillis() / 1000 + "");
params.put("nonceStr", parameters.get(NONCE_STR));
params.put("package", UriVariables.urlEncoder(resp.getString("package")));
String paySign = createSign(SignUtils.parameterText(params), payConfigStorage.getInputCharset());
String paySign = createSign(SignTextUtils.parameterText(params), payConfigStorage.getInputCharset());
params.put("signType", payConfigStorage.getSignType());
params.put("paySign", paySign);
return params;
@@ -963,7 +950,7 @@ public class WxPayService extends BasePayService<WxPayConfigStorage> implements
Map<String, Object> parameters = this.getPublicParameters();
parameters.put("mch_billno", mchBillno);
parameters.put("bill_type", "MCHT");
parameters.put(SIGN, createSign(SignUtils.parameterText(parameters, "&", SIGN), payConfigStorage.getInputCharset()));
parameters.put(SIGN, createSign(SignTextUtils.parameterText(parameters, "&", SIGN), payConfigStorage.getInputCharset()));
return requestTemplate.postForObject(getReqUrl(WxSendredpackType.GETHBINFO), XML.getMap2Xml(parameters), JSONObject.class);
}
@@ -974,7 +961,7 @@ public class WxPayService extends BasePayService<WxPayConfigStorage> implements
* @param parameters 接收参数
*/
private void redPackParam(RedpackOrder redpackOrder, Map<String, Object> parameters) {
parameters.put(NONCE_STR, SignUtils.randomStr());
parameters.put(NONCE_STR, SignTextUtils.randomStr());
parameters.put(MCH_ID, payConfigStorage.getPid());
parameters.put("wxappid", payConfigStorage.getAppId());
parameters.put("send_name", redpackOrder.getSendName());

View File

@@ -23,6 +23,7 @@ import com.egzosn.pay.common.bean.TransferOrder;
import com.egzosn.pay.common.http.HttpConfigStorage;
import com.egzosn.pay.common.util.DateUtils;
import com.egzosn.pay.common.util.Util;
import com.egzosn.pay.common.util.sign.SignTextUtils;
import com.egzosn.pay.common.util.sign.SignUtils;
import com.egzosn.pay.common.util.str.StringUtils;
import com.egzosn.pay.yiji.bean.YiJiTransactionType;
@@ -120,7 +121,7 @@ public class YiJiPayService extends BasePayService<YiJiPayConfigStorage> {
*/
private Map<String, Object> setSign(Map<String, Object> parameters) {
parameters.put("signType", payConfigStorage.getSignType());
String sign = createSign(SignUtils.parameterText(parameters, "&", SIGN), payConfigStorage.getInputCharset());
String sign = createSign(SignTextUtils.parameterText(parameters, "&", SIGN), payConfigStorage.getInputCharset());
parameters.put(SIGN, sign);
return parameters;
@@ -363,22 +364,8 @@ public class YiJiPayService extends BasePayService<YiJiPayConfigStorage> {
}
/**
* 目前只支持日账单
*
* @param billDate 账单类型商户通过接口或商户经开放平台授权后其所属服务商通过接口可以获取以下账单类型trade、signcustomertrade指商户基于易极付交易收单的业务账单signcustomer是指基于商户易极付余额收入及支出等资金变动的帐务账单
* @param billType 账单时间日账单格式为yyyy-MM-dd月账单格式为yyyy-MM。
* @return 返回支付方下载对账单的结果
*/
@Deprecated
@Override
public Map<String, Object> downloadbill(Date billDate, String billType) {
return Collections.emptyMap();
}
/**
* 目前只支持日账单
*
* @param billDate 账单类型商户通过接口或商户经开放平台授权后其所属服务商通过接口可以获取以下账单类型trade、signcustomertrade指商户基于易极付交易收单的业务账单signcustomer是指基于商户易极付余额收入及支出等资金变动的帐务账单
* @param billType 账单时间日账单格式为yyyy-MM-dd月账单格式为yyyy-MM。