如何在不使用重定向或智能按钮的情况下批准贝宝订单ID

问题描述

我的目的似乎类似于先前how to approve an order ID

发布的问题

我已经实现了一个休息端点来完成订单支付,而无需使用重定向链接认的智能按钮生成

我正在使用沙盒环境和PayPal服务器端SDK V2

所以我使用API​​ OrdersCreateRequest()创建了一个订单,然后获得了一个订单ID

{
"id": "xxxxxxxxxxxxxxxx","status": "CREATED","links": [
    {
        "href": "https://api.sandBox.paypal.com/v2/checkout/orders/0XY49131JG183432Y","rel": "self","method": "GET"
    },{
        "href": "https://www.sandBox.paypal.com/checkoutNow?token=0XY49131JG183432Y","rel": "approve",{
        "href": "https://api.sandBox.paypal.com/v2/checkout/orders/0XY49131JG183432Y","rel": "update","method": "PATCH"
    },{
        "href": "https://api.sandBox.paypal.com/v2/checkout/orders/0XY49131JG183432Y/capture","rel": "capture","method": "POST"
    }
]
 }

我完全按照文档中的官方示例进行操作,但是我无法授权该订单

    @PostMapping( "payWorkerWithPaypal/{paypalWorkerEmail}/{totalAmount}")
    public Order payWorkerWithPaypal(@PathVariable("paypalWorkerEmail") String 
   
    paypalWorkerEmail,@PathVariable("totalAmount") String totalAmount) throws IOException {

    Order order = null;

    PayPalHttpClient client = new PayPalHttpClient(environment);

    OrderRequest orderRequest = new OrderRequest();

    orderRequest.checkoutPaymentIntent("CAPTURE");

    List<PurchaseUnitRequest> purchaseUnitRequests = new ArrayList<PurchaseUnitRequest>();

    PurchaseUnitRequest purchaseUnitRequest = new PurchaseUnitRequest();

     purchaseUnitRequest.amountWithBreakdown(new 
     AmountWithBreakdown().currencyCode("USD").value(totalAmount));

    Payee payee = new Payee();

    payee.email(paypalWorkerEmail);

    purchaseUnitRequest.payee(payee);

    Payer payer = new Payer();

    payer.email("[email protected]");

    purchaseUnitRequests.add(purchaseUnitRequest);

    orderRequest.purchaseUnits(purchaseUnitRequests);

    orderRequest.payer(payer);

    OrdersCreateRequest requestCreateOrder = new OrdersCreateRequest().requestBody(orderRequest);

    try {       
   
    HttpResponse<Order> responSEOrderCreated = client.execute(requestCreateOrder);

        order = responSEOrderCreated.result(); 

        System.out.println("Order ID: " + order.id());

        OrdersAuthorizeRequest requestAuthorizeRequest = new OrdersAuthorizeRequest(order.id());

        HttpResponse<Order> responseAuthorizeOrder =  client.execute(requestAuthorizeRequest);

        order = responseAuthorizeOrder.result();

        OrdersCaptureRequest requestCaptureOrder = new OrdersCaptureRequest(order.id());

        HttpResponse<Order> responseCaptureOrder =  client.execute(requestCaptureOrder);

        order = responseCaptureOrder.result();

} catch (IOException ioe) {     System.out.println(ioe.getMessage());       }        return order;
}

我得到带有描述的响应对象

付款人尚未批准订单付款

如何直接使用我的方法批准订单?

解决方法

the smart button或重定向到v2 /结帐/订单approval_url都是买方表示同意并批准PayPal付款的唯一两种选择。

到目前为止,智能按钮通常是最佳选择,因为它提供了现代的“上下文”(将网站加载在后台,并且不会将买家重定向到另一个可能不熟悉的页面) -并可能根据您configure the button的方式提供几种其他付款方式。