1. 增加退款查询 退款单号,订单有效时间

This commit is contained in:
egan
2018-08-04 18:04:06 +08:00
parent 01b9938f91
commit 81b44146ff
12 changed files with 215 additions and 108 deletions

View File

@@ -200,7 +200,8 @@ public class AliPayService extends BasePayService {
bizContent.put("product_code", "QUICK_MSECURITY_PAY");
}
}
//TODO 过期时间
// bizContent.put("timeout_express", )
orderInfo.put("biz_content", JSON.toJSONString(bizContent));
return orderInfo;
}
@@ -382,6 +383,31 @@ public class AliPayService extends BasePayService {
return secondaryInterface(tradeNo, outTradeNo, AliTransactionType.REFUNDQUERY);
}
/**
* 查询退款
*
* @param refundOrder 退款订单单号信息
* @return 返回支付方查询退款后的结果
*/
@Override
public Map<String, Object> refundquery(RefundOrder refundOrder){
//获取公共参数
Map<String, Object> parameters = getPublicParameters(AliTransactionType.REFUNDQUERY);
Map<String, Object> bizContent = getBizContent(refundOrder.getTradeNo(), refundOrder.getOutTradeNo(), null);
if (!StringUtils.isEmpty(refundOrder.getRefundNo())){
bizContent.put("out_request_no", refundOrder.getRefundNo());
}
//设置请求参数的集合
parameters.put("biz_content", JSON.toJSONString(bizContent));
//设置签名
setSign(parameters);
return requestTemplate.getForObject(getReqUrl() + "?" + UriVariables.getMapToParameters(parameters), JSONObject.class);
}
/**
* 目前只支持日账单
* @param billDate 账单类型商户通过接口或商户经开放平台授权后其所属服务商通过接口可以获取以下账单类型trade、signcustomertrade指商户基于支付宝交易收单的业务账单signcustomer是指基于商户支付宝余额收入及支出等资金变动的帐务账单
@@ -507,10 +533,10 @@ public class AliPayService extends BasePayService {
if (null == bizContent){
bizContent = new TreeMap<>();
}
if (null != outTradeNo){
if (!StringUtils.isEmpty(outTradeNo)){
bizContent.put("out_trade_no", outTradeNo);
}
if (null != tradeNo){
if (!StringUtils.isEmpty(tradeNo)){
bizContent.put("trade_no", tradeNo);
}
return bizContent;

View File

@@ -16,7 +16,6 @@ import com.egzosn.pay.common.util.str.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.awt.image.BufferedImage;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.math.BigDecimal;
import java.net.URLEncoder;
@@ -389,7 +388,30 @@ public class AliPayService extends BasePayService {
public Map<String, Object> refundquery(String tradeNo, String outTradeNo) {
return secondaryInterface(tradeNo, outTradeNo, AliTransactionType.REFUNDQUERY);
}
/**
* 查询退款
*
* @param refundOrder 退款订单单号信息
* @return 返回支付方查询退款后的结果
*/
@Override
public Map<String, Object> refundquery(RefundOrder refundOrder){
//获取公共参数
Map<String, Object> parameters = getPublicParameters(AliTransactionType.REFUNDQUERY);
Map<String, Object> bizContent = getBizContent(refundOrder.getTradeNo(), refundOrder.getOutTradeNo(), null);
if (!StringUtils.isEmpty(refundOrder.getRefundNo())){
bizContent.put("out_request_no", refundOrder.getRefundNo());
}
//设置请求参数的集合
parameters.put("biz_content", JSON.toJSONString(bizContent));
//设置签名
setSign(parameters);
return requestTemplate.getForObject(QUERY_REQ_URL + "?" + UriVariables.getMapToParameters(parameters), JSONObject.class);
}
/**

View File

@@ -224,6 +224,19 @@ public abstract class BasePayService implements PayService {
return callback.perform(refundquery(tradeNo, outTradeNo));
}
/**
* 查询退款
*
* @param refundOrder 退款订单信息
* @param callback 处理器
* @param <T> 返回类型
* @return 返回支付方查询退款后的结果
*/
@Override
public <T>T refundquery(RefundOrder refundOrder, Callback<T> callback){
return callback.perform(refundquery(refundOrder));
}
/**
* 目前只支持日账单
*

View File

@@ -248,6 +248,7 @@ public interface PayService {
* @param outTradeNo 商户单号
* @return 返回支付方查询退款后的结果
*/
@Deprecated
Map<String, Object> refundquery(String tradeNo, String outTradeNo);
/**
* 查询退款
@@ -258,7 +259,24 @@ public interface PayService {
* @param <T> 返回类型
* @return 返回支付方查询退款后的结果
*/
@Deprecated
<T>T refundquery(String tradeNo, String outTradeNo, Callback<T> callback);
/**
* 查询退款
*
* @param refundOrder 退款订单单号信息
* @return 返回支付方查询退款后的结果
*/
Map<String, Object> refundquery(RefundOrder refundOrder);
/**
* 查询退款
*
* @param refundOrder 退款订单信息
* @param callback 处理器
* @param <T> 返回类型
* @return 返回支付方查询退款后的结果
*/
<T>T refundquery(RefundOrder refundOrder, Callback<T> callback);
/**
* 下载对账单

View File

@@ -1,6 +1,7 @@
package com.egzosn.pay.common.bean;
import java.math.BigDecimal;
import java.util.Date;
/**
* 支付订单信息
@@ -38,6 +39,10 @@ public class PayOrder {
private TransactionType transactionType;
//支付币种
private CurType curType;
//订单过期时间
private Date expirationTime;
public CurType getCurType() {
@@ -191,6 +196,14 @@ public class PayOrder {
this.openid = openid;
}
public Date getExpirationTime() {
return expirationTime;
}
public void setExpirationTime(Date expirationTime) {
this.expirationTime = expirationTime;
}
@Override
public String toString() {
return "PayOrder{" +

View File

@@ -34,7 +34,7 @@ public class RefundOrder {
private BigDecimal totalAmount;
/**
* 交易日期
* 退款交易日期
*/
private Date orderDate;

View File

@@ -378,7 +378,18 @@ public class FuiouPayService extends BasePayService {
@Override
public Map<String, Object> refundquery(String tradeNo, String outTradeNo) {
return null;
return Collections.emptyMap();
}
/**
* 查询退款
*
* @param refundOrder 退款订单单号信息
* @return 返回支付方查询退款后的结果
*/
@Override
public Map<String, Object> refundquery(RefundOrder refundOrder) {
return Collections.emptyMap();
}
@@ -390,7 +401,7 @@ public class FuiouPayService extends BasePayService {
*/
@Override
public Map<String, Object> downloadbill(Date billDate, String billType) {
return null;
return Collections.emptyMap();
}
/**
@@ -403,7 +414,7 @@ public class FuiouPayService extends BasePayService {
*/
@Override
public Map<String, Object> secondaryInterface(Object tradeNoOrBillDate, String outTradeNoBillType, TransactionType transactionType) {
return null;
return Collections.emptyMap();
}

View File

@@ -337,7 +337,18 @@ public class PayoneerPayService extends BasePayService implements AdvancedPaySer
*/
@Override
public Map<String, Object> refundquery(String tradeNo, String outTradeNo) {
return new HashMap<>(0);
return Collections.emptyMap();
}
/**
* 查询退款
*
* @param refundOrder 退款订单单号信息
* @return 返回支付方查询退款后的结果
*/
@Override
public Map<String, Object> refundquery(RefundOrder refundOrder) {
return Collections.emptyMap();
}
/**
@@ -351,7 +362,7 @@ public class PayoneerPayService extends BasePayService implements AdvancedPaySer
@Override
public Map<String, Object> downloadbill(Date billDate, String billType) {
return new HashMap<>(0);
return Collections.emptyMap();
}
/**

View File

@@ -291,13 +291,24 @@ public class PayPalPayService extends BasePayService{
return resp;
}
/**
* 查询退款
*
* @param refundOrder 退款订单单号信息
* @return 返回支付方查询退款后的结果
*/
@Override
public Map<String, Object> refundquery(RefundOrder refundOrder) {
return refundquery(refundOrder.getTradeNo(), refundOrder.getOutTradeNo());
}
@Override
public Map<String, Object> downloadbill(Date billDate, String billType) {
return null;
return Collections.emptyMap();
}
@Override
public Map<String, Object> secondaryInterface(Object tradeNoOrBillDate, String outTradeNoBillType, TransactionType transactionType) {
return null;
return Collections.emptyMap();
}
}

View File

@@ -431,17 +431,17 @@ public class UnionPayService extends BasePayService {
}
/**
* 交易查询接口,带处理器
* 交易查询接口
*
* @param tradeNo 支付平台订单号
* @param outTradeNo 商户单号
* @param callback 处理器
*
* @return 返回查询回来的结果集
* @return 返回查询回来的结果集,支付方原值返回
*/
@Override
public <T> T query(String tradeNo, String outTradeNo, Callback<T> callback) {
public Map<String, Object> query(String tradeNo, String outTradeNo) {
Map<String ,Object > params = this.getCommonParam();
UnionTransactionType.QUERY.convertMap(params);
params.put(SDKConstants.param_orderId,outTradeNo);
@@ -454,7 +454,7 @@ public class UnionPayService extends BasePayService {
if ((SDKConstants.OK_RESP_CODE).equals(origRespCode)) {
//交易成功,更新商户订单状态
//TODO
return callback.perform(response);
return response;
}
}
throw new PayErrorException(new PayException(response.getString(SDKConstants.param_respCode), response.getString(SDKConstants.param_respMsg), response.toJSONString()));
@@ -463,25 +463,6 @@ public class UnionPayService extends BasePayService {
}
/**
* 交易查询接口
*
* @param tradeNo 支付平台订单号
* @param outTradeNo 商户单号
*
* @return 返回查询回来的结果集,支付方原值返回
*/
@Override
public Map<String, Object> query(String tradeNo, String outTradeNo) {
return query(tradeNo, outTradeNo, new Callback<Map<String, Object>>() {
@Override
public Map<String, Object> perform(Map<String, Object> map) {
return map;
}
});
}
/**
* 消费撤销/退货接口
@@ -519,9 +500,9 @@ public class UnionPayService extends BasePayService {
return response;
}
throw new PayErrorException(new PayException(response.getString(SDKConstants.param_respCode), response.getString(SDKConstants.param_respMsg), response.toJSONString()));
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()));
throw new PayErrorException(new PayException("failure", "验证签名失败", response.toJSONString()));
}
/**
* 交易关闭接口
@@ -532,20 +513,7 @@ public class UnionPayService extends BasePayService {
*/
@Override
public Map<String, Object> close (String tradeNo, String outTradeNo) {
return null;
}
/**
* 交易关闭接口
*
* @param tradeNo 支付平台订单号
* @param outTradeNo 商户单号
* @param callback 处理器
* @return 返回支付方交易关闭后的结果
*/
@Override
public <T> T close (String tradeNo, String outTradeNo, Callback<T> callback) {
return null;
return Collections.emptyMap();
}
/**
@@ -561,47 +529,15 @@ public class UnionPayService extends BasePayService {
@Deprecated
@Override
public Map<String, Object> refund (String tradeNo, String outTradeNo, BigDecimal refundAmount, BigDecimal totalAmount) {
return refund(tradeNo, outTradeNo, refundAmount, totalAmount, new Callback<Map<String, Object>>() {
@Override
public Map<String, Object> perform(Map<String, Object> map) {
return map;
}
});
return refund(new RefundOrder(tradeNo, outTradeNo, refundAmount, totalAmount));
}
/**
* 申请退款接口
*
* @param tradeNo 支付平台订单号
* @param outTradeNo 商户单号
* @param refundAmount 退款金额
* @param totalAmount 总金额
* @param callback 处理器
* @return 返回支付方申请退款后的结果
* @see #refund(RefundOrder, Callback)
*/
@Deprecated
@Override
public <T> T refund (String tradeNo, String outTradeNo, BigDecimal refundAmount, BigDecimal totalAmount, Callback<T> callback) {
return refund(new RefundOrder(tradeNo, outTradeNo, refundAmount, totalAmount), callback);
}
@Override
public Map<String, Object> refund(RefundOrder refundOrder) {
return refund(refundOrder, new Callback<Map<String, Object>>() {
@Override
public Map<String, Object> perform(Map<String, Object> map) {
return map;
}
});
}
@Override
public <T> T refund(RefundOrder refundOrder, Callback<T> callback) {
return callback.perform(unionRefundOrConsumeUndo(refundOrder, UnionTransactionType.REFUND));
return unionRefundOrConsumeUndo(refundOrder, UnionTransactionType.REFUND);
}
/**
@@ -613,20 +549,20 @@ public class UnionPayService extends BasePayService {
*/
@Override
public Map<String, Object> refundquery (String tradeNo, String outTradeNo) {
return null;
return Collections.emptyMap();
}
/**
* 查询退款
*
* @param tradeNo 支付平台订单号
* @param outTradeNo 商户单号
* @param callback 处理器
* @param refundOrder 退款订单单号信息
* @return 返回支付方查询退款后的结果
*/
@Override
public <T> T refundquery (String tradeNo, String outTradeNo, Callback<T> callback) {
return null;
public Map<String, Object> refundquery(RefundOrder refundOrder) {
return Collections.emptyMap();
}
/**
@@ -670,7 +606,7 @@ public class UnionPayService extends BasePayService {
*/
@Override
public Map<String, Object> secondaryInterface(Object tradeNoOrBillDate, String outTradeNoBillType, TransactionType transactionType) {
return null;
return Collections.emptyMap();
}

View File

@@ -381,7 +381,7 @@ public class WxYouDianPayService extends BasePayService {
@Override
public Map<String, Object> close(String tradeNo, String outTradeNo) {
return new HashMap<>(0);
return Collections.emptyMap();
}
@@ -415,14 +415,24 @@ public class WxYouDianPayService extends BasePayService {
@Override
public Map<String, Object> refundquery(String tradeNo, String outTradeNo) {
return new HashMap<>(0);
return Collections.emptyMap();
}
/**
* 查询退款
*
* @param refundOrder 退款订单单号信息
* @return 返回支付方查询退款后的结果
*/
@Override
public Map<String, Object> refundquery(RefundOrder refundOrder) {
return Collections.emptyMap();
}
@Override
public Map<String, Object> downloadbill(Date billDate, String billType) {
return new HashMap<>(0);
return Collections.emptyMap();
}
@@ -436,7 +446,7 @@ public class WxYouDianPayService extends BasePayService {
*/
@Override
public Map<String, Object> secondaryInterface(Object tradeNoOrBillDate, String outTradeNoBillType, TransactionType transactionType) {
throw new UnsupportedOperationException();
return Collections.emptyMap();
}

View File

@@ -54,7 +54,15 @@ public class WxPayService extends BasePayService {
public final static String SIGN = "sign";
public final static String CIPHER_ALGORITHM = "RSA/ECB/OAEPWITHSHA-1ANDMGF1PADDING";
public final static String FAILURE = "failure";
public final static String APPID = "appid";
private final static DateFormat downloadbillDf = new SimpleDateFormat("yyyyMMdd");
public final static DateFormat df = new SimpleDateFormat("yyyyMMddHHmms");
{
TimeZone timeZone = TimeZone.getTimeZone("GMT+8");
downloadbillDf.setTimeZone(timeZone);
df.setTimeZone(timeZone);
}
@@ -146,7 +154,7 @@ public class WxPayService extends BasePayService {
private Map<String, Object> getPublicParameters() {
Map<String, Object> parameters = new TreeMap<String, Object>();
parameters.put("appid", payConfigStorage.getAppid());
parameters.put(APPID, payConfigStorage.getAppid());
parameters.put("mch_id", payConfigStorage.getPid());
parameters.put("nonce_str", SignUtils.randomStr());
return parameters;
@@ -174,6 +182,10 @@ public class WxPayService extends BasePayService {
parameters.put("attach", order.getBody());
parameters.put("notify_url", payConfigStorage.getNotifyUrl());
parameters.put("trade_type", order.getTransactionType().getType());
if (null != order.getExpirationTime()){
parameters.put("time_start", df.format(new Date()));
parameters.put("time_expire", df.format(order.getExpirationTime()));
}
((WxTransactionType) order.getTransactionType()).setAttribute(parameters, order);
String sign = createSign(SignUtils.parameterText(parameters), payConfigStorage.getInputCharset());
@@ -221,7 +233,7 @@ public class WxPayService extends BasePayService {
params.put("package", "prepay_id=" + result.get("prepay_id"));
} else if (WxTransactionType.APP == order.getTransactionType()) {
params.put("partnerid", payConfigStorage.getPid());
params.put("appid", payConfigStorage.getAppid());
params.put(APPID, payConfigStorage.getAppid());
params.put("prepayid", result.get("prepay_id"));
params.put("timestamp", System.currentTimeMillis() / 1000);
params.put("noncestr", result.get("nonce_str"));
@@ -401,6 +413,13 @@ public class WxPayService extends BasePayService {
}
private Map<String, Object> setParameters(Map<String, Object> parameters, String key, String value){
if (!StringUtils.isEmpty(value)){
parameters.put(key, value);
}
return parameters;
}
/**
* 申请退款接口
*
@@ -411,12 +430,10 @@ public class WxPayService extends BasePayService {
public Map<String, Object> refund(RefundOrder refundOrder) {
//获取公共参数
Map<String, Object> parameters = getPublicParameters();
if (null != refundOrder.getTradeNo()) {
parameters.put("transaction_id", refundOrder.getTradeNo());
} else {
parameters.put("out_trade_no", refundOrder.getOutTradeNo());
}
parameters.put("out_refund_no", refundOrder.getRefundNo());
setParameters(parameters, "transaction_id", refundOrder.getTradeNo());
setParameters(parameters, "out_trade_no", refundOrder.getOutTradeNo());
setParameters(parameters, "out_refund_no", refundOrder.getRefundNo());
parameters.put("total_fee", conversion(refundOrder.getTotalAmount()));
parameters.put("refund_fee", conversion(refundOrder.getRefundAmount()));
parameters.put("op_user_id", payConfigStorage.getPid());
@@ -428,6 +445,8 @@ public class WxPayService extends BasePayService {
/**
* 查询退款
*
@@ -440,6 +459,24 @@ public class WxPayService extends BasePayService {
return secondaryInterface(transactionId, outTradeNo, WxTransactionType.REFUNDQUERY);
}
/**
* 查询退款
*
* @param refundOrder 退款订单单号信息
* @return 返回支付方查询退款后的结果
*/
@Override
public Map<String, Object> refundquery(RefundOrder refundOrder) {
//获取公共参数
Map<String, Object> parameters = getPublicParameters();
setParameters(parameters, "transaction_id", refundOrder.getTradeNo());
setParameters(parameters, "out_trade_no", refundOrder.getOutTradeNo());
setParameters(parameters, "out_refund_no", refundOrder.getRefundNo());
//设置签名
setSign(parameters);
return requestTemplate.postForObject(getUrl( WxTransactionType.REFUNDQUERY), XML.getMap2Xml(parameters) , JSONObject.class);
}
/**
@@ -457,9 +494,8 @@ public class WxPayService extends BasePayService {
parameters.put("bill_type", billType);
//目前只支持日账单
DateFormat df = new SimpleDateFormat("yyyyMMdd");
df.setTimeZone(TimeZone.getTimeZone("GMT+8"));
parameters.put("bill_date", df.format(billDate));
parameters.put("bill_date", downloadbillDf.format(billDate));
//设置签名
setSign(parameters);