发起支付简化交易类型,方法能够确定交易类型的全部以方法为基准,如果自行设置了但发现不一样就报错提示

This commit is contained in:
egzosn
2019-12-08 21:01:23 +08:00
parent 99895bf540
commit 9c447db949
8 changed files with 84 additions and 34 deletions

View File

@@ -200,7 +200,6 @@ public class AliPayService extends BasePayService<AliPayConfigStorage> {
bizContent.put("total_amount", Util.conversionAmount(order.getPrice()).toString());
switch ((AliTransactionType) order.getTransactionType()) {
case PAGE:
case DIRECT:
bizContent.put(PASSBACK_PARAMS, order.getAddition());
bizContent.put(PRODUCT_CODE, "FAST_INSTANT_TRADE_PAY");
orderInfo.put(RETURN_URL, payConfigStorage.getReturnUrl());
@@ -272,6 +271,16 @@ public class AliPayService extends BasePayService<AliPayConfigStorage> {
return PayOutMessage.TEXT().content("success").build();
}
@Override
public String toPay(PayOrder order) {
if (null == order.getTransactionType()) {
order.setTransactionType(AliTransactionType.PAGE);
} else if (order.getTransactionType() != AliTransactionType.PAGE && order.getTransactionType() != AliTransactionType.WAP) {
throw new PayErrorException(new PayException("-1", "错误的交易类型:" + order.getTransactionType()));
}
return super.toPay(order);
}
/**
* @param orderInfo 发起支付的订单信息
* @param method 请求方式 "post" "get",
@@ -301,6 +310,7 @@ public class AliPayService extends BasePayService<AliPayConfigStorage> {
*/
@Override
public String getQrPay(PayOrder order){
order.setTransactionType(AliTransactionType.SWEEPPAY);
Map<String, Object> orderInfo = orderInfo(order);
//预订单
JSONObject result = getHttpRequestTemplate().postForObject(getReqUrl() + "?" + UriVariables.getMapToParameters(orderInfo), null, JSONObject.class);
@@ -320,6 +330,12 @@ public class AliPayService extends BasePayService<AliPayConfigStorage> {
*/
@Override
public Map<String, Object> microPay(PayOrder order) {
if (null == order.getTransactionType()){
order.setTransactionType(AliTransactionType.BAR_CODE);
}else if (order.getTransactionType() != AliTransactionType.BAR_CODE && order.getTransactionType() != AliTransactionType.WAVE_CODE && order.getTransactionType() != AliTransactionType.SECURITY_CODE){
throw new PayErrorException(new PayException("-1", "错误的交易类型:" + order.getTransactionType()));
}
Map<String, Object> orderInfo = orderInfo(order);
//预订单
JSONObject result = getHttpRequestTemplate().postForObject(getReqUrl() + "?" + UriVariables.getMapToParameters(orderInfo), null, JSONObject.class);

View File

@@ -18,12 +18,7 @@ import com.egzosn.pay.common.bean.TransactionType;
* date 2016/10/19 22:58
*/
public enum AliTransactionType implements TransactionType {
/**
* 即时到帐
* 过时的名称,请换至 {@link #PAGE}
*/
@Deprecated
DIRECT("alipay.trade.page.pay"),
/**
* 网页支付
*/

View File

@@ -9,6 +9,8 @@ import com.egzosn.pay.common.util.DateUtils;
import com.egzosn.pay.common.util.Util;
import com.egzosn.pay.common.util.sign.SignUtils;
import com.egzosn.pay.common.util.str.StringUtils;
import com.egzosn.pay.fuiou.bean.FuiouTransactionType;
import java.awt.image.BufferedImage;
import java.io.InputStream;
import java.math.BigDecimal;
@@ -134,7 +136,7 @@ public class FuiouPayService extends BasePayService<FuiouPayConfigStorage> {
*/
@Override
public boolean verifySource(String orderId) {
LinkedHashMap<String, Object> params = new LinkedHashMap<>();
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()));
@@ -153,6 +155,10 @@ public class FuiouPayService extends BasePayService<FuiouPayConfigStorage> {
*/
@Override
public Map<String, Object> orderInfo(PayOrder order) {
if (null == order.getTransactionType()){
order.setTransactionType(FuiouTransactionType.B2C);
}
Map<String, Object> parameters = getOrderInfo(order);
String sign = createSign(SignUtils.parameters2MD5Str(parameters, "|"), payConfigStorage.getInputCharset());
parameters.put("md5", sign);
@@ -165,6 +171,7 @@ public class FuiouPayService extends BasePayService<FuiouPayConfigStorage> {
* @return 返回支付请求参数集合
*/
private Map<String, Object> getOrderInfo(PayOrder order) {
LinkedHashMap<String, Object> parameters = new LinkedHashMap<String, Object>();
//商户代码
parameters.put("mchnt_cd", payConfigStorage.getPid());

View File

@@ -263,6 +263,8 @@ public class PayoneerPayService extends BasePayService<PayoneerConfigStorage> im
*/
@Override
public Map<String, Object> microPay(PayOrder order) {
order.setTransactionType(PayoneerTransactionType.CHARGE);
HttpStringEntity entity = new HttpStringEntity(JSON.toJSONString(orderInfo(order)), ContentType.APPLICATION_JSON);
//设置 base atuh
entity.setHeaders(authHeader());

View File

@@ -146,6 +146,10 @@ public class PayPalPayService extends BasePayService<PayPalConfigStorage>{
*/
@Override
public Map<String, Object> orderInfo(PayOrder order) {
if (null == order.getTransactionType()){
order.setTransactionType(PayPalTransactionType.sale);
}
Amount amount = new Amount();
if (null == order.getCurType()){
order.setCurType(DefaultCurType.USD);

View File

@@ -379,6 +379,18 @@ public class UnionPayService extends BasePayService<UnionPayConfigStorage> {
return null;
}
@Override
public String toPay(PayOrder order) {
if (null == order.getTransactionType()){
order.setTransactionType(UnionTransactionType.WEB);
}else if (UnionTransactionType.WEB != order.getTransactionType() && UnionTransactionType.WAP != order.getTransactionType() && UnionTransactionType.B2B != order.getTransactionType()){
throw new PayErrorException(new PayException("-1", "错误的交易类型:" + order.getTransactionType()));
}
return super.toPay(order);
}
/**
* 获取输出二维码,用户返回给支付端,
*
@@ -387,6 +399,7 @@ public class UnionPayService extends BasePayService<UnionPayConfigStorage> {
*/
@Override
public String getQrPay(PayOrder order) {
order.setTransactionType(UnionTransactionType.APPLY_QR_CODE);
Map<String, Object> params = orderInfo(order);
String responseStr = getHttpRequestTemplate().postForObject(this.getBackTransUrl(), params, String.class);
Map<String, Object> response = UriVariables.getParametersToMap(responseStr);
@@ -411,6 +424,7 @@ public class UnionPayService extends BasePayService<UnionPayConfigStorage> {
*/
@Override
public Map<String, Object> microPay(PayOrder order) {
order.setTransactionType(UnionTransactionType.CONSUME);
Map<String, Object> params = orderInfo(order);
String responseStr = getHttpRequestTemplate().postForObject(this.getBackTransUrl(), params, String.class);
return UriVariables.getParametersToMap(responseStr);

View File

@@ -336,6 +336,7 @@ public class WxYouDianPayService extends BasePayService<WxYouDianPayConfigStorag
@Override
public String getQrPay(PayOrder order) {
order.setTransactionType(YoudianTransactionType.NATIVE);
JSONObject orderInfo = orderInfo(order);
return (String) orderInfo.get("code_url");
}
@@ -347,6 +348,7 @@ public class WxYouDianPayService extends BasePayService<WxYouDianPayConfigStorag
*/
@Override
public Map<String, Object> microPay(PayOrder order) {
order.setTransactionType(YoudianTransactionType.MICROPAY);
JSONObject orderInfo = orderInfo(order);
return orderInfo;
}

View File

@@ -31,7 +31,7 @@ import static com.egzosn.pay.wx.bean.WxTransferType.*;
* 微信支付服务
*
* @author egan
* <pre>
* <pre>
* email egzosn@gmail.com
* date 2016-5-18 14:09:01
* </pre>
@@ -95,6 +95,7 @@ public class WxPayService extends BasePayService<WxPayConfigStorage> {
this.payConfigStorage = payConfigStorage;
return this;
}
/**
* 根据交易类型获取url
*
@@ -222,7 +223,7 @@ public class WxPayService extends BasePayService<WxPayConfigStorage> {
parameters.put("time_expire", DateUtils.formatDate(order.getExpirationTime(), DateUtils.YYYYMMDDHHMMSS));
}
((WxTransactionType) order.getTransactionType()).setAttribute(parameters, order);
parameters = preOrderHandler(parameters, order);
parameters = preOrderHandler(parameters, order);
setSign(parameters);
String requestXML = XML.getMap2Xml(parameters);
@@ -275,7 +276,7 @@ public class WxPayService extends BasePayService<WxPayConfigStorage> {
params.put("noncestr", result.get(NONCE_STR));
params.put("package", "Sign=WXPay");
}
params = preOrderHandler(params, order);
params = preOrderHandler(params, order);
String paySign = createSign(SignUtils.parameterText(params), payConfigStorage.getInputCharset());
params.put(SIGN, paySign);
return params;
@@ -291,11 +292,12 @@ public class WxPayService extends BasePayService<WxPayConfigStorage> {
* @return 请求参数
*/
private Map<String, Object> setSign(Map<String, Object> parameters) {
String signType = payConfigStorage.getSignType();
if (HMACSHA256.equals(signType)) {
signType = HMAC_SHA256;
String signTypeStr = payConfigStorage.getSignType();
if (HMACSHA256.equals(signTypeStr)) {
signTypeStr = SignUtils.HMACSHA256.getName();
}
parameters.put("sign_type", signType);
parameters.put("sign_type", signTypeStr);
String sign = createSign(SignUtils.parameterText(parameters, "&", SIGN, "appId"), payConfigStorage.getInputCharset());
parameters.put(SIGN, sign);
return parameters;
@@ -338,21 +340,22 @@ public class WxPayService extends BasePayService<WxPayConfigStorage> {
return createSign(content, characterEncoding, payConfigStorage.isTest());
}
/**
* 签名
*
* @param content 需要签名的内容 不包含key
* @param characterEncoding 字符编码
* @param test 是否为沙箱环境
* @param test 是否为沙箱环境
* @return 签名结果
*/
public String createSign(String content, String characterEncoding, boolean test) {
SignUtils signUtils = SignUtils.valueOf(payConfigStorage.getSignType().toUpperCase());
SignType signType = SignUtils.valueOf(payConfigStorage.getSignType().toUpperCase());
String keyPrivate = payConfigStorage.getKeyPrivate();
if (test){
if (test) {
keyPrivate = getKeyPrivate();
}
return signUtils.createSign(content + "&key=" + (signUtils == SignUtils.MD5 ? "" : keyPrivate), keyPrivate, characterEncoding).toUpperCase();
return signType.createSign(content + "&key=" + (signType == SignUtils.MD5 ? "" : keyPrivate), keyPrivate, characterEncoding).toUpperCase();
}
/**
@@ -426,14 +429,16 @@ public class WxPayService extends BasePayService<WxPayConfigStorage> {
* @return 返回二维码信息,,支付时需要的
*/
@Override
public String getQrPay(PayOrder order){
public String getQrPay(PayOrder order) {
order.setTransactionType(WxTransactionType.NATIVE);
Map<String, Object> orderInfo = orderInfo(order);
//获取对应的支付账户操作工具可根据账户id
if (!SUCCESS.equals(orderInfo.get(RESULT_CODE))) {
throw new PayErrorException(new WxPayError((String)orderInfo.get("err_code"), orderInfo.toString()));
throw new PayErrorException(new WxPayError((String) orderInfo.get("err_code"), orderInfo.toString()));
}
return (String) orderInfo.get("code_url");
}
/**
* 刷卡付,pos主动扫码付款
*
@@ -442,7 +447,12 @@ public class WxPayService extends BasePayService<WxPayConfigStorage> {
*/
@Override
public Map<String, Object> microPay(PayOrder order) {
if (null == order.getTransactionType()) {
order.setTransactionType(WxTransactionType.MICROPAY);
} else if (WxTransactionType.MICROPAY != order.getTransactionType() && WxTransactionType.FACEPAY != order.getTransactionType()) {
throw new PayErrorException(new PayException("-1", "错误的交易类型:" + order.getTransactionType()));
}
return orderInfo(order);
}
@@ -527,7 +537,7 @@ public class WxPayService extends BasePayService<WxPayConfigStorage> {
parameters.put("total_fee", Util.conversionCentAmount(refundOrder.getTotalAmount()));
parameters.put("refund_fee", Util.conversionCentAmount(refundOrder.getRefundAmount()));
parameters.put("op_user_id", payConfigStorage.getPid());
setParameters(parameters, "notify_url", payConfigStorage.getNotifyUrl());
setParameters(parameters, "notify_url", payConfigStorage.getNotifyUrl());
//设置签名
setSign(parameters);
@@ -563,7 +573,7 @@ public class WxPayService extends BasePayService<WxPayConfigStorage> {
setParameters(parameters, "out_refund_no", refundOrder.getRefundNo());
//设置签名
setSign(parameters);
return requestTemplate.postForObject(getReqUrl( WxTransactionType.REFUNDQUERY), XML.getMap2Xml(parameters) , JSONObject.class);
return requestTemplate.postForObject(getReqUrl(WxTransactionType.REFUNDQUERY), XML.getMap2Xml(parameters), JSONObject.class);
}
@@ -633,7 +643,7 @@ public class WxPayService extends BasePayService<WxPayConfigStorage> {
}
//设置签名
setSign(parameters);
return requestTemplate.postForObject(getReqUrl(transactionType), XML.getMap2Xml(parameters) , JSONObject.class);
return requestTemplate.postForObject(getReqUrl(transactionType), XML.getMap2Xml(parameters), JSONObject.class);
}
/**
@@ -642,13 +652,13 @@ public class WxPayService extends BasePayService<WxPayConfigStorage> {
* @param order 转账订单
* <pre>
*
* 注意事项:
* ◆ 当返回错误码为“SYSTEMERROR”时请不要更换商户订单号一定要使用原商户订单号重试否则可能造成重复支付等资金风险。
* ◆ XML具有可扩展性因此返回参数可能会有新增而且顺序可能不完全遵循此文档规范如果在解析回包的时候发生错误请商户务必不要换单重试请商户联系客服确认付款情况。如果有新回包字段会更新到此API文档中。
* ◆ 因为错误代码字段err_code的值后续可能会增加所以商户如果遇到回包返回新的错误码请商户务必不要换单重试请商户联系客服确认付款情况。如果有新的错误码会更新到此API文档中。
* ◆ 错误代码描述字段err_code_des只供人工定位问题时做参考系统实现时请不要依赖这个字段来做自动化处理。
* 注意事项:
* ◆ 当返回错误码为“SYSTEMERROR”时请不要更换商户订单号一定要使用原商户订单号重试否则可能造成重复支付等资金风险。
* ◆ XML具有可扩展性因此返回参数可能会有新增而且顺序可能不完全遵循此文档规范如果在解析回包的时候发生错误请商户务必不要换单重试请商户联系客服确认付款情况。如果有新回包字段会更新到此API文档中。
* ◆ 因为错误代码字段err_code的值后续可能会增加所以商户如果遇到回包返回新的错误码请商户务必不要换单重试请商户联系客服确认付款情况。如果有新的错误码会更新到此API文档中。
* ◆ 错误代码描述字段err_code_des只供人工定位问题时做参考系统实现时请不要依赖这个字段来做自动化处理。
*
* </pre>
* </pre>
* @return 对应的转账结果
*/
@Override
@@ -672,7 +682,7 @@ public class WxPayService extends BasePayService<WxPayConfigStorage> {
}
parameters.put(SIGN, createSign(SignUtils.parameterText(parameters, "&", SIGN), payConfigStorage.getInputCharset()));
return getHttpRequestTemplate().postForObject(getReqUrl(order.getTransferType()), XML.getMap2Xml(parameters), JSONObject.class);
return getHttpRequestTemplate().postForObject(getReqUrl(order.getTransferType()), XML.getMap2Xml(parameters), JSONObject.class);
}
/**
@@ -740,11 +750,11 @@ public class WxPayService extends BasePayService<WxPayConfigStorage> {
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)){
return getHttpRequestTemplate().postForObject(getReqUrl(GETTRANSFERINFO), XML.getMap2Xml(parameters), JSONObject.class);
if (TRANSFERS.getType().equals(wxTransferType) || GETTRANSFERINFO.getType().equals(wxTransferType)) {
return getHttpRequestTemplate().postForObject(getReqUrl(GETTRANSFERINFO), XML.getMap2Xml(parameters), JSONObject.class);
}
//默认查询银行卡的记录
return getHttpRequestTemplate().postForObject(getReqUrl(QUERY_BANK), XML.getMap2Xml(parameters), JSONObject.class);
return getHttpRequestTemplate().postForObject(getReqUrl(QUERY_BANK), XML.getMap2Xml(parameters), JSONObject.class);
}