新增 辅助订单实体并对其所有支付实现

This commit is contained in:
egzosn
2021-10-06 23:29:54 +08:00
parent 4d00aae8a9
commit 9db3f5a76d
19 changed files with 371 additions and 393 deletions

View File

@@ -30,8 +30,9 @@ import com.egzosn.pay.ali.bean.AliTransferType;
import com.egzosn.pay.ali.bean.CertEnvironment;
import com.egzosn.pay.ali.bean.OrderSettle;
import com.egzosn.pay.common.api.BasePayService;
import com.egzosn.pay.common.bean.AssistOrder;
import com.egzosn.pay.common.bean.BillType;
import com.egzosn.pay.common.bean.CloseOrder;
import com.egzosn.pay.common.bean.MethodType;
import com.egzosn.pay.common.bean.NoticeParams;
import com.egzosn.pay.common.bean.Order;
@@ -256,7 +257,7 @@ public class AliPayService extends BasePayService<AliPayConfigStorage> {
//产品码。
//商家和支付宝签约的产品码。 枚举值(点击查看签约情况):
//QUICK_WAP_WAY无线快捷支付产品。
//默认值为QUICK_WAP_PAY。
//默认值为QUICK_WAP_PAY。
bizContent.put(PRODUCT_CODE, "QUICK_WAP_PAY");
OrderParaStructure.loadParameters(bizContent, PRODUCT_CODE, order);
setReturnUrl(orderInfo, order);
@@ -470,6 +471,18 @@ public class AliPayService extends BasePayService<AliPayConfigStorage> {
}
/**
* 交易查询接口
*
* @param assistOrder 查询条件
* @return 返回查询回来的结果集,支付方原值返回
*/
@Override
public Map<String, Object> query(AssistOrder assistOrder) {
return secondaryInterface(assistOrder.getTradeNo(), assistOrder.getOutTradeNo(), AliTransactionType.QUERY);
}
/**
* 交易关闭接口
@@ -486,12 +499,12 @@ public class AliPayService extends BasePayService<AliPayConfigStorage> {
/**
* 交易关闭接口
*
* @param closeOrder 关闭订单
* @param assistOrder 关闭订单
* @return 返回支付方交易关闭后的结果
*/
@Override
public Map<String, Object> close(CloseOrder closeOrder){
return secondaryInterface(closeOrder.getTradeNo(), closeOrder.getOutTradeNo(), AliTransactionType.CLOSE);
public Map<String, Object> close(AssistOrder assistOrder){
return secondaryInterface(assistOrder.getTradeNo(), assistOrder.getOutTradeNo(), AliTransactionType.CLOSE);
}
/**

View File

@@ -23,9 +23,9 @@ import com.egzosn.pay.baidu.bean.BaiduTransactionType;
import com.egzosn.pay.baidu.bean.type.AuditStatus;
import com.egzosn.pay.baidu.util.Asserts;
import com.egzosn.pay.common.api.BasePayService;
import com.egzosn.pay.common.bean.AssistOrder;
import com.egzosn.pay.common.bean.BaseRefundResult;
import com.egzosn.pay.common.bean.BillType;
import com.egzosn.pay.common.bean.CloseOrder;
import com.egzosn.pay.common.bean.CurType;
import com.egzosn.pay.common.bean.MethodType;
import com.egzosn.pay.common.bean.NoticeParams;
@@ -428,6 +428,17 @@ public class BaiduPayService extends BasePayService<BaiduPayConfigStorage> {
return secondaryInterface(tradeNo, outTradeNo, BaiduTransactionType.PAY_QUERY);
}
/**
* 交易查询接口
*
* @param assistOrder 查询条件
* @return 返回查询回来的结果集,支付方原值返回
*/
@Override
public Map<String, Object> query(AssistOrder assistOrder) {
return secondaryInterface(assistOrder.getTradeNo(), assistOrder.getOutTradeNo(), BaiduTransactionType.PAY_QUERY);
}
/**
* 百度不支持该操作
*
@@ -442,11 +453,11 @@ public class BaiduPayService extends BasePayService<BaiduPayConfigStorage> {
/**
* 交易关闭接口
*
* @param closeOrder 关闭订单
* @param assistOrder 关闭订单
* @return 返回支付方交易关闭后的结果
*/
@Override
public Map<String, Object> close(CloseOrder closeOrder){
public Map<String, Object> close(AssistOrder assistOrder){
throw new UnsupportedOperationException("不支持该操作");
}

View File

@@ -257,6 +257,7 @@ public abstract class BasePayService<PC extends PayConfigStorage> implements Pay
* @param <T> 返回类型
* @return 返回支付方交易关闭后的结果
*/
@Deprecated
@Override
public <T> T close(String tradeNo, String outTradeNo, Callback<T> callback) {
return callback.perform(close(tradeNo, outTradeNo));
@@ -431,7 +432,6 @@ public abstract class BasePayService<PC extends PayConfigStorage> implements Pay
return payBack(new DefaultNoticeRequest(parameterMap, is));
}
/**
* 回调处理
*
@@ -448,31 +448,7 @@ public abstract class BasePayService<PC extends PayConfigStorage> implements Pay
return getPayOutMessage("fail", "失败");
}
PayMessage payMessage = this.createMessage(noticeParams.getBody());
Map<String, Object> context = new HashMap<String, Object>();
for (PayMessageInterceptor interceptor : interceptors) {
if (!interceptor.intercept(payMessage, context, this)) {
return successPayOutMessage(payMessage);
}
}
return getPayMessageHandler().handle(payMessage, context, this);
}
/**
* 使用转换过的参数进行回调处理
*
* @param data 转化后的参数Map
* @return 获得回调响应信息
*/
@Override
public PayOutMessage payBack(Map<String, Object> data) {
if (LOG.isDebugEnabled()) {
LOG.debug("回调响应:" + JSON.toJSONString(data));
}
if (!verify(data)) {
return getPayOutMessage("fail", "失败");
}
PayMessage payMessage = this.createMessage(data);
Map<String, Object> context = new HashMap<String, Object>();
Map<String, Object> context = new HashMap<>();
for (PayMessageInterceptor interceptor : interceptors) {
if (!interceptor.intercept(payMessage, context, this)) {
return successPayOutMessage(payMessage);

View File

@@ -5,8 +5,9 @@ import java.io.InputStream;
import java.util.Date;
import java.util.Map;
import com.egzosn.pay.common.bean.AssistOrder;
import com.egzosn.pay.common.bean.BillType;
import com.egzosn.pay.common.bean.CloseOrder;
import com.egzosn.pay.common.bean.MethodType;
import com.egzosn.pay.common.bean.NoticeParams;
import com.egzosn.pay.common.bean.NoticeRequest;
@@ -67,6 +68,7 @@ public interface PayService<PC extends PayConfigStorage> {
* 已过时方法,详情{@link #verify(NoticeParams)}
* @param params 回调回来的参数集
* @return 签名校验 true通过
* @see #verify(NoticeParams)
*/
@Deprecated
boolean verify(Map<String, Object> params);
@@ -124,6 +126,7 @@ public interface PayService<PC extends PayConfigStorage> {
* @param parameterMap 请求参数
* @param is 请求流
* @return 获得回调的请求参数
* @see #getNoticeParams(NoticeRequest)
*/
@Deprecated
Map<String, Object> getParameter2Map(Map<String, String[]> parameterMap, InputStream is);
@@ -199,7 +202,9 @@ public interface PayService<PC extends PayConfigStorage> {
* @param tradeNo 支付平台订单号
* @param outTradeNo 商户单号
* @return 返回查询回来的结果集,支付方原值返回
* @see #query(AssistOrder)
*/
@Deprecated
Map<String, Object> query(String tradeNo, String outTradeNo);
/**
@@ -211,25 +216,38 @@ public interface PayService<PC extends PayConfigStorage> {
* @param <T> 返回类型
* @return 返回查询回来的结果集
*/
@Deprecated
<T> T query(String tradeNo, String outTradeNo, Callback<T> callback);
/**
* 交易查询接口
*
* @param assistOrder 查询条件
* @return 返回查询回来的结果集,支付方原值返回
*/
Map<String, Object> query(AssistOrder assistOrder);
/**
* 交易关闭接口
*
* @param tradeNo 支付平台订单号
* @param outTradeNo 商户单号
* @return 返回支付方交易关闭后的结果
* @see #close(CloseOrder)
* @see #close(AssistOrder)
*/
@Deprecated
Map<String, Object> close(String tradeNo, String outTradeNo);
/**
* 交易关闭接口
*
* @param closeOrder 关闭订单
* @param assistOrder 关闭订单
* @return 返回支付方交易关闭后的结果
*/
Map<String, Object> close(CloseOrder closeOrder);
Map<String, Object> close(AssistOrder assistOrder);
/**
@@ -241,8 +259,10 @@ public interface PayService<PC extends PayConfigStorage> {
* @param <T> 返回类型
* @return 返回支付方交易关闭后的结果
*/
@Deprecated
<T> T close(String tradeNo, String outTradeNo, Callback<T> callback);
/**
* 交易交易撤销
*
@@ -261,6 +281,7 @@ public interface PayService<PC extends PayConfigStorage> {
* @param <T> 返回类型
* @return 返回支付方交易撤销后的结果
*/
@Deprecated
<T> T cancel(String tradeNo, String outTradeNo, Callback<T> callback);
@@ -280,6 +301,7 @@ public interface PayService<PC extends PayConfigStorage> {
* @param <T> 返回类型
* @return 返回支付方申请退款后的结果
*/
@Deprecated
<T> T refund(RefundOrder refundOrder, Callback<T> callback);
@@ -299,6 +321,7 @@ public interface PayService<PC extends PayConfigStorage> {
* @param <T> 返回类型
* @return 返回支付方查询退款后的结果
*/
@Deprecated
<T> T refundquery(RefundOrder refundOrder, Callback<T> callback);
/**
@@ -337,6 +360,7 @@ public interface PayService<PC extends PayConfigStorage> {
* @param <T> 返回类型
* @return 对应的转账结果
*/
@Deprecated
<T> T transfer(TransferOrder order, Callback<T> callback);
@@ -358,6 +382,7 @@ public interface PayService<PC extends PayConfigStorage> {
* @param <T> 返回类型
* @return 对应的转账订单
*/
@Deprecated
<T> T transferQuery(String outNo, String tradeNo, Callback<T> callback);
/**
@@ -377,13 +402,7 @@ public interface PayService<PC extends PayConfigStorage> {
*/
PayOutMessage payBack(NoticeRequest request);
/**
* 使用转换过的参数进行回调处理
*
* @param data 转化后的参数Map
* @return 获得回调响应信息
*/
PayOutMessage payBack(Map<String, Object> data);
/**
* 设置支付消息处理器,这里用于处理具体的支付业务
@@ -431,6 +450,7 @@ public interface PayService<PC extends PayConfigStorage> {
* @param <O> 预订单类型
* @return 处理后订单信息
*/
@Deprecated
<O extends PayOrder> Map<String, Object> preOrderHandler(Map<String, Object> orderInfo, O payOrder);
}

View File

@@ -0,0 +1,126 @@
package com.egzosn.pay.common.bean;
import java.util.HashMap;
import java.util.Map;
import com.alibaba.fastjson.annotation.JSONField;
/**
* 辅助订单实体
*
* @author egan
* <pre>
* email egan@egzosn.com
* date 2021/10/6
* </pre>
*/
public class AssistOrder implements Order {
/**
* 支付平台订单号,交易号
*/
private String tradeNo;
/**
* 商户订单号
*/
private String outTradeNo;
/**
* 交易类型
*/
private TransactionType transactionType;
/**
* 订单附加信息,可用于预设未提供的参数,这里会覆盖以上所有的订单信息,
*/
@JSONField(serialize = false)
private volatile Map<String, Object> attr;
public AssistOrder() {
}
public AssistOrder(String outTradeNo) {
this.outTradeNo = outTradeNo;
}
public AssistOrder(String tradeNo, String outTradeNo) {
this.tradeNo = tradeNo;
this.outTradeNo = outTradeNo;
}
public AssistOrder(String tradeNo, TransactionType transactionType) {
this.tradeNo = tradeNo;
this.transactionType = transactionType;
}
/**
* 支付平台订单号,交易号
*
* @return 支付平台订单号, 交易号
*/
public String getTradeNo() {
return tradeNo;
}
/**
* 支付平台订单号,交易号
*
* @param tradeNo 支付平台订单号,交易号
*/
public void setTradeNo(String tradeNo) {
this.tradeNo = tradeNo;
}
/**
* 获取商户订单号
*
* @return 商户订单号
*/
public String getOutTradeNo() {
return outTradeNo;
}
/**
* 设置商户订单号
*
* @param outTradeNo 商户订单号
*/
public void setOutTradeNo(String outTradeNo) {
this.outTradeNo = outTradeNo;
}
public TransactionType getTransactionType() {
return transactionType;
}
public void setTransactionType(TransactionType transactionType) {
this.transactionType = transactionType;
}
@Override
public Map<String, Object> getAttrs() {
if (null == attr) {
attr = new HashMap<>();
}
return attr;
}
@Override
public Object getAttr(String key) {
return getAttrs().get(key);
}
/**
* 添加订单信息
*
* @param key key
* @param value 值
*/
@Override
public void addAttr(String key, Object value) {
getAttrs().put(key, value);
}
}

View File

@@ -1,7 +1,5 @@
package com.egzosn.pay.common.bean;
import java.util.Map;
/**
* 关闭订单
* @author Egan
@@ -10,85 +8,7 @@ import java.util.Map;
* date 2021/10/6
* </pre>
*/
public class CloseOrder implements Order {
@Deprecated
public class CloseOrder extends AssistOrder {
/**
* 支付平台订单号,交易号
*/
private String tradeNo;
/**
* 商户单号
*/
private String outTradeNo;
/**
* 订单附加信息,可用于预设未提供的参数,这里会覆盖以上所有的订单信息,
*/
private Map<String, Object> attr;
public CloseOrder() {
}
public CloseOrder(String outTradeNo) {
this.outTradeNo = outTradeNo;
}
/**
* 添加订单信息
*
* @param key key
* @param value 值
*/
@Override
public void addAttr(String key, Object value) {
attr.put(key, value);
}
/**
* 获取属性 这里可用做覆盖已设置的信息属性,订单信息在签名前进行覆盖。
*
* @return 属性
*/
@Override
public Map<String, Object> getAttrs() {
return attr;
}
/**
* 获取属性 这里可用做覆盖已设置的订单信息属性,订单信息在签名前进行覆盖。
*
* @param key 属性名
* @return 属性
*/
@Override
public Object getAttr(String key) {
return attr.get(key);
}
public String getTradeNo() {
return tradeNo;
}
public void setTradeNo(String tradeNo) {
this.tradeNo = tradeNo;
}
public String getOutTradeNo() {
return outTradeNo;
}
public void setOutTradeNo(String outTradeNo) {
this.outTradeNo = outTradeNo;
}
public Map<String, Object> getAttr() {
return attr;
}
public void setAttr(Map<String, Object> attr) {
this.attr = attr;
}
}

View File

@@ -1,11 +1,9 @@
package com.egzosn.pay.common.bean;
import com.egzosn.pay.common.util.str.StringUtils;
import java.math.BigDecimal;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import com.egzosn.pay.common.util.str.StringUtils;
/**
* 支付订单信息
@@ -16,7 +14,7 @@ import java.util.Map;
* date 2016/10/19 22:34
* </pre>
*/
public class PayOrder implements Order {
public class PayOrder extends AssistOrder {
/**
* 商品名称
*/
@@ -33,14 +31,7 @@ public class PayOrder implements Order {
* 价格
*/
private BigDecimal price;
/**
* 支付平台订单号,交易号
*/
private String tradeNo;
/**
* 商户订单号
*/
private String outTradeNo;
/**
* 银行卡类型
*/
@@ -63,12 +54,13 @@ public class PayOrder implements Order {
* 微信专用,,,,
* WAP支付链接
*/
@Deprecated
private String wapUrl;
/**
* 微信专用,,,,
* WAP支付网页名称
*/
@Deprecated
private String wapName;
/**
* 用户唯一标识
@@ -76,10 +68,7 @@ public class PayOrder implements Order {
* 支付宝 buyer_id
*/
private String openid;
/**
* 交易类型
*/
private TransactionType transactionType;
/**
* 支付币种
*/
@@ -89,11 +78,6 @@ public class PayOrder implements Order {
*/
private Date expirationTime;
/**
* 订单附加信息,可用于预设未提供的参数,这里会覆盖以上所有的订单信息,
*/
private volatile Map<String, Object> attr;
public PayOrder() {
}
@@ -107,8 +91,8 @@ public class PayOrder implements Order {
this.subject = StringUtils.tryTrim(subject);
this.body = StringUtils.tryTrim(body);
this.price = price;
this.outTradeNo = StringUtils.tryTrim(outTradeNo);
this.transactionType = transactionType;
setOutTradeNo(StringUtils.tryTrim(outTradeNo));
setTransactionType(transactionType);
}
@@ -152,49 +136,6 @@ public class PayOrder implements Order {
this.price = price;
}
/**
* 支付平台订单号,交易号
*
* @return 支付平台订单号, 交易号
*/
public String getTradeNo() {
return tradeNo;
}
/**
* 支付平台订单号,交易号
*
* @param tradeNo 支付平台订单号,交易号
*/
public void setTradeNo(String tradeNo) {
this.tradeNo = tradeNo;
}
/**
* 获取商户订单号
*
* @return 商户订单号
*/
public String getOutTradeNo() {
return outTradeNo;
}
/**
* 设置商户订单号
*
* @param outTradeNo 商户订单号
*/
public void setOutTradeNo(String outTradeNo) {
this.outTradeNo = outTradeNo;
}
public TransactionType getTransactionType() {
return transactionType;
}
public void setTransactionType(TransactionType transactionType) {
this.transactionType = transactionType;
}
public String getBankType() {
return bankType;
@@ -260,48 +201,4 @@ public class PayOrder implements Order {
this.expirationTime = expirationTime;
}
@Override
public Map<String, Object> getAttrs() {
if (null == attr){
attr = new HashMap<>();
}
return attr;
}
@Override
public Object getAttr(String key) {
return getAttrs().get(key);
}
/**
* 添加订单信息
* @param key key
* @param value 值
*/
@Override
public void addAttr(String key, Object value) {
getAttrs().put(key, value);
}
@Override
public String toString() {
return "PayOrder{" +
"subject='" + subject + '\'' +
", body='" + body + '\'' +
", price=" + price +
", outTradeNo='" + outTradeNo + '\'' +
", bankType='" + bankType + '\'' +
", deviceInfo='" + deviceInfo + '\'' +
", spbillCreateIp='" + spbillCreateIp + '\'' +
", authCode='" + authCode + '\'' +
", wapUrl='" + wapUrl + '\'' +
", wapName='" + wapName + '\'' +
", openid='" + openid + '\'' +
", transactionType=" + transactionType +
", curType=" + curType +
'}';
}
}

View File

@@ -2,8 +2,6 @@ package com.egzosn.pay.common.bean;
import java.math.BigDecimal;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* 退款订单信息
@@ -14,19 +12,11 @@ import java.util.Map;
* date 2018/1/15 21:40
* </pre>
*/
public class RefundOrder implements Order {
public class RefundOrder extends AssistOrder {
/**
* 退款单号,每次进行退款的单号,此处唯一
*/
private String refundNo;
/**
* 支付平台订单号,交易号
*/
private String tradeNo;
/**
* 商户单号
*/
private String outTradeNo;
/**
* 退款金额
*/
@@ -54,10 +44,6 @@ public class RefundOrder implements Order {
*/
private String userId;
/**
* 订单附加信息,可用于预设未提供的参数,这里会覆盖以上所有的订单信息,
*/
private Map<String, Object> attr;
public String getRefundNo() {
return refundNo;
@@ -67,22 +53,6 @@ public class RefundOrder implements Order {
this.refundNo = refundNo;
}
public String getTradeNo() {
return tradeNo;
}
public void setTradeNo(String tradeNo) {
this.tradeNo = tradeNo;
}
public String getOutTradeNo() {
return outTradeNo;
}
public void setOutTradeNo(String outTradeNo) {
this.outTradeNo = outTradeNo;
}
public BigDecimal getRefundAmount() {
return refundAmount;
}
@@ -136,47 +106,23 @@ public class RefundOrder implements Order {
public RefundOrder(String refundNo, String tradeNo, BigDecimal refundAmount) {
this.refundNo = refundNo;
this.tradeNo = tradeNo;
setTradeNo(tradeNo);
this.refundAmount = refundAmount;
}
public RefundOrder(String tradeNo, String outTradeNo, BigDecimal refundAmount, BigDecimal totalAmount) {
this.tradeNo = tradeNo;
this.outTradeNo = outTradeNo;
setTradeNo(tradeNo);
setOutTradeNo(outTradeNo);
this.refundAmount = refundAmount;
this.totalAmount = totalAmount;
}
public RefundOrder(String refundNo, String tradeNo, String outTradeNo, BigDecimal refundAmount, BigDecimal totalAmount) {
this.refundNo = refundNo;
this.tradeNo = tradeNo;
this.outTradeNo = outTradeNo;
setTradeNo(tradeNo);
setOutTradeNo(outTradeNo);
this.refundAmount = refundAmount;
this.totalAmount = totalAmount;
}
@Override
public Map<String, Object> getAttrs() {
if (null == attr) {
attr = new HashMap<>();
}
return attr;
}
@Override
public Object getAttr(String key) {
return getAttrs().get(key);
}
/**
* 添加订单信息
*
* @param key key
* @param value 值
*/
@Override
public void addAttr(String key, Object value) {
getAttrs().put(key, value);
}
}

View File

@@ -30,7 +30,6 @@ import com.egzosn.pay.wx.v3.bean.combine.CombineSubOrder;
import com.egzosn.pay.wx.v3.bean.order.H5Info;
import com.egzosn.pay.wx.v3.bean.order.SceneInfo;
import com.egzosn.pay.wx.v3.bean.order.SubOrder;
import com.egzosn.pay.wx.v3.bean.response.WxRefundResult;
/**
* 微信V3合单发起支付入口

View File

@@ -25,7 +25,6 @@ import com.egzosn.pay.web.support.HttpRequestNoticeParams;
import com.egzosn.pay.wx.v3.api.WxPayConfigStorage;
import com.egzosn.pay.wx.v3.api.WxPayService;
import com.egzosn.pay.wx.v3.bean.WxTransactionType;
import com.egzosn.pay.wx.v3.bean.response.WxRefundResult;
/**
* 微信V3发起支付入口

View File

@@ -1,6 +1,5 @@
package com.egzosn.pay.fuiou.api;
import java.io.InputStream;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
@@ -9,10 +8,11 @@ import java.util.Map;
import com.alibaba.fastjson.JSONObject;
import com.egzosn.pay.common.api.BasePayService;
import com.egzosn.pay.common.bean.AssistOrder;
import com.egzosn.pay.common.bean.BillType;
import com.egzosn.pay.common.bean.CloseOrder;
import com.egzosn.pay.common.bean.MethodType;
import com.egzosn.pay.common.bean.NoticeParams;
import com.egzosn.pay.common.bean.NoticeRequest;
import com.egzosn.pay.common.bean.PayMessage;
import com.egzosn.pay.common.bean.PayOrder;
import com.egzosn.pay.common.bean.PayOutMessage;
@@ -125,6 +125,7 @@ public class FuiouPayService extends BasePayService<FuiouPayConfigStorage> {
return verify(new NoticeParams(params));
}
/**
* 回调校验
*
@@ -143,10 +144,11 @@ public class FuiouPayService extends BasePayService<FuiouPayConfigStorage> {
return (signVerify(params, (String) params.remove("md5")) && verifySource((String) params.get("order_id")));
}
catch (PayErrorException e) {
LOG.error("", e);
LOG.error("", e);
}
return false;
}
/**
* 回调签名校验
*
@@ -254,15 +256,16 @@ public class FuiouPayService extends BasePayService<FuiouPayConfigStorage> {
return SignUtils.valueOf(payConfigStorage.getSignType().toUpperCase()).createSign(content, "|" + payConfigStorage.getKeyPrivate(), characterEncoding);
}
/**
* 将请求参数或者请求流转化为 Map
*
* @param parameterMap 请求参数
* @param is 请求流
* @return 返回参数集合
* @param request 通知请求
* @return 获得回调的请求参数
*/
@Override
public Map<String, Object> getParameter2Map(Map<String, String[]> parameterMap, InputStream is) {
public NoticeParams getNoticeParams(NoticeRequest request) {
Map<String, String[]> parameterMap = request.getParameterMap();
Map<String, Object> params = conversion(parameterMap, new LinkedHashMap<String, Object>(), "mchnt_cd");
conversion(parameterMap, params, "order_id");
conversion(parameterMap, params, "order_date");
@@ -273,7 +276,7 @@ public class FuiouPayService extends BasePayService<FuiouPayConfigStorage> {
conversion(parameterMap, params, "resv1");
conversion(parameterMap, params, "fy_ssn");
conversion(parameterMap, params, "md5");
return params;
return new NoticeParams(params);
}
/**
@@ -393,12 +396,23 @@ public class FuiouPayService extends BasePayService<FuiouPayConfigStorage> {
@Override
public Map<String, Object> query(String tradeNo, String outTradeNo) {
return query(new AssistOrder(tradeNo, outTradeNo));
}
/**
* 交易查询接口
*
* @param assistOrder 查询条件
* @return 返回查询回来的结果集,支付方原值返回
*/
@Override
public Map<String, Object> query(AssistOrder assistOrder) {
LinkedHashMap<String, Object> params = new LinkedHashMap<>();
params.put("mchnt_cd", payConfigStorage.getPid());
params.put("order_id", outTradeNo);
params.put("order_id", assistOrder.getOutTradeNo());
params.put("md5", createSign(SignTextUtils.parameters2Md5Str(params, "|"), payConfigStorage.getInputCharset()));
JSONObject resultJson = getHttpRequestTemplate().postForObject(getReqUrl() + URL_FuiouSmpAQueryGate + "?" + UriVariables.getMapToParameters(params), null, JSONObject.class);
return resultJson;
return getHttpRequestTemplate().postForObject(getReqUrl() + URL_FuiouSmpAQueryGate + "?" + UriVariables.getMapToParameters(params), null, JSONObject.class);
}
@@ -411,16 +425,17 @@ public class FuiouPayService extends BasePayService<FuiouPayConfigStorage> {
*/
@Override
public Map<String, Object> close(String tradeNo, String outTradeNo) {
return Collections.EMPTY_MAP;
throw new UnsupportedOperationException("不支持该操作");
}
/**
* 交易关闭接口
*
* @param closeOrder 关闭订单
* @param assistOrder 关闭订单
* @return 返回支付方交易关闭后的结果
*/
@Override
public Map<String, Object> close(CloseOrder closeOrder){
public Map<String, Object> close(AssistOrder assistOrder) {
throw new UnsupportedOperationException("不支持该操作");
}

View File

@@ -15,9 +15,10 @@ import org.apache.http.message.BasicHeader;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.egzosn.pay.common.api.BasePayService;
import com.egzosn.pay.common.bean.AssistOrder;
import com.egzosn.pay.common.bean.BaseRefundResult;
import com.egzosn.pay.common.bean.BillType;
import com.egzosn.pay.common.bean.CloseOrder;
import com.egzosn.pay.common.bean.CurType;
import com.egzosn.pay.common.bean.DefaultCurType;
import com.egzosn.pay.common.bean.MethodType;
@@ -294,6 +295,17 @@ public class PayoneerPayService extends BasePayService<PayoneerConfigStorage> im
return secondaryInterface(tradeNo, outTradeNo, PayoneerTransactionType.CHARGE_STATUS);
}
/**
* 交易查询接口
*
* @param assistOrder 查询条件
* @return 返回查询回来的结果集,支付方原值返回
*/
@Override
public Map<String, Object> query(AssistOrder assistOrder) {
return secondaryInterface(assistOrder.getTradeNo(), assistOrder.getOutTradeNo(), PayoneerTransactionType.CHARGE_STATUS);
}
/**
* 交易关闭接口
@@ -309,12 +321,12 @@ public class PayoneerPayService extends BasePayService<PayoneerConfigStorage> im
/**
* 交易关闭接口
*
* @param closeOrder 关闭订单
* @param assistOrder 关闭订单
* @return 返回支付方交易关闭后的结果
*/
@Override
public Map<String, Object> close(CloseOrder closeOrder){
return secondaryInterface(closeOrder.getTradeNo(), closeOrder.getOutTradeNo(), PayoneerTransactionType.CHARGE_CANCEL);
public Map<String, Object> close(AssistOrder assistOrder){
return secondaryInterface(assistOrder.getTradeNo(), assistOrder.getOutTradeNo(), PayoneerTransactionType.CHARGE_CANCEL);
}
/**
* 交易交易撤销

View File

@@ -19,9 +19,9 @@ import org.apache.http.message.BasicHeader;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.egzosn.pay.common.api.BasePayService;
import com.egzosn.pay.common.bean.AssistOrder;
import com.egzosn.pay.common.bean.BaseRefundResult;
import com.egzosn.pay.common.bean.BillType;
import com.egzosn.pay.common.bean.CloseOrder;
import com.egzosn.pay.common.bean.CurType;
import com.egzosn.pay.common.bean.DefaultCurType;
import com.egzosn.pay.common.bean.MethodType;
@@ -263,8 +263,19 @@ public class PayPalPayService extends BasePayService<PayPalConfigStorage> {
*/
@Override
public Map<String, Object> query(String tradeNo, String outTradeNo) {
JSONObject resp = getHttpRequestTemplate().getForObject(getReqUrl(PayPalTransactionType.ORDERS), authHeader(), JSONObject.class, tradeNo);
return resp;
return query(new AssistOrder(tradeNo, outTradeNo));
}
/**
* 交易查询接口
*
* @param assistOrder 查询条件
* @return 返回查询回来的结果集,支付方原值返回
*/
@Override
public Map<String, Object> query(AssistOrder assistOrder) {
return getHttpRequestTemplate().getForObject(getReqUrl(PayPalTransactionType.ORDERS), authHeader(), JSONObject.class, assistOrder.getTradeNo());
}
@Override
@@ -275,13 +286,14 @@ public class PayPalPayService extends BasePayService<PayPalConfigStorage> {
/**
* 交易关闭接口
*
* @param closeOrder 关闭订单
* @param assistOrder 关闭订单
* @return 返回支付方交易关闭后的结果
*/
@Override
public Map<String, Object> close(CloseOrder closeOrder){
public Map<String, Object> close(AssistOrder assistOrder) {
throw new UnsupportedOperationException("不支持该操作");
}
/**
* 申请退款接口
*
@@ -363,12 +375,10 @@ public class PayPalPayService extends BasePayService<PayPalConfigStorage> {
*/
@Override
public Map<String, Object> refundquery(RefundOrder refundOrder) {
JSONObject resp = getHttpRequestTemplate().getForObject(getReqUrl(PayPalTransactionType.REFUND_QUERY), authHeader(), JSONObject.class, refundOrder.getTradeNo());
return resp;
return getHttpRequestTemplate().getForObject(getReqUrl(PayPalTransactionType.REFUND_QUERY), authHeader(), JSONObject.class, refundOrder.getTradeNo());
}
@Override
public Map<String, Object> downloadBill(Date billDate, BillType billType) {
return Collections.emptyMap();

View File

@@ -21,8 +21,9 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.egzosn.pay.common.api.BasePayService;
import com.egzosn.pay.common.bean.AssistOrder;
import com.egzosn.pay.common.bean.BillType;
import com.egzosn.pay.common.bean.CloseOrder;
import com.egzosn.pay.common.bean.CurType;
import com.egzosn.pay.common.bean.DefaultCurType;
import com.egzosn.pay.common.bean.MethodType;
@@ -351,6 +352,17 @@ public class PayPalPayService extends BasePayService<PayPalConfigStorage> implem
return getHttpRequestTemplate().getForObject(getReqUrl(PayPalTransactionType.ORDERS_GET), authHeader(), JSONObject.class, tradeNo);
}
/**
* 交易查询接口
*
* @param assistOrder 查询条件
* @return 返回查询回来的结果集,支付方原值返回
*/
@Override
public Map<String, Object> query(AssistOrder assistOrder) {
return getHttpRequestTemplate().getForObject(getReqUrl(PayPalTransactionType.ORDERS_GET), authHeader(), JSONObject.class, assistOrder.getTradeNo());
}
@Override
public Map<String, Object> close(String tradeNo, String outTradeNo) {
return null;
@@ -358,11 +370,11 @@ public class PayPalPayService extends BasePayService<PayPalConfigStorage> implem
/**
* 交易关闭接口
*
* @param closeOrder 关闭订单
* @param assistOrder 关闭订单
* @return 返回支付方交易关闭后的结果
*/
@Override
public Map<String, Object> close(CloseOrder closeOrder){
public Map<String, Object> close(AssistOrder assistOrder){
throw new UnsupportedOperationException("不支持该操作");
}
/**
@@ -512,38 +524,7 @@ public class PayPalPayService extends BasePayService<PayPalConfigStorage> implem
}
/**
* 将请求参数或者请求流转化为 Map
*
* @param parameterMap 请求参数
* @param is 请求流
* @return 获得回调的请求参数
*/
@Override
public Map<String, Object> getParameter2Map(Map<String, String[]> parameterMap, InputStream is) {
Map<String, Object> params = new LinkedHashMap<>();
for (Map.Entry<String, String[]> entry : parameterMap.entrySet()) {
String name = entry.getKey();
String[] values = entry.getValue();
String valueStr = "";
for (int i = 0, len = values.length; i < len; i++) {
valueStr += (i == len - 1) ? values[i] : values[i] + ",";
}
if (StringUtils.isNotEmpty(payConfigStorage.getInputCharset()) && !valueStr.matches("\\w+")) {
try {
if (valueStr.equals(new String(valueStr.getBytes("iso8859-1"), "iso8859-1"))) {
valueStr = new String(valueStr.getBytes("iso8859-1"), payConfigStorage.getInputCharset());
}
}
catch (UnsupportedEncodingException e) {
LOG.error("", e);
}
}
params.put(name, valueStr);
}
return params;
}
}

View File

@@ -26,8 +26,9 @@ import java.util.TreeMap;
import com.alibaba.fastjson.JSONObject;
import com.egzosn.pay.common.api.BasePayService;
import com.egzosn.pay.common.bean.AssistOrder;
import com.egzosn.pay.common.bean.BillType;
import com.egzosn.pay.common.bean.CloseOrder;
import com.egzosn.pay.common.bean.MethodType;
import com.egzosn.pay.common.bean.NoticeParams;
import com.egzosn.pay.common.bean.PayMessage;
@@ -224,6 +225,7 @@ public class UnionPayService extends BasePayService<UnionPayConfigStorage> {
}
return this.signVerify(result, (String) result.get(SDKConstants.param_signature));
}
/**
* 签名校验
*
@@ -581,25 +583,35 @@ public class UnionPayService extends BasePayService<UnionPayConfigStorage> {
*/
@Override
public Map<String, Object> query(String tradeNo, String outTradeNo) {
return query(new AssistOrder(tradeNo, outTradeNo));
}
/**
* 交易查询接口
*
* @param assistOrder 查询条件
* @return 返回查询回来的结果集,支付方原值返回
*/
@Override
public Map<String, Object> query(AssistOrder assistOrder) {
Map<String, Object> params = this.getCommonParam();
UnionTransactionType.QUERY.convertMap(params);
params.put(SDKConstants.param_orderId, outTradeNo);
params.put(SDKConstants.param_orderId, assistOrder.getOutTradeNo());
this.setSign(params);
String responseStr = getHttpRequestTemplate().postForObject(this.getSingleQueryUrl(), params, String.class);
JSONObject response = UriVariables.getParametersToMap(responseStr);
if (this.verify(response)) {
if (this.verify(new NoticeParams(response))) {
if (SDKConstants.OK_RESP_CODE.equals(response.getString(SDKConstants.param_respCode))) {
String origRespCode = response.getString(SDKConstants.param_origRespCode);
if ((SDKConstants.OK_RESP_CODE).equals(origRespCode)) {
//交易成功,更新商户订单状态
//TODO
return response;
}
}
throw new PayErrorException(new PayException(response.getString(SDKConstants.param_respCode), response.getString(SDKConstants.param_respMsg), response.toJSONString()));
}
throw new PayErrorException(new PayException("failure", "验证签名失败", response.toJSONString()));
}
@@ -657,14 +669,15 @@ public class UnionPayService extends BasePayService<UnionPayConfigStorage> {
public Map<String, Object> close(String tradeNo, String outTradeNo) {
return Collections.emptyMap();
}
/**
* 交易关闭接口
*
* @param closeOrder 关闭订单
* @param assistOrder 关闭订单
* @return 返回支付方交易关闭后的结果
*/
@Override
public Map<String, Object> close(CloseOrder closeOrder){
public Map<String, Object> close(AssistOrder assistOrder) {
return Collections.emptyMap();
}

View File

@@ -12,12 +12,14 @@ import java.util.concurrent.locks.Lock;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.egzosn.pay.common.api.BasePayService;
import com.egzosn.pay.common.bean.AssistOrder;
import com.egzosn.pay.common.bean.BaseRefundResult;
import com.egzosn.pay.common.bean.BillType;
import com.egzosn.pay.common.bean.CloseOrder;
import com.egzosn.pay.common.bean.CurType;
import com.egzosn.pay.common.bean.MethodType;
import com.egzosn.pay.common.bean.NoticeParams;
import com.egzosn.pay.common.bean.NoticeRequest;
import com.egzosn.pay.common.bean.PayMessage;
import com.egzosn.pay.common.bean.PayOrder;
import com.egzosn.pay.common.bean.PayOutMessage;
@@ -298,15 +300,17 @@ public class WxYouDianPayService extends BasePayService<WxYouDianPayConfigStorag
return SignUtils.valueOf(payConfigStorage.getSignType().toUpperCase()).createSign(content, "&source=http://life.51youdian.com", characterEncoding);
}
/**
* 将请求参数或者请求流转化为 Map
*
* @param parameterMap 请求参数
* @param is 请求流
* @param request 通知请求
* @return 获得回调的请求参数
*/
@Override
public Map<String, Object> getParameter2Map(Map<String, String[]> parameterMap, InputStream is) {
public NoticeParams getNoticeParams(NoticeRequest request) {
final Map<String, String[]> parameterMap = request.getParameterMap();
Map<String, Object> params = new TreeMap<String, Object>();
for (Iterator iter = parameterMap.keySet().iterator(); iter.hasNext(); ) {
String name = (String) iter.next();
@@ -318,7 +322,7 @@ public class WxYouDianPayService extends BasePayService<WxYouDianPayConfigStorag
params.put(name, valueStr.trim());
}
return params;
return new NoticeParams(params);
}
@@ -402,15 +406,26 @@ public class WxYouDianPayService extends BasePayService<WxYouDianPayConfigStorag
*/
@Override
public Map<String, Object> query(String tradeNo, String outTradeNo) {
return query(new AssistOrder(tradeNo, outTradeNo));
}
/**
* 交易查询接口
*
* @param assistOrder 查询条件
* @return 返回查询回来的结果集,支付方原值返回
*/
@Override
public Map<String, Object> query(AssistOrder assistOrder) {
String apbNonce = SignTextUtils.randomStr();
TreeMap<String, String> data = new TreeMap<>();
data.put("access_token", payConfigStorage.getAccessToken());
if (StringUtils.isEmpty(tradeNo)) {
data.put("order_sn", outTradeNo);
if (StringUtils.isEmpty(assistOrder.getTradeNo())) {
data.put("order_sn", assistOrder.getOutTradeNo());
}
else {
data.put("order_sn", tradeNo);
data.put("order_sn", assistOrder.getTradeNo());
}
String sign = createSign(SignTextUtils.parameterText(data, "") + apbNonce, payConfigStorage.getInputCharset());
String queryParam = SignTextUtils.parameterText(data) + "&apb_nonce=" + apbNonce + "&sign=" + sign;
@@ -426,11 +441,11 @@ public class WxYouDianPayService extends BasePayService<WxYouDianPayConfigStorag
/**
* 交易关闭接口
*
* @param closeOrder 关闭订单
* @param assistOrder 关闭订单
* @return 返回支付方交易关闭后的结果
*/
@Override
public Map<String, Object> close(CloseOrder closeOrder){
public Map<String, Object> close(AssistOrder assistOrder){
return Collections.emptyMap();
}

View File

@@ -33,6 +33,6 @@ public interface WxConst {
String NONCE_STR = "nonce_str";
String OUT_TRADE_NO = "out_trade_no";
String GZIP = "GZIP";
String BILL_DATE = "bill_date";
}

View File

@@ -38,10 +38,12 @@ import static com.egzosn.pay.wx.bean.WxTransferType.TRANSFERS;
import com.alibaba.fastjson.JSONObject;
import com.egzosn.pay.common.api.BasePayService;
import com.egzosn.pay.common.bean.AssistOrder;
import com.egzosn.pay.common.bean.BillType;
import com.egzosn.pay.common.bean.CloseOrder;
import com.egzosn.pay.common.bean.MethodType;
import com.egzosn.pay.common.bean.NoticeParams;
import com.egzosn.pay.common.bean.NoticeRequest;
import com.egzosn.pay.common.bean.Order;
import com.egzosn.pay.common.bean.OrderParaStructure;
import com.egzosn.pay.common.bean.PayMessage;
@@ -389,25 +391,25 @@ public class WxPayService extends BasePayService<WxPayConfigStorage> implements
return signType.createSign(content + "&key=" + (signType == SignUtils.MD5 ? "" : keyPrivate), keyPrivate, characterEncoding).toUpperCase();
}
/**
* 将请求参数或者请求流转化为 Map
*
* @param parameterMap 请求参数
* @param is 请求流
* @param request 通知请求
* @return 获得回调的请求参数
*/
@Override
public Map<String, Object> getParameter2Map(Map<String, String[]> parameterMap, InputStream is) {
public NoticeParams getNoticeParams(NoticeRequest request) {
TreeMap<String, Object> map = new TreeMap<String, Object>();
try {
return XML.inputStream2Map(is, map);
return new NoticeParams(XML.inputStream2Map(request.getInputStream(), map));
}
catch (IOException e) {
throw new PayErrorException(new PayException("IOException", e.getMessage()));
}
}
/**
* 获取输出消息,用户返回给支付端
*
@@ -502,6 +504,17 @@ public class WxPayService extends BasePayService<WxPayConfigStorage> implements
return secondaryInterface(transactionId, outTradeNo, WxTransactionType.QUERY);
}
/**
* 交易查询接口
*
* @param assistOrder 查询条件
* @return 返回查询回来的结果集,支付方原值返回
*/
@Override
public Map<String, Object> query(AssistOrder assistOrder) {
return secondaryInterface(assistOrder.getTradeNo(), assistOrder.getOutTradeNo(), WxTransactionType.QUERY);
}
/**
* 交易关闭接口
@@ -518,12 +531,12 @@ public class WxPayService extends BasePayService<WxPayConfigStorage> implements
/**
* 交易关闭接口
*
* @param closeOrder 关闭订单
* @param assistOrder 关闭订单
* @return 返回支付方交易关闭后的结果
*/
@Override
public Map<String, Object> close(CloseOrder closeOrder){
return secondaryInterface(closeOrder.getTradeNo(), closeOrder.getOutTradeNo(), WxTransactionType.CLOSE);
public Map<String, Object> close(AssistOrder assistOrder){
return secondaryInterface(assistOrder.getTradeNo(), assistOrder.getOutTradeNo(), WxTransactionType.CLOSE);
}
@@ -626,7 +639,7 @@ public class WxPayService extends BasePayService<WxPayConfigStorage> implements
Map<String, Object> parameters = getPublicParameters();
parameters.put("bill_type", billType);
//目前只支持日账单
parameters.put("bill_date", DateUtils.formatDate(billDate, DateUtils.YYYYMMDD));
parameters.put(WxConst.BILL_DATE, DateUtils.formatDate(billDate, DateUtils.YYYYMMDD));
String fileType = billType.getFileType();
OrderParaStructure.loadParameters(parameters, "tar_type", fileType);
//设置签名
@@ -753,7 +766,7 @@ public class WxPayService extends BasePayService<WxPayConfigStorage> implements
Map<String, Object> parameters = getPublicParameters();
parameters.put("bill_type", billType);
//目前只支持日账单
parameters.put("bill_date", DateUtils.formatDate(billDate, DateUtils.YYYYMMDD));
parameters.put(WxConst.BILL_DATE, DateUtils.formatDate(billDate, DateUtils.YYYYMMDD));
if (tarType) {
parameters.put("tar_type", "GZIP");
}

View File

@@ -8,9 +8,10 @@ import java.util.TreeMap;
import com.alibaba.fastjson.JSONObject;
import com.egzosn.pay.common.api.BasePayService;
import com.egzosn.pay.common.bean.AssistOrder;
import com.egzosn.pay.common.bean.BaseRefundResult;
import com.egzosn.pay.common.bean.BillType;
import com.egzosn.pay.common.bean.CloseOrder;
import com.egzosn.pay.common.bean.CurType;
import com.egzosn.pay.common.bean.DefaultCurType;
import com.egzosn.pay.common.bean.MethodType;
@@ -287,6 +288,17 @@ public class YiJiPayService extends BasePayService<YiJiPayConfigStorage> {
return Collections.emptyMap();
}
/**
* 交易查询接口
*
* @param assistOrder 查询条件
* @return 返回查询回来的结果集,支付方原值返回
*/
@Override
public Map<String, Object> query(AssistOrder assistOrder) {
return Collections.emptyMap();
}
/**
* 交易关闭接口
@@ -302,11 +314,11 @@ public class YiJiPayService extends BasePayService<YiJiPayConfigStorage> {
/**
* 交易关闭接口
*
* @param closeOrder 关闭订单
* @param assistOrder 关闭订单
* @return 返回支付方交易关闭后的结果
*/
@Override
public Map<String, Object> close(CloseOrder closeOrder){
public Map<String, Object> close(AssistOrder assistOrder){
return Collections.emptyMap();
}