package com.ai.da.controller; import com.ai.da.common.response.Response; import com.ai.da.model.dto.ProductPurchaseDTO; import com.ai.da.service.PayPalCheckoutService; import com.paypal.http.HttpResponse; import com.paypal.http.exceptions.SerializeException; import com.paypal.orders.Order; import com.paypal.payments.Refund; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.web.bind.annotation.*; import jakarta.annotation.Resource; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import jakarta.validation.Valid; import java.io.IOException; import java.util.HashMap; @RestController @Tag(name = "PayPalCheckout接口") @RequestMapping("/api/paypal") public class PayPalCheckoutController { @Resource private PayPalCheckoutService payPalCheckoutService; @Operation(summary = "创建订单") @PostMapping(value = "/trade") public Response> createOrder(@Valid @RequestBody ProductPurchaseDTO productPurchaseDTO, HttpServletRequest request) throws SerializeException { HashMap approvalUrl = payPalCheckoutService.createOrder(productPurchaseDTO, request); return Response.success(approvalUrl); } @Operation(summary = "ipn异步回调") @PostMapping(value = "/ipn/back") public Response callback(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Boolean result = payPalCheckoutService.doPost(request, response); if (result){ return Response.success(200,"success"); }else { return Response.fail(500,"failure"); } } @Operation(summary = "查询指定订单") @PostMapping(value = "/trade/query/{orderNo}") public Response queryOrder(@PathVariable String orderNo) throws SerializeException { Order s = payPalCheckoutService.queryOrder(orderNo); return Response.success(s); } /** 不提供退款接口 */ @Operation(summary = "申请退款") @PostMapping("/trade/refund/{orderNo}/{reason}") public Response> refund(@PathVariable String orderNo, @PathVariable String reason) throws IOException { Boolean response = payPalCheckoutService.refundOrder(orderNo,reason); if (response){ return Response.success(); }else { return Response.fail("Request for refund failed."); } } @Operation(summary = "执行扣款") @PostMapping("/trade/capture/{orderNo}") public Response captureOrder(@PathVariable String orderNo) throws IOException { Order response = payPalCheckoutService.captureOrder(orderNo); return Response.success(response); } }