mirror of
https://gitee.com/egzosn/pay-java-parent.git
synced 2026-05-23 19:19:29 +08:00
1. 撤销功能实现
2.代码相关优化,整理
This commit is contained in:
@@ -5,20 +5,19 @@ import com.egzosn.pay.common.bean.result.PayException;
|
||||
import com.egzosn.pay.common.exception.PayErrorException;
|
||||
import com.egzosn.pay.common.util.sign.CertDescriptor;
|
||||
|
||||
import java.io.InputStream;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.locks.Lock;
|
||||
import java.util.concurrent.locks.ReentrantLock;
|
||||
|
||||
/**
|
||||
* 支付基础配置存储
|
||||
*
|
||||
* @author: egan
|
||||
* <pre>
|
||||
* email egzosn@gmail.com
|
||||
* date 2017/3/5 20:33
|
||||
* </pre>
|
||||
*/
|
||||
public abstract class BasePayConfigStorage implements PayConfigStorage{
|
||||
public abstract class BasePayConfigStorage implements PayConfigStorage {
|
||||
|
||||
private volatile Object attach;
|
||||
/**
|
||||
@@ -27,39 +26,39 @@ public abstract class BasePayConfigStorage implements PayConfigStorage{
|
||||
private volatile CertDescriptor certDescriptor;
|
||||
|
||||
/**
|
||||
* 应用私钥,rsa_private pkcs8格式 生成签名时使用
|
||||
* 应用私钥,rsa_private pkcs8格式 生成签名时使用
|
||||
*/
|
||||
private volatile String keyPrivate;
|
||||
private volatile String keyPrivate;
|
||||
/**
|
||||
* 应用私钥,rsa_private pkcs8格式 生成签名时使用
|
||||
* 应用私钥,rsa_private pkcs8格式 生成签名时使用
|
||||
*/
|
||||
private volatile String keyPrivateCertPwd;
|
||||
private volatile String keyPrivateCertPwd;
|
||||
/**
|
||||
* 支付平台公钥(签名校验使用)
|
||||
* 支付平台公钥(签名校验使用)
|
||||
*/
|
||||
private volatile String keyPublic;
|
||||
private volatile String keyPublic;
|
||||
/**
|
||||
* 异步回调地址
|
||||
*/
|
||||
private volatile String notifyUrl;
|
||||
private volatile String notifyUrl;
|
||||
/**
|
||||
* 同步回调地址,支付完成后展示的页面
|
||||
*/
|
||||
private volatile String returnUrl;
|
||||
private volatile String returnUrl;
|
||||
/**
|
||||
* 签名加密类型
|
||||
*/
|
||||
private volatile String signType;
|
||||
private volatile String signType;
|
||||
/**
|
||||
* 字符类型
|
||||
*/
|
||||
private volatile String inputCharset;
|
||||
private volatile String inputCharset;
|
||||
|
||||
|
||||
/**
|
||||
* 支付类型 aliPay 支付宝, wxPay微信..等等,扩展支付模块定义唯一。
|
||||
*/
|
||||
private volatile String payType;
|
||||
private volatile String payType;
|
||||
|
||||
/**
|
||||
* 消息来源类型
|
||||
@@ -68,7 +67,7 @@ public abstract class BasePayConfigStorage implements PayConfigStorage{
|
||||
|
||||
|
||||
/**
|
||||
* 访问令牌 每次请求其他方法都要传入的值
|
||||
* 访问令牌 每次请求其他方法都要传入的值
|
||||
*/
|
||||
private volatile String accessToken;
|
||||
/**
|
||||
@@ -105,10 +104,10 @@ public abstract class BasePayConfigStorage implements PayConfigStorage{
|
||||
|
||||
@Override
|
||||
public CertDescriptor getCertDescriptor() {
|
||||
if (!isCertSign){
|
||||
throw new PayErrorException(new PayException("certDescriptor fail", "isCertSign is false"));
|
||||
if (!isCertSign) {
|
||||
throw new PayErrorException(new PayException("certDescriptor fail", "isCertSign is false"));
|
||||
}
|
||||
if(null == certDescriptor){
|
||||
if (null == certDescriptor) {
|
||||
certDescriptor = new CertDescriptor();
|
||||
}
|
||||
return certDescriptor;
|
||||
@@ -265,7 +264,7 @@ public abstract class BasePayConfigStorage implements PayConfigStorage{
|
||||
|
||||
public void setCertSign(boolean certSign) {
|
||||
isCertSign = certSign;
|
||||
if (certSign){
|
||||
if (certSign) {
|
||||
certDescriptor = new CertDescriptor();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -91,7 +91,7 @@ public abstract class BasePayService<PC extends PayConfigStorage> implements Pay
|
||||
try {
|
||||
base64ClientID = com.egzosn.pay.common.util.sign.encrypt.Base64.encode(String.format("%s:%s", user , password).getBytes("UTF-8"));
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
e.printStackTrace();
|
||||
LOG.error(e);
|
||||
}
|
||||
|
||||
return base64ClientID;
|
||||
@@ -132,9 +132,9 @@ public abstract class BasePayService<PC extends PayConfigStorage> implements Pay
|
||||
public Map<String, Object> getParameter2Map (Map<String, String[]> parameterMap, InputStream is) {
|
||||
|
||||
Map<String, Object> params = new TreeMap<String,Object>();
|
||||
for (Iterator iter = parameterMap.keySet().iterator(); iter.hasNext();) {
|
||||
String name = (String) iter.next();
|
||||
String[] values = parameterMap.get(name);
|
||||
for (Map.Entry<String, String[]> entry : parameterMap.entrySet()) {
|
||||
String name = (String) 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] + ",";
|
||||
@@ -145,7 +145,7 @@ public abstract class BasePayService<PC extends PayConfigStorage> implements Pay
|
||||
valueStr=new String(valueStr.getBytes("iso8859-1"), payConfigStorage.getInputCharset());
|
||||
}
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
e.printStackTrace();
|
||||
LOG.error(e);
|
||||
}
|
||||
}
|
||||
params.put(name, valueStr);
|
||||
@@ -181,6 +181,31 @@ public abstract class BasePayService<PC extends PayConfigStorage> implements Pay
|
||||
public <T> T close(String tradeNo, String outTradeNo, Callback<T> callback) {
|
||||
return callback.perform(close(tradeNo, outTradeNo));
|
||||
}
|
||||
/**
|
||||
* 交易撤销
|
||||
*
|
||||
* @param tradeNo 支付平台订单号
|
||||
* @param outTradeNo 商户单号
|
||||
* @param callback 处理器
|
||||
* @param <T> 返回类型
|
||||
* @return 返回支付方交易撤销后的结果
|
||||
*/
|
||||
@Override
|
||||
public <T> T cancel(String tradeNo, String outTradeNo, Callback<T> callback) {
|
||||
return callback.perform(close(tradeNo, outTradeNo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 交易交易撤销
|
||||
*
|
||||
* @param tradeNo 支付平台订单号
|
||||
* @param outTradeNo 商户单号
|
||||
* @return 返回支付方交易撤销后的结果
|
||||
*/
|
||||
@Override
|
||||
public Map<String, Object> cancel(String tradeNo, String outTradeNo) {
|
||||
return Collections.EMPTY_MAP;
|
||||
}
|
||||
|
||||
/**
|
||||
* 退款
|
||||
@@ -375,7 +400,9 @@ public abstract class BasePayService<PC extends PayConfigStorage> implements Pay
|
||||
@Override
|
||||
public PayOutMessage payBack(Map<String, String[]> parameterMap, InputStream is) {
|
||||
Map<String, Object> data = getParameter2Map(parameterMap, is);
|
||||
LOG.debug("回调响应:" + JSON.toJSONString(data));
|
||||
if (LOG.isDebugEnabled()) {
|
||||
LOG.debug("回调响应:" + JSON.toJSONString(data));
|
||||
}
|
||||
if (!verify(data)){
|
||||
return getPayOutMessage("fail", "失败");
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@ import java.util.Map;
|
||||
*/
|
||||
public class DefaultPayMessageHandler implements PayMessageHandler {
|
||||
|
||||
protected final Log log = LogFactory.getLog(DefaultPayMessageHandler.class);
|
||||
protected final Log LOG = LogFactory.getLog(DefaultPayMessageHandler.class);
|
||||
/**
|
||||
* @param payMessage 支付消息
|
||||
* @param context 上下文,如果handler或interceptor之间有信息要传递,可以用这个
|
||||
@@ -30,7 +30,9 @@ public class DefaultPayMessageHandler implements PayMessageHandler {
|
||||
*/
|
||||
@Override
|
||||
public PayOutMessage handle(PayMessage payMessage, Map<String, Object> context, PayService payService) throws PayErrorException {
|
||||
log.info("回调支付消息处理器,回调消息:" + JSON.toJSONString(payMessage));
|
||||
if (LOG.isInfoEnabled()) {
|
||||
LOG.info("回调支付消息处理器,回调消息:" + JSON.toJSONString(payMessage));
|
||||
}
|
||||
return payService.successPayOutMessage(payMessage);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,10 +22,12 @@ import java.util.Map;
|
||||
public interface PayMessageHandler {
|
||||
|
||||
/**
|
||||
* 处理支付回调消息的处理器接口
|
||||
* @param payMessage 支付消息
|
||||
* @param context 上下文,如果handler或interceptor之间有信息要传递,可以用这个
|
||||
* @param payService 支付服务
|
||||
* @return xml,text格式的消息,如果在异步规则里处理的话,可以返回null
|
||||
* @throws PayErrorException 支付错误异常
|
||||
*/
|
||||
PayOutMessage handle(PayMessage payMessage,
|
||||
Map<String, Object> context,
|
||||
|
||||
@@ -134,7 +134,7 @@ public class PayMessageRouter {
|
||||
}
|
||||
}
|
||||
|
||||
if (matchRules.size() == 0) {
|
||||
if (matchRules.isEmpty()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -154,7 +154,9 @@ public class PayMessageRouter {
|
||||
} else {
|
||||
res = rule.service(payMessage, payService, exceptionHandler);
|
||||
// 在同步操作结束,session访问结束
|
||||
LOG.debug("End session access: async=false, fromPay=" + payMessage.getFromPay());
|
||||
if (LOG.isDebugEnabled()) {
|
||||
LOG.debug("End session access: async=false, fromPay=" + payMessage.getFromPay());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -9,7 +9,6 @@ import java.awt.image.BufferedImage;
|
||||
import java.io.InputStream;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
@@ -76,7 +75,6 @@ public interface PayService<PC extends PayConfigStorage> {
|
||||
* @param id 业务id, 数据的真实性.
|
||||
* @return true通过
|
||||
*/
|
||||
@Deprecated
|
||||
boolean verifySource(String id);
|
||||
|
||||
|
||||
@@ -187,6 +185,7 @@ public interface PayService<PC extends PayConfigStorage> {
|
||||
*/
|
||||
Map<String, Object> close(String tradeNo, String outTradeNo);
|
||||
|
||||
|
||||
/**
|
||||
* 交易关闭接口
|
||||
*
|
||||
@@ -198,6 +197,26 @@ public interface PayService<PC extends PayConfigStorage> {
|
||||
*/
|
||||
<T>T close(String tradeNo, String outTradeNo, Callback<T> callback);
|
||||
|
||||
/**
|
||||
* 交易交易撤销
|
||||
*
|
||||
* @param tradeNo 支付平台订单号
|
||||
* @param outTradeNo 商户单号
|
||||
* @return 返回支付方交易撤销后的结果
|
||||
*/
|
||||
Map<String, Object> cancel(String tradeNo, String outTradeNo);
|
||||
|
||||
/**
|
||||
* 交易交易撤销
|
||||
*
|
||||
* @param tradeNo 支付平台订单号
|
||||
* @param outTradeNo 商户单号
|
||||
* @param callback 处理器
|
||||
* @param <T> 返回类型
|
||||
* @return 返回支付方交易撤销后的结果
|
||||
*/
|
||||
<T>T cancel(String tradeNo, String outTradeNo, Callback<T> callback);
|
||||
|
||||
/**
|
||||
* 申请退款接口
|
||||
* 废弃
|
||||
@@ -301,7 +320,7 @@ public interface PayService<PC extends PayConfigStorage> {
|
||||
|
||||
|
||||
/**
|
||||
*
|
||||
* 通用查询接口
|
||||
* @param tradeNoOrBillDate 支付平台订单号或者账单类型, 具体请
|
||||
* 类型为{@link String }或者 {@link Date },类型须强制限制,类型不对应则抛出异常{@link PayErrorException}
|
||||
* @param outTradeNoBillType 商户单号或者 账单类型
|
||||
|
||||
Reference in New Issue
Block a user