订单关闭接口

This commit is contained in:
19173159168
2025-09-07 00:41:18 +08:00
parent 8d44a27d63
commit d9935428fe
5 changed files with 313 additions and 0 deletions

View File

@ -0,0 +1,44 @@
package com.sczx.pay.controller;
import com.alipay.api.*;
import com.alipay.api.response.AlipayCommerceRentOrderCloseResponse;
import com.sczx.pay.dto.AlipayOrderCloseRequest;
import com.sczx.pay.service.AliPayOrderCloseService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
@Api(value = "支付宝租赁订单关闭接口", tags = "支付宝租赁订单关闭接口")
@Slf4j
@RestController
@RequestMapping("/alipay/orderClose")
public class AliPayOrderCloseController {
private static final Logger logger = LoggerFactory.getLogger(AliPayOrderCloseController.class);
@Autowired
private AliPayOrderCloseService aliPayOrderCloseService;
/**
* 支付宝订单关闭接口
*/
@ApiOperation(value = "支付宝订单关闭接口")
@PostMapping("/orderClose")
public AlipayCommerceRentOrderCloseResponse aliPayOrderClose(@RequestBody AlipayOrderCloseRequest alipayOrderCloseRequest) {
log.info("支付宝订单关闭接口请求: {}", alipayOrderCloseRequest);
return aliPayOrderCloseService.aliPayOrderClose(alipayOrderCloseRequest);
}
}

View File

@ -0,0 +1,15 @@
package com.sczx.pay.dto;
import lombok.Data;
@Data
public class AlipayOrderCloseRequest {
private String reasonCode; // 关单原因编码
private String reasonDesc; // 关单原因说明
private String orderId; // 交易组件订单号 orderId 和 outOrderId参数 二选一 传入
private String outOrderId; // 商户订单号
private String buyerId; // 买家ID buyerId 和 buyerOpenId 参数 二选一 传入
private String buyerOpenId; // 买家支付宝用户唯一标识
}

View File

@ -0,0 +1,165 @@
package com.sczx.pay.entity;
public enum ReasonCodes {
/**
* 用户租赁计划有变
*/
USER_LEASE_PLAN_CHANGED("3103", "用户租赁计划有变"),
/**
* 用户订单信息错误(租期、地址、商品信息等)
*/
USER_ORDER_INFO_ERROR("3104", "用户订单信息错误(租期、地址、商品信息等)"),
/**
* 用户测试或误操作
*/
USER_TEST_OR_MISOPERATION("3105", "用户测试或误操作"),
/**
* 用户重复下单
*/
USER_DUPLICATE_ORDER("3106", "用户重复下单"),
/**
* 用户不接电话
*/
USER_NOT_ANSWERING_CALLS("3107", "用户不接电话"),
/**
* 租金扣款失败
*/
RENT_DEDUCTION_FAILED("3108", "租金扣款失败"),
/**
* 用户不愿意预付租金
*/
USER_REFUSES_PREPAY_RENT("3109", "用户不愿意预付租金"),
/**
* 用户不愿意付押金
*/
USER_REFUSES_DEPOSIT("3110", "用户不愿意付押金"),
/**
* 用户对价格不认可
*/
USER_PRICE_DISAGREEMENT("3111", "用户对价格不认可"),
/**
* 用户担心非正品
*/
USER_WORRIED_NOT_AUTHENTIC("3132", "用户担心非正品"),
/**
* 用户担心商品损坏
*/
USER_WORRIED_PRODUCT_DAMAGE("3133", "用户担心商品损坏"),
/**
* 用户不要监管机
*/
USER_REFUSES_SUPERVISED_DEVICE("3134", "用户不要监管机"),
/**
* 收货地区不支持发货
*/
DELIVERY_AREA_NOT_SUPPORTED("3135", "收货地区不支持发货"),
/**
* 已购买同款商品
*/
ALREADY_PURCHASED_SAME_PRODUCT("3136", "已购买同款商品"),
/**
* 用户电话空号/关机
*/
USER_PHONE_UNAVAILABLE("3137", "用户电话空号/关机"),
/**
* 用户提供虚假信息
*/
USER_PROVIDED_FALSE_INFO("3112", "用户提供虚假信息"),
/**
* 用户不配合补充审核资料
*/
USER_NOT_COOPERATING_AUDIT("3113", "用户不配合补充审核资料"),
/**
* 用户资质问题
*/
USER_QUALIFICATION_ISSUES("3114", "用户资质问题"),
/**
* 智安盾高风险用户
*/
HIGH_RISK_USER("3115", "智安盾高风险用户"),
/**
* 审核时间过长
*/
AUDIT_TIME_TOO_LONG("3138", "审核时间过长"),
/**
* 商家私下要我隐私资料
*/
MERCHANT_ASKING_PRIVATE_INFO("3139", "商家私下要我隐私资料"),
/**
* 发货时间来不及
*/
DELIVERY_TIME_INSUFFICIENT("3116", "发货时间来不及"),
/**
* 商品缺货
*/
PRODUCT_OUT_OF_STOCK("3117", "商品缺货"),
/**
* 无物流信息
*/
NO_LOGISTICS_INFO("3140", "无物流信息"),
/**
* 服务态度差
*/
POOR_SERVICE_ATTITUDE("3141", "服务态度差"),
/**
* 私下收不合理费用
*/
UNREASONABLE_PRIVATE_CHARGES("3142", "私下收不合理费用"),
/**
* 联系不上商家
*/
CANNOT_CONTACT_MERCHANT("3143", "联系不上商家"),
/**
* 让我其他方式交易
*/
ASKED_FOR_OTHER_TRANSACTION_METHOD("3144", "让我其他方式交易");
private final String code;
private final String description;
ReasonCodes(String code, String description) {
this.code = code;
this.description = description;
}
public String getCode() {
return code;
}
public String getDescription() {
return description;
}
@Override
public String toString() {
return code;
}
}

View File

@ -0,0 +1,15 @@
package com.sczx.pay.service;
import com.alipay.api.response.AlipayCommerceRentOrderCloseResponse;
import com.sczx.pay.dto.AlipayOrderCloseRequest;
public interface AliPayOrderCloseService {
/**
* 支付宝订单关闭接口
* @param alipayOrderCloseRequest
* @return
*/
public AlipayCommerceRentOrderCloseResponse aliPayOrderClose(AlipayOrderCloseRequest alipayOrderCloseRequest);
}

View File

@ -0,0 +1,74 @@
package com.sczx.pay.service.impl;
import com.alipay.api.AlipayResponse;
import com.alipay.api.domain.AlipayCommerceRentOrderCloseModel;
import com.alipay.api.request.AlipayCommerceRentOrderCloseRequest;
import com.alipay.api.response.AlipayCommerceRentOrderCloseResponse;
import com.sczx.pay.dto.AlipayOrderCloseRequest;
import com.sczx.pay.entity.PayStatus;
import com.sczx.pay.entity.ReasonCodes;
import com.sczx.pay.mapper.OrderPayMapper;
import com.sczx.pay.service.AliPayOrderCloseService;
import com.sczx.pay.utils.AlipaySdkUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
@Slf4j
@Service
public class AliPayOrderCloseServiceImpl implements AliPayOrderCloseService {
@Autowired
private AlipaySdkUtil alipaySdkUtil;
@Autowired
private OrderPayMapper orderPayMapper;
/**
* 支付宝订单关闭接口
*
* @param alipayOrderCloseRequest
* @return
*/
@Override
public AlipayCommerceRentOrderCloseResponse aliPayOrderClose(AlipayOrderCloseRequest alipayOrderCloseRequest) {
AlipayCommerceRentOrderCloseResponse response = new AlipayCommerceRentOrderCloseResponse();
try{
// 构造请求参数以调用接口
AlipayCommerceRentOrderCloseRequest request = new AlipayCommerceRentOrderCloseRequest();
AlipayCommerceRentOrderCloseModel model = new AlipayCommerceRentOrderCloseModel();
// 设置交易组件订单号
model.setOrderId(alipayOrderCloseRequest.getOrderId());
// 设置商户订单号
model.setOutOrderId(alipayOrderCloseRequest.getOutOrderId());
// 设置买家支付宝用户唯一标识
model.setBuyerOpenId(alipayOrderCloseRequest.getBuyerOpenId());
// 设置关单原因编码
model.setReasonCode(ReasonCodes.USER_QUALIFICATION_ISSUES.getCode());
// 设置关单原因说明
model.setReasonDesc(ReasonCodes.USER_QUALIFICATION_ISSUES.getDescription());
request.setBizModel(model);
// 第三方代调用模式下请设置app_auth_token
// request.putOtherTextParam("app_auth_token", "<-- 请填写应用授权令牌 -->");
response = alipaySdkUtil.execute(request);
log.info("支付宝订单关闭接口响应 : {}",response.getBody());
if (response.isSuccess()) {
log.info("支付宝订单关闭接口调用成功,开始更新订单状态");
/** 更新订单状态 */
orderPayMapper.updateOrderStatus(alipayOrderCloseRequest.getOutOrderId(), PayStatus.CLOSED.getCode());
}
} catch (Exception e) {
log.error("支付宝关闭异常,订单号: {}", alipayOrderCloseRequest.getOutOrderId(), e);
response.setCode("FAIL");
response.setMsg("关闭订单失败异常: " + e.getMessage());
}
return response;
}
}