@@ -9,6 +9,7 @@ public enum AliServiceCmd implements SignServiceCommand { | |||
ORDERAPPLY("支付宝支付订单申请","orderApply", AtsAliOrderApplyRequest.class), | |||
QUERYORDERAPPLY("查询支付宝支付订单申请结果","queryOrderApply", AtsAliQueryOrderApplyRequest.class), | |||
ORDERREFUND("支付宝支付订单退费","orderRefund", AtsAliOrderRefundRequest.class), | |||
QUERYORDERREFUND("支付宝支付订单退费","queryOrderRefund", AtsAliQueryOrderRefundRequest.class), | |||
; | |||
@@ -14,16 +14,24 @@ import lombok.Setter; | |||
@Setter | |||
public class AtsAliOrderApplyResponse extends AbstractAtsResponse { | |||
//商户订单号 | |||
/** | |||
*商户订单号 | |||
* */ | |||
private String outTradeNo; | |||
//支付宝交易号 | |||
private String tradeNo; | |||
// Native参数,支付二维码内容(需转换成二维码展示) | |||
/** | |||
* Native,支付二维码内容(需转换成二维码展示) | |||
* */ | |||
private String qrCode; | |||
//手机网站支付接口2.0 响应表单 | |||
private String form; | |||
/** | |||
* APP获取的 签名字符串 | |||
* */ | |||
private String orderStr; | |||
/** | |||
* H5返回的 跳转页面数据 | |||
* */ | |||
private String pageRedirectionData; | |||
} |
@@ -14,14 +14,15 @@ import lombok.Setter; | |||
@Setter | |||
public class AtsAliOrderRefundResponse extends AbstractAtsResponse { | |||
//商户订单号 | |||
/** | |||
*商户订单号 | |||
* */ | |||
private String outTradeNo; | |||
//交易状态,WAIT_BUYER_PAY(交易创建,等待买家付款)、TRADE_CLOSED(未付款交易超时关闭,或支付完成后全额退款)、TRADE_SUCCESS(交易支付成功)、TRADE_FINISHED(交易结束,不可退款) | |||
private String tradeStatus; | |||
//交易的订单金额,单位为元,两位小数 | |||
private String totalAmount; | |||
/** | |||
*交易的订单金额,单位为元,两位小数 | |||
* */ | |||
private String refundFee; | |||
} |
@@ -14,14 +14,21 @@ import lombok.Setter; | |||
@Setter | |||
public class AtsAliQueryOrderApplyResponse extends AbstractAtsResponse { | |||
//商户订单号 | |||
/** | |||
* 商户订单号 | |||
* */ | |||
private String outTradeNo; | |||
//交易状态,WAIT_BUYER_PAY(交易创建,等待买家付款)、TRADE_CLOSED(未付款交易超时关闭,或支付完成后全额退款)、TRADE_SUCCESS(交易支付成功)、TRADE_FINISHED(交易结束,不可退款) | |||
/** | |||
*交易状态,WAIT_BUYER_PAY(交易创建,等待买家付款)、TRADE_CLOSED(未付款交易超时关闭,或支付完成后全额退款)、TRADE_SUCCESS(交易支付成功)、TRADE_FINISHED(交易结束,不可退款) | |||
* */ | |||
private String tradeStatus; | |||
//交易的订单金额,单位为元,两位小数 | |||
/** | |||
*交易的订单金额,单位为元,两位小数 | |||
* */ | |||
private String totalAmount; | |||
} |
@@ -0,0 +1,46 @@ | |||
package cn.com.taiji.core.model.comm.protocol.ats.ali; | |||
import cn.com.taiji.core.model.comm.protocol.ats.AbstractAtsRequest; | |||
import cn.com.taiji.core.model.comm.protocol.valid.ErrorMsgBuilder; | |||
import lombok.Getter; | |||
import lombok.Setter; | |||
import javax.validation.constraints.NotBlank; | |||
/** | |||
* @Author:ChenChao | |||
* @Date:2025/5/10 14:17 | |||
* @Filename:AtsCreatPayOrder | |||
* @description: | |||
*/ | |||
@Getter | |||
@Setter | |||
public class AtsAliQueryOrderRefundRequest extends AbstractAtsRequest<AtsAliQueryOrderRefundResponse> { | |||
@NotBlank | |||
private String privateKey;// 你的商户私钥 | |||
@NotBlank | |||
private String publicKey;//商户公钥 | |||
@NotBlank | |||
private String appid;//应用ID spAppid;服务商应用ID | |||
@NotBlank | |||
private String outTradeNo;//商户订单号 | |||
@NotBlank | |||
private String outRequestNo;//退款请求号。 请求退款接口时,传入的退款请求号,如果在退款请求时未传入,则该值为创建交易时的商户订单号。 | |||
public AtsAliQueryOrderRefundRequest() { | |||
super(AliServiceCmd.QUERYORDERAPPLY); | |||
} | |||
@Override | |||
protected void validate(ErrorMsgBuilder builder) { | |||
} | |||
} |
@@ -0,0 +1,41 @@ | |||
package cn.com.taiji.core.model.comm.protocol.ats.ali; | |||
import cn.com.taiji.core.model.comm.protocol.ats.AbstractAtsResponse; | |||
import lombok.Getter; | |||
import lombok.Setter; | |||
/** | |||
* @Author:ChenChao | |||
* @Date:2025/5/10 14:17 | |||
* @Filename:AtsCreatPayOrder | |||
* @description: | |||
*/ | |||
@Getter | |||
@Setter | |||
public class AtsAliQueryOrderRefundResponse extends AbstractAtsResponse { | |||
/** | |||
* 商户订单号 | |||
* */ | |||
private String outTradeNo; | |||
/** | |||
* 退款状态。枚举值: REFUND_SUCCESS 退款处理成功; 未返回该字段表示退款请求未收到或者退款失败; | |||
* 注:如果退款查询发起时间早于退款时间,或者间隔退款发起时间太短, | |||
* 可能出现退款查询时还没处理成功,后面又处理成功的情况,建议商户在退款发起后间隔10秒以上再发起退款查询请求。 | |||
* */ | |||
private String refundStatus; | |||
/** | |||
* 该笔退款所对应的交易的订单金额。单位:元。 | |||
* */ | |||
private String totalAmount; | |||
/** | |||
* 本次退款请求,对应的退款金额,单位:元。 | |||
* */ | |||
private String refundAmount; | |||
} |
@@ -113,7 +113,7 @@ public class AliCreatePayOrderManager extends AbstractCommManager { | |||
} | |||
AtsAliOrderApplyResponse response = new AtsAliOrderApplyResponse(); | |||
response.setOutTradeNo(createResponse.getOutTradeNo()); | |||
response.setForm(createResponse.getBody()); | |||
response.setPageRedirectionData(createResponse.getPageRedirectionData()); | |||
return response; | |||
} catch (AlipayApiException e) { | |||
logger.error("调用支付宝手机网站支付接口2.0失败", e); | |||
@@ -160,7 +160,6 @@ public class AliCreatePayOrderManager extends AbstractCommManager { | |||
} | |||
AtsAliOrderApplyResponse response = new AtsAliOrderApplyResponse(); | |||
response.setOutTradeNo(createResponse.getOutTradeNo()); | |||
response.setTradeNo(createResponse.getTradeNo()); | |||
return response; | |||
} catch (AlipayApiException e) { | |||
logger.error("调用支付宝统一收单线下交易预创建接口失败", e); | |||
@@ -196,8 +195,8 @@ public class AliCreatePayOrderManager extends AbstractCommManager { | |||
throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("下单失败:" + createResponse.getMsg() + "-" + createResponse.getSubMsg()); | |||
} | |||
AtsAliOrderApplyResponse response = new AtsAliOrderApplyResponse(); | |||
response.setOutTradeNo(request.getOutTradeNo()); | |||
response.setForm(createResponse.getBody()); | |||
response.setOutTradeNo(createResponse.getOutTradeNo()); | |||
response.setOrderStr(createResponse.getOrderStr()); | |||
return response; | |||
} catch (AlipayApiException e) { | |||
logger.error("调用支付宝统一收单下单并支付页面接口失败", e); |
@@ -3,18 +3,13 @@ package cn.com.taiji.ats.manager.ali; | |||
import cn.com.taiji.ats.manager.AbstractCommManager; | |||
import cn.com.taiji.ats.manager.tools.ali.AlipayConfigUtils; | |||
import cn.com.taiji.common.manager.net.http.ServiceHandleException; | |||
import cn.com.taiji.core.model.comm.protocol.ats.ali.AtsAliOrderApplyResponse; | |||
import cn.com.taiji.core.model.comm.protocol.ats.ali.AtsAliOrderRefundRequest; | |||
import cn.com.taiji.core.model.comm.protocol.ats.ali.AtsAliQueryOrderApplyRequest; | |||
import cn.com.taiji.core.model.comm.protocol.ats.ali.AtsAliQueryOrderApplyResponse; | |||
import cn.com.taiji.core.model.comm.protocol.ats.ali.*; | |||
import cn.com.taiji.core.model.comm.protocol.valid.GlyServiceError; | |||
import com.alipay.api.AlipayApiException; | |||
import com.alipay.api.AlipayClient; | |||
import com.alipay.api.domain.AlipayTradeQueryModel; | |||
import com.alipay.api.domain.AlipayTradeRefundModel; | |||
import com.alipay.api.request.AlipayTradeQueryRequest; | |||
import com.alipay.api.request.AlipayTradeRefundRequest; | |||
import com.alipay.api.response.AlipayTradeQueryResponse; | |||
import com.alipay.api.response.AlipayTradeRefundResponse; | |||
import org.springframework.stereotype.Service; | |||
import org.springframework.util.StringUtils; | |||
@@ -31,7 +26,7 @@ import java.time.LocalDateTime; | |||
@Service | |||
public class AliOrderRefundManager extends AbstractCommManager { | |||
public AtsAliOrderApplyResponse serviceHandle(AtsAliOrderRefundRequest request) throws ServiceHandleException { | |||
public AtsAliOrderRefundResponse serviceHandle(AtsAliOrderRefundRequest request) throws ServiceHandleException { | |||
logger.info("支付宝退款接口开始{},参数{}", LocalDateTime.now(), request.toJson()); | |||
if (!StringUtils.isEmpty(request.getRefundAmount())){ | |||
if (StringUtils.isEmpty(request.getOutRequestNo())){ | |||
@@ -64,7 +59,20 @@ public class AliOrderRefundManager extends AbstractCommManager { | |||
refundRequest.setBizModel(model); | |||
return null; | |||
try { | |||
AlipayTradeRefundResponse refundResponse = alipayClient.execute(refundRequest); | |||
if (!refundResponse.isSuccess()) { | |||
throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("退款失败:" + refundResponse.getMsg() + "-" + refundResponse.getSubMsg()); | |||
} | |||
AtsAliOrderRefundResponse response = new AtsAliOrderRefundResponse(); | |||
response.setOutTradeNo(refundResponse.getOutTradeNo()); | |||
response.setRefundFee(refundResponse.getRefundFee()); | |||
return response; | |||
} catch (AlipayApiException e) { | |||
logger.error("调用支付宝统一收单线下交易退款接口失败", e); | |||
throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("调用支付宝统一收单线下交易退款接口失败:" + e.getErrMsg()); | |||
} | |||
} | |||
} |
@@ -0,0 +1,62 @@ | |||
package cn.com.taiji.ats.manager.ali; | |||
import cn.com.taiji.ats.manager.AbstractCommManager; | |||
import cn.com.taiji.ats.manager.tools.ali.AlipayConfigUtils; | |||
import cn.com.taiji.common.manager.net.http.ServiceHandleException; | |||
import cn.com.taiji.core.model.comm.protocol.ats.ali.AtsAliQueryOrderRefundRequest; | |||
import cn.com.taiji.core.model.comm.protocol.ats.ali.AtsAliQueryOrderRefundResponse; | |||
import cn.com.taiji.core.model.comm.protocol.valid.GlyServiceError; | |||
import com.alipay.api.AlipayApiException; | |||
import com.alipay.api.AlipayClient; | |||
import com.alipay.api.domain.AlipayTradeFastpayRefundQueryModel; | |||
import com.alipay.api.request.AlipayTradeFastpayRefundQueryRequest; | |||
import com.alipay.api.response.AlipayTradeFastpayRefundQueryResponse; | |||
import org.springframework.stereotype.Service; | |||
/** | |||
* @Auther: humh | |||
* @Description: | |||
* @Date: 2025/8/20 11:05 | |||
* @email: huminghao@mail.taiji.com.cn | |||
* @version: 1.0 | |||
*/ | |||
@Service | |||
public class AliQueryOrderRefundManager extends AbstractCommManager { | |||
public AtsAliQueryOrderRefundResponse serviceHandle(AtsAliQueryOrderRefundRequest request) throws ServiceHandleException { | |||
AlipayClient alipayClient = null; | |||
try { | |||
alipayClient = AlipayConfigUtils.createAlipayClient(request.getAppid(), request.getPrivateKey(), request.getPublicKey()); | |||
} catch (AlipayApiException e) { | |||
logger.error("支付宝初始化SDK异常:"+e.getMessage()); | |||
throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("支付宝初始化SDK异常:"+e.getMessage()); | |||
} | |||
// 构造请求参数以调用接口 | |||
AlipayTradeFastpayRefundQueryRequest queryRequest = new AlipayTradeFastpayRefundQueryRequest(); | |||
AlipayTradeFastpayRefundQueryModel model = new AlipayTradeFastpayRefundQueryModel(); | |||
model.setOutRequestNo(request.getOutRequestNo()); | |||
// 设置商户订单号 | |||
model.setOutTradeNo(request.getOutTradeNo()); | |||
queryRequest.setBizModel(model); | |||
try { | |||
AlipayTradeFastpayRefundQueryResponse queryResponse = alipayClient.execute(queryRequest); | |||
if (!queryResponse.isSuccess()) { | |||
throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("订单查询失败:" + queryResponse.getMsg() + "-" + queryResponse.getSubMsg()); | |||
} | |||
AtsAliQueryOrderRefundResponse response = new AtsAliQueryOrderRefundResponse(); | |||
response.setOutTradeNo(queryResponse.getOutTradeNo()); | |||
response.setRefundStatus(queryResponse.getRefundStatus()); | |||
response.setTotalAmount(queryResponse.getTotalAmount()); | |||
response.setRefundAmount(queryResponse.getRefundAmount()); | |||
return response; | |||
} catch (AlipayApiException e) { | |||
logger.error("调用支付宝统一收单线下交易查询接口失败", e); | |||
throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("调用支付宝统一收单线下交易查询接口失败:" + e.getErrMsg()); | |||
} | |||
} | |||
} |
@@ -45,7 +45,7 @@ public class AliQueryPayOrderManager extends AbstractCommManager { | |||
try { | |||
AlipayTradeQueryResponse queryResponse = alipayClient.execute(queryRequest); | |||
if (!queryResponse.isSuccess()) { | |||
throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("下单失败:" + queryResponse.getMsg() + "-" + queryResponse.getSubMsg()); | |||
throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("订单查询失败:" + queryResponse.getMsg() + "-" + queryResponse.getSubMsg()); | |||
} | |||
AtsAliQueryOrderApplyResponse response = new AtsAliQueryOrderApplyResponse(); | |||
response.setOutTradeNo(queryResponse.getOutTradeNo()); | |||
@@ -53,8 +53,8 @@ public class AliQueryPayOrderManager extends AbstractCommManager { | |||
response.setTotalAmount(queryResponse.getTotalAmount()); | |||
return response; | |||
} catch (AlipayApiException e) { | |||
logger.error("调用支付宝统一收单线下交易预创建接口失败", e); | |||
throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("调用支付宝统一收单线下交易预创建接口失败:" + e.getErrMsg()); | |||
logger.error("调用支付宝统一收单线下交易查询接口失败", e); | |||
throw GlyServiceError.BUSINESS_VALIDATE_ERR.toHandleException("调用支付宝统一收单线下交易查询接口失败:" + e.getErrMsg()); | |||
} | |||
} | |||
@@ -2,6 +2,7 @@ package cn.com.taiji.ats.manager.handler; | |||
import cn.com.taiji.ats.manager.ali.AliCreatePayOrderManager; | |||
import cn.com.taiji.ats.manager.ali.AliOrderRefundManager; | |||
import cn.com.taiji.ats.manager.ali.AliQueryOrderRefundManager; | |||
import cn.com.taiji.ats.manager.ali.AliQueryPayOrderManager; | |||
import cn.com.taiji.common.manager.net.http.ServiceHandleException; | |||
import cn.com.taiji.common.model.file.FileProtocolSystemError; | |||
@@ -9,12 +10,10 @@ import cn.com.taiji.core.model.comm.protocol.AbstractSignTypeRequest; | |||
import cn.com.taiji.core.model.comm.protocol.AbstractSignTypeResponse; | |||
import cn.com.taiji.core.model.comm.protocol.SignJsonRequest; | |||
import cn.com.taiji.core.model.comm.protocol.ats.AtsServiceType; | |||
import cn.com.taiji.core.model.comm.protocol.ats.ali.AliServiceCmd; | |||
import cn.com.taiji.core.model.comm.protocol.ats.ali.AtsAliOrderApplyRequest; | |||
import cn.com.taiji.core.model.comm.protocol.ats.ali.AtsAliOrderRefundRequest; | |||
import cn.com.taiji.core.model.comm.protocol.ats.ali.AtsAliQueryOrderApplyRequest; | |||
import cn.com.taiji.core.model.comm.protocol.ats.ali.*; | |||
import cn.com.taiji.core.model.comm.protocol.ats.weiXin.*; | |||
import com.zgglyun.common.model.AbstractHttpRequestInfo; | |||
import org.checkerframework.checker.units.qual.A; | |||
import org.springframework.beans.factory.annotation.Autowired; | |||
import org.springframework.stereotype.Service; | |||
@@ -40,6 +39,8 @@ public class AliServiceHandler extends AbstractAtsServiceHandler<WeiXinServiceCm | |||
private AliQueryPayOrderManager aliQueryPayOrderManager; | |||
@Autowired | |||
private AliOrderRefundManager aliOrderRefundManager; | |||
@Autowired | |||
private AliQueryOrderRefundManager aliQueryOrderRefundManager; | |||
@Override | |||
@@ -53,6 +54,8 @@ public class AliServiceHandler extends AbstractAtsServiceHandler<WeiXinServiceCm | |||
return aliQueryPayOrderManager.serviceHandle((AtsAliQueryOrderApplyRequest) request); | |||
case ORDERREFUND: | |||
return aliOrderRefundManager.serviceHandle((AtsAliOrderRefundRequest) request); | |||
case QUERYORDERREFUND: | |||
return aliQueryOrderRefundManager.serviceHandle((AtsAliQueryOrderRefundRequest) request); | |||
default: | |||
throw FileProtocolSystemError.NOT_SUPPORT.toHandleException(jsonReq.getIfCode()); | |||
} |