Как подтвердить идентификатор заказа PayPal без перенаправления или умной кнопки

Моя цель, похоже, похожа на этот вопрос, опубликованный ранее как одобрить идентификатор заказа

Я реализовал конечную точку отдыха для завершения оплаты заказа без использования ссылки перенаправления и создания смарт-кнопок по умолчанию.

Я использую среду песочницы и SDK версии 2 на стороне сервера PayPal

Итак, я создал заказ с помощью API OrdersCreateRequest (), после чего я получаю идентификатор заказа.

{
"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",
        "method": "GET"
    },
    {
        "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;
}

и я получаю объект ответа с описанием

Плательщик еще не одобрил Распоряжение к оплате.

Как мне подтвердить заказ напрямую с помощью моего метода?


person barsawi13    schedule 07.10.2020    source источник
comment
Вы хотите утвердить заказ PayPal без перенаправления плательщика на страницу PayPal и без предоставления интеллектуальной кнопки оплаты? Вы не можете.   -  person Preston PHX    schedule 07.10.2020
comment
@PrestonPHX Я подтверждаю, что оплата с помощью смарт-кнопки работает нормально (прямой вызов переднего плана). Итак, единственная альтернатива - отправить ссылку перенаправления плательщику?   -  person barsawi13    schedule 07.10.2020
comment
Умная кнопка или ссылка перенаправления - это два варианта, с помощью которых покупатель может одобрить платеж PayPal, да. Умная кнопка - безусловно, лучший выбор в целом   -  person Preston PHX    schedule 07.10.2020
comment
@PrestonPHX спасибо краткий и хороший ответ   -  person barsawi13    schedule 07.10.2020


Ответы (1)


Либо умная кнопка, либо перенаправление на v2 / checkout / orders approval_url - это единственные два варианта, с помощью которых покупатель может дать свое согласие и утвердить платеж PayPal.

Умная кнопка, безусловно, лучший выбор в целом из-за современного контекста, который она предлагает (сохранение загрузки вашего сайта в фоновом режиме и отсутствие перенаправления покупателя на другую и, возможно, незнакомую страницу), а также потенциально предлагать несколько альтернативных способов оплаты в зависимости от того, как вы настраиваете кнопку.

person Preston PHX    schedule 07.10.2020