diff --git a/src/main/java/com/sczx/pay/controller/AliPayOrderCloseController.java b/src/main/java/com/sczx/pay/controller/AliPayOrderCloseController.java index 35e808a..32ce165 100644 --- a/src/main/java/com/sczx/pay/controller/AliPayOrderCloseController.java +++ b/src/main/java/com/sczx/pay/controller/AliPayOrderCloseController.java @@ -1,9 +1,7 @@ package com.sczx.pay.controller; -import com.alipay.api.*; - +import com.alipay.api.domain.AlipayCommerceRentOrderCloseModel; 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; @@ -30,9 +28,9 @@ public class AliPayOrderCloseController { */ @ApiOperation(value = "支付宝订单关闭接口") @PostMapping("/orderClose") - public AlipayCommerceRentOrderCloseResponse aliPayOrderClose(@RequestBody AlipayOrderCloseRequest alipayOrderCloseRequest) { - log.info("支付宝订单关闭接口请求: {}", alipayOrderCloseRequest); - return aliPayOrderCloseService.aliPayOrderClose(alipayOrderCloseRequest); + public AlipayCommerceRentOrderCloseResponse aliPayOrderClose(@RequestBody AlipayCommerceRentOrderCloseModel model) { + log.info("支付宝订单关闭接口请求: {}", model); + return aliPayOrderCloseService.aliPayOrderClose(model); } diff --git a/src/main/java/com/sczx/pay/controller/AliPayOrderFulfillmentController.java b/src/main/java/com/sczx/pay/controller/AliPayOrderFulfillmentController.java new file mode 100644 index 0000000..06797a0 --- /dev/null +++ b/src/main/java/com/sczx/pay/controller/AliPayOrderFulfillmentController.java @@ -0,0 +1,49 @@ +package com.sczx.pay.controller; + + +import com.alipay.api.domain.AlipayCommerceRentOrderFulfillmentFinishModel; +import com.alipay.api.response.AlipayCommerceRentOrderFulfillmentApproveResponse; +import com.alipay.api.domain.AlipayCommerceRentOrderFulfillmentApproveModel; +import com.alipay.api.response.AlipayCommerceRentOrderFulfillmentFinishResponse; +import com.sczx.pay.service.AliPayOrderFulfillmentService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +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; + + + +@Api(value = "支付宝订单履约接口", tags = "支付宝租赁履约接口") +@Slf4j +@RestController +@RequestMapping("/alipay/orderFulfillment") +public class AliPayOrderFulfillmentController { + + @Autowired + private AliPayOrderFulfillmentService aliPayOrderFulfillmentService; + + /** + * 支付宝订单履约审核接口 + */ + @ApiOperation(value = "支付宝订单履约审核接口") + @PostMapping("/approve") + public AlipayCommerceRentOrderFulfillmentApproveResponse aliPayOrderFulfillmentApprove(@RequestBody AlipayCommerceRentOrderFulfillmentApproveModel model) { + log.info("支付宝订单履约审核接口请求: {}", model); + return aliPayOrderFulfillmentService.aliPayOrderFulfillmentApprove(model); + } + + + /** + * 支付宝订单履约完成接口 + */ + @ApiOperation(value = "支付宝订单履约完成接口") + @PostMapping("/finish") + public AlipayCommerceRentOrderFulfillmentFinishResponse aliPayOrderFulfillmentFinish(@RequestBody AlipayCommerceRentOrderFulfillmentFinishModel model) { + log.info("支付宝订单履约审核接口请求: {}", model); + return aliPayOrderFulfillmentService.aliPayOrderFulfillmentFinish(model); + } +} diff --git a/src/main/java/com/sczx/pay/dto/AlipayOrderCloseRequest.java b/src/main/java/com/sczx/pay/dto/AlipayOrderCloseRequest.java deleted file mode 100644 index b1d6caf..0000000 --- a/src/main/java/com/sczx/pay/dto/AlipayOrderCloseRequest.java +++ /dev/null @@ -1,15 +0,0 @@ -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; // 买家支付宝用户唯一标识 - -} diff --git a/src/main/java/com/sczx/pay/service/AliPayOrderCloseService.java b/src/main/java/com/sczx/pay/service/AliPayOrderCloseService.java index 8dacf4f..ca5258a 100644 --- a/src/main/java/com/sczx/pay/service/AliPayOrderCloseService.java +++ b/src/main/java/com/sczx/pay/service/AliPayOrderCloseService.java @@ -1,15 +1,15 @@ package com.sczx.pay.service; +import com.alipay.api.domain.AlipayCommerceRentOrderCloseModel; import com.alipay.api.response.AlipayCommerceRentOrderCloseResponse; -import com.sczx.pay.dto.AlipayOrderCloseRequest; public interface AliPayOrderCloseService { /** * 支付宝订单关闭接口 - * @param alipayOrderCloseRequest + * @param model * @return */ - public AlipayCommerceRentOrderCloseResponse aliPayOrderClose(AlipayOrderCloseRequest alipayOrderCloseRequest); + public AlipayCommerceRentOrderCloseResponse aliPayOrderClose(AlipayCommerceRentOrderCloseModel model); } diff --git a/src/main/java/com/sczx/pay/service/AliPayOrderFulfillmentService.java b/src/main/java/com/sczx/pay/service/AliPayOrderFulfillmentService.java new file mode 100644 index 0000000..dbc6096 --- /dev/null +++ b/src/main/java/com/sczx/pay/service/AliPayOrderFulfillmentService.java @@ -0,0 +1,25 @@ +package com.sczx.pay.service; + +import com.alipay.api.domain.AlipayCommerceRentOrderFulfillmentApproveModel; +import com.alipay.api.domain.AlipayCommerceRentOrderFulfillmentFinishModel; +import com.alipay.api.response.AlipayCommerceRentOrderFulfillmentApproveResponse; +import com.alipay.api.response.AlipayCommerceRentOrderFulfillmentFinishResponse; + +public interface AliPayOrderFulfillmentService { + + /** + * 支付宝订单履约审核 + * @param model + * @return + */ + public AlipayCommerceRentOrderFulfillmentApproveResponse aliPayOrderFulfillmentApprove(AlipayCommerceRentOrderFulfillmentApproveModel model); + + + /** + * 支付宝订单履约完成 + * @param model + * @return + */ + public AlipayCommerceRentOrderFulfillmentFinishResponse aliPayOrderFulfillmentFinish(AlipayCommerceRentOrderFulfillmentFinishModel model); + +} diff --git a/src/main/java/com/sczx/pay/service/WechatPayService.java b/src/main/java/com/sczx/pay/service/WechatPayService.java index 039219d..09d3226 100644 --- a/src/main/java/com/sczx/pay/service/WechatPayService.java +++ b/src/main/java/com/sczx/pay/service/WechatPayService.java @@ -412,11 +412,6 @@ public class WechatPayService { if(OrderStatus.equals("WAIT_PAY")){ orderPayMapper.updateOrderStatus(orderMain.getOrderNo(),"WAIT_PICK"); - String subOrderId = orderPayMapper.getSubOrderIdByTradeNo(outTradeNo).toString(); - if (!subOrderId.isEmpty()) { - String result = sendSubOrderId(subOrderId); - logger.info("调用subOrder接口结果: {}", result); - } }else if (OrderStatus.equals("RERENT_WAIT_PAY")){ OrderSub orderSub = orderPayMapper.getSubOrderByTradeNo(outTradeNo); orderPayMapper.updateOrderStatusAndEndRentTime(orderMain.getOrderNo(),orderSub.getReturnTime(),0,orderMain.getOrderAmount().add(orderSub.getAmount()),"RENT_ING"); @@ -565,49 +560,4 @@ public class WechatPayService { } } - /** - * 发送subOrderId到指定接口 - * @param subOrderId 子订单ID - * @return 响应结果 - */ - public String sendSubOrderId(String subOrderId) { - try { - // 构造完整的URL,将subOrderId作为参数传递 - String url = "http://115.190.8.52:8016/send/subOrder/" + subOrderId; - - // 创建URL对象 - java.net.URL obj = new java.net.URL(url); - java.net.HttpURLConnection connection = (java.net.HttpURLConnection) obj.openConnection(); - - // 设置请求方法为GET - connection.setRequestMethod("GET"); - - // 设置连接超时和读取超时 - connection.setConnectTimeout(5000); - connection.setReadTimeout(5000); - - // 获取响应码 - int responseCode = connection.getResponseCode(); - logger.info("发送subOrderId请求,URL: {}, 响应码: {}", url, responseCode); - - // 读取响应内容 - java.io.BufferedReader in = new java.io.BufferedReader( - new java.io.InputStreamReader(connection.getInputStream()) - ); - String inputLine; - StringBuilder response = new StringBuilder(); - - while ((inputLine = in.readLine()) != null) { - response.append(inputLine); - } - in.close(); - - return response.toString(); - } catch (Exception e) { - logger.error("发送subOrderId到接口失败,subOrderId: {}", subOrderId, e); - return "ERROR: " + e.getMessage(); - } - } - - } diff --git a/src/main/java/com/sczx/pay/service/impl/AliPayOrderCloseServiceImpl.java b/src/main/java/com/sczx/pay/service/impl/AliPayOrderCloseServiceImpl.java index 1a11458..7484e00 100644 --- a/src/main/java/com/sczx/pay/service/impl/AliPayOrderCloseServiceImpl.java +++ b/src/main/java/com/sczx/pay/service/impl/AliPayOrderCloseServiceImpl.java @@ -1,10 +1,9 @@ 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.OrderMain; import com.sczx.pay.entity.PayStatus; import com.sczx.pay.entity.ReasonCodes; import com.sczx.pay.mapper.OrderPayMapper; @@ -12,7 +11,6 @@ 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 @@ -27,25 +25,15 @@ public class AliPayOrderCloseServiceImpl implements AliPayOrderCloseService { /** * 支付宝订单关闭接口 * - * @param alipayOrderCloseRequest + * @param model * @return */ @Override - public AlipayCommerceRentOrderCloseResponse aliPayOrderClose(AlipayOrderCloseRequest alipayOrderCloseRequest) { + public AlipayCommerceRentOrderCloseResponse aliPayOrderClose(AlipayCommerceRentOrderCloseModel model) { 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()); @@ -62,10 +50,14 @@ public class AliPayOrderCloseServiceImpl implements AliPayOrderCloseService { if (response.isSuccess()) { log.info("支付宝订单关闭接口调用成功,开始更新订单状态"); /** 更新订单状态 */ - orderPayMapper.updateOrderStatus(alipayOrderCloseRequest.getOutOrderId(), PayStatus.CLOSED.getCode()); + /** 履约审核通过,更新订单状态为租赁中 */ + OrderMain orderMain = orderPayMapper.getOrderStatusByOrderNo(model.getOutOrderId()); + orderPayMapper.updateOrderStatus(orderMain.getOrderNo(), PayStatus.CLOSED.getCode()); + }else{ + log.error("支付宝订单关闭接口调用失败,OutOrderId: {}", model.getOutOrderId()); } } catch (Exception e) { - log.error("支付宝关闭异常,订单号: {}", alipayOrderCloseRequest.getOutOrderId(), e); + log.error("支付宝关闭异常,OutOrderId: {}", model.getOutOrderId(), e); response.setCode("FAIL"); response.setMsg("关闭订单失败异常: " + e.getMessage()); } diff --git a/src/main/java/com/sczx/pay/service/impl/AliPayOrderFulfillmentServiceImpl.java b/src/main/java/com/sczx/pay/service/impl/AliPayOrderFulfillmentServiceImpl.java new file mode 100644 index 0000000..1e5d78b --- /dev/null +++ b/src/main/java/com/sczx/pay/service/impl/AliPayOrderFulfillmentServiceImpl.java @@ -0,0 +1,82 @@ +package com.sczx.pay.service.impl; + +import com.alipay.api.domain.AlipayCommerceRentOrderFulfillmentApproveModel; +import com.alipay.api.domain.AlipayCommerceRentOrderFulfillmentFinishModel; +import com.alipay.api.request.AlipayCommerceRentOrderFulfillmentApproveRequest; +import com.alipay.api.request.AlipayCommerceRentOrderFulfillmentFinishRequest; +import com.alipay.api.response.AlipayCommerceRentOrderFulfillmentApproveResponse; +import com.alipay.api.response.AlipayCommerceRentOrderFulfillmentFinishResponse; +import com.sczx.pay.entity.OrderMain; +import com.sczx.pay.entity.OrderSub; +import com.sczx.pay.entity.PayStatus; +import com.sczx.pay.mapper.OrderPayMapper; +import com.sczx.pay.service.AliPayOrderFulfillmentService; +import com.sczx.pay.utils.AlipaySdkUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Slf4j +@Service +public class AliPayOrderFulfillmentServiceImpl implements AliPayOrderFulfillmentService { + + @Autowired + private AlipaySdkUtil alipaySdkUtil; + @Autowired + private OrderPayMapper orderPayMapper; + + public AlipayCommerceRentOrderFulfillmentApproveResponse aliPayOrderFulfillmentApprove(AlipayCommerceRentOrderFulfillmentApproveModel model) { + AlipayCommerceRentOrderFulfillmentApproveResponse response = new AlipayCommerceRentOrderFulfillmentApproveResponse(); + try{ + // 构造请求参数以调用接口 + AlipayCommerceRentOrderFulfillmentApproveRequest request = new AlipayCommerceRentOrderFulfillmentApproveRequest(); + + request.setBizModel(model); + + response = alipaySdkUtil.execute(request); + log.info("支付宝订单履约审核接口响应 : {}",response.getBody()); + if (response.isSuccess()) { + log.info("支付宝订单履约审核接口调用成功,更新订单状态为租赁中,订单号: {}", model.getOutOrderId()); + /** 履约审核通过,更新订单状态为租赁中 */ + OrderMain orderMain = orderPayMapper.getOrderStatusByOrderNo(model.getOutOrderId()); + orderPayMapper.updateOrderStatus(orderMain.getOrderNo(),"RENT_ING"); + } else { + log.error("支付宝订单履约审核接口调用失败,OutOrderId: {}", model.getOutOrderId()); + } + } catch (Exception e) { + log.error("支付宝订单履约审核异常,OutOrderId: {}", model.getOutOrderId(), e); + response.setCode("FAIL"); + response.setMsg("支付宝订单履约审核失败异常: " + e.getMessage()); + } + return response; + } + + @Override + public AlipayCommerceRentOrderFulfillmentFinishResponse aliPayOrderFulfillmentFinish(AlipayCommerceRentOrderFulfillmentFinishModel model) { + AlipayCommerceRentOrderFulfillmentFinishResponse response = new AlipayCommerceRentOrderFulfillmentFinishResponse(); + try{ + // 构造请求参数以调用接口 + AlipayCommerceRentOrderFulfillmentFinishRequest request = new AlipayCommerceRentOrderFulfillmentFinishRequest(); + + request.setBizModel(model); + + response = alipaySdkUtil.execute(request); + log.info("支付宝订单履约完成接口响应 : {}",response.getBody()); + if (response.isSuccess()) { + log.info("支付宝订单履约完成接口调用成功,更新订单状态为己结束-还车,订单号: {}", model.getOutOrderId()); + /** 支付宝订单履约完成通过,更新订单状态为己结束-还车 */ + //更新主订单状态 + OrderMain orderMain = orderPayMapper.getOrderStatusByOrderNo(model.getOutOrderId()); + orderPayMapper.updateOrderStatus(orderMain.getOrderNo(),"AUTO_END"); + } else { + log.error("支付宝订单履约完成接口调用失败,OutOrderId: {}", model.getOutOrderId()); + } + } catch (Exception e) { + log.error("支付宝订单履约完成异常,OutOrderId: {}", model.getOutOrderId(), e); + response.setCode("FAIL"); + response.setMsg("支付宝订单履约完成异常: " + e.getMessage()); + } + return response; + } + +}