Как исправить ошибку PayPal с кодом ответа 400 - PullRequest
0 голосов
/ 10 июля 2019

Внедрение PayPal в моем приложении Laravel 5.8

Я получил ошибку:

Got Http response code 400 when accessing https://api.sandbox.paypal.com/v1/payments/payment/PAYID-NNNNNNNNNN/execute.

Мой контроль:

public function paypal_payment_execute()
{
    // After Step 1
    $apiContext = new \PayPal\Rest\ApiContext(
        new \PayPal\Auth\OAuthTokenCredential(
            'NNNNN',     // ClientID
            'NNNNN'      // ClientSecret
        )
    );

    $paymentId = request('paymentId');
    $PayerID = request('PayerID');

    $payment = Payment::get($paymentId, $apiContext);

    $execution = new PaymentExecution();
    $execution->setPayerId( $PayerID);

    $transaction = new Transaction();
    $amount = new Amount();
    $details = new Details();

    $details->setShipping(1.2)
            ->setTax(1.3)
            ->setSubtotal(17.50); //

    $amount->setCurrency('USD');
    $total_sum= 20; // I check this sum is setShipping + setTax + setSubtotal

    $amount->setTotal( (integer)$total_sum); 

    $amount->setDetails($details);
    $transaction->setAmount($amount);

    $execution->addTransaction( [ $transaction ] );  // !!! I found that here must be an array?

    try {
        $result = $payment->execute($execution, $apiContext);  // Number of error points at this line
    } catch (Exception $pce) {
        echo '<pre>::'.print_r( json_decode($pce->getData()) );
        die("-1 XXZ  app/Http/Controllers/PaymentController.php");
    }
    return $result;


} 

В моем просмотре я вижу вывод: https://prnt.sc/od3b6v 1) Кто-нибудь может сказать, что это за ошибка?

2) Я вижу такие строки:

$this->logger->info

Это какая-то запись в журнале?Где я могу посмотреть на это?

3) Было очень странно, что была показана строка ошибки, а не предварительный вывод в блоке try catch: я ожидал увидеть вывод pce-> getData:

} catch (Exception $pce) {
    echo '<pre>::'.print_r( json_decode($pce->getData()) );
    die("-1 XXZ  app/Http/Controllers/PaymentController.php");
}

4) Поиск в сети. Я проверил, что при совершении платежа. С помощью JS-кода я установил ту же сумму и URL-адреса возврата, например:

<div id="paypal-button"></div>
<script src="https://www.paypalobjects.com/api/checkout.js"></script>
<script>
   let total_sum= 20
   alert( "-123  total_sum::"+(total_sum) )
   paypal.Button.render({
      // Configure environment
      env: 'sandbox',
      client: {
         sandbox: 'NNNNN',
         production: 'demo_production_client_id'
      },
      locale: 'en_US',
      style: {
         size: 'small',
         color: 'blue',
         shape: 'pill',
      },

      commit: true,

      payment: function(data, actions) {
         var payment = actions.payment.create({

            "note_to_payer": "Contact us for any questions on your order.",

            "intent": "sale",
            "payer": {
               "payment_method": "paypal"
            },

            redirect_urls : { //redirect_urls
               return_url : '...paypal_payment',
               cancel_url : '.../paypal_payment_cancel'
            },

            transactions: [{
               amount: {
                  total:  Number( total_sum ),
                  currency: 'USD'
               }
            }]
         });
         return payment;

      },
      onAuthorize: function(data, actions) {
         return actions.payment.execute().then(function() {
            return actions.redirect();
         });
      }
   }, '#paypal-button');

</script>

Как это исправить?

composer.json:

"type": "project",
"require": {
    "php": "^7.1.3",
    ...
    "laravel/framework": "5.8.*",
    "paypal/rest-api-sdk-php": "*",

Изменено:

Нет сообщений внутри блока PayPal \ Exception \ PPConnectionException в любом случае.В вашей ссылке я заметил, что код валюты необходимо проверить.Я создал свой аккаунт около 2 недель назад: https://prnt.sc/od385x Где я могу проверить код валюты (и, возможно, страну)?Это в настройках для любого приложения?Я не нашел, где можно ввести валюту.если какие-то webhooks должны быть опровергнуты?Для чего они нужны?

Я вижу ссылку «Обновить до бизнес-аккаунта».Может ли это быть связано с моей проблемой?

**Modified # 2:**

Я прикрепляю описание ошибки к своему серверу в laravel.log, когда получаю ошибку 400:

cat laravel.log: [2019-07-12 07:30:33] local.ERROR: Получен Http-код ответа 400 при доступе к https://api.sandbox.paypal.com/v1/payments/payment/PAYID-LUUDOCA2FR59365NU097882X/execute. {"userId": 6, "exception": "[object] (PayPal \ Exception \ PayPalConnectionException (код: 400): Получил Http код ответа 400 при доступе к https://api.sandbox.paypal.com/v1/payments/payment/PAYID-LUUDOCA2FR59365NU097882X/execute. в /var/www/html/votes/vendor/paypal/rest-api-sdk-php/lib/PayPal/Core/PayPalHttpConnection.php:207) [stacktrace] # 0 /var/www/html/votes/vendor/paypal/rest-api-sdk-php/lib/PayPal/Transport/PayPalRestCall.php(78): PayPal \ Core \ PayPalHttpConnection-> execute ('{\ "payer_id \ ": \" Z9 ... ') # 1 /var/www/html/votes/vendor/paypal/rest-api-sdk-php/lib/PayPal/Common/PayPalResourceModel.php(104): PayPal \Transport \ PayPalRestCall-> execute (Array, '/ v1 / payment / pa ...', 'POST', '{\ "payer_id \": \ "Z9 ...', Array) # 2 / var / www /html / голосование / поставщик / paypal / rest-api-sdk-php / lib / PayPal / Api / Payment.php (650): PayPal \ Common \ PayPalResourceModel :: executeCall ('/ v1 / payment / pa ...', 'POST', '{\ "payer_id \": \ "Z9 ...', NULL, Object (PayPal \ Rest \ ApiContext), Object (PayPal \ Transport \ PayPalRestCall)) # 3 /var/www/html/votes/app/Http/Controllers/PaymentController.php(108): PayPal \ Api \ Payment-> execute (Object (PayPal \ Api \ PaymentExecution), объект(PayPal \ Rest \ ApiContext)) # 4 [внутренняя функция]: App \ Http \ Controllers \ PaymentController-> paypal_payment_execute () # 5 / var / www / html / голосов / вендор / laravel / framework / src / Illuminate / Routing /Controller.php (54): call_user_func_array (Array, Array) # 6 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(45): Освещение \ Маршрутизация \ Controller->callAction ('paypal_payment _...', Array) # 7 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Routing/Route.php(219): Осветить \ Routing \ ControllerDispatcher-> dispatch (Объект (Подсветка \ Маршрутизация \ Маршрут), Объект (Приложение \ Http \ Controllers \ PaymentController), 'paypal_payment _...') # 8 / var / www / html / Голосов / Поставщик / Laravel / Framework /src / Illuminate / Routing / Route.php (176): Подсветка \ Routing \ Route-> runController () # 9 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Routing/Router.php (680): Подсветка \ Routing \ Route-> run () # 10 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(30): Подсветка \ Routing \ Router->Подсветка \ Routing \ {closure} (Объект (Подсветка \ Http \ Request)) # 11 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(41): Подсветка\ Routing \ Pipeline-> Подсветка \ Routing \ {closure} (Объект (Подсветка \ Http \ Request)) # 12 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Подсветка \ Routing \ Middleware \ SubstituteBindings-> handle (Объект (Подсветка \ Http \ Запрос), Объект(Закрытие)) # 13 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Подсветка \ Pipeline \ Pipeline-> Подсветка \ Pipeline \ {closure} (Объект(Осветить \ Http \ Request)) # 14 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php(75): Подсветить \ Routing \ Pipeline-> Осветить\ Routing \ {closure} (Object (Illuminate \ Http \ Request)) # 15 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate \ Foundation \Http \ Middleware \ VerifyCsrfToken-> handle (Object (Illuminate \ Http \ Request), Object (Closure)) # 16 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php (53): Подсветка \ Pipeline \ Pipeline-> Подсветка \ Pipeline \ {closure} (Объект (Подсветка \ Http \ Request)) # 17 / var / www / html / голосование / веndor / laravel / framework / src / Illuminate / View / Middleware / ShareErrorsFromSession.php (49): Подсветка \ Routing \ Pipeline-> Подсветка \ Routing \ {closure} (Объект (Подсветка \ Http \ Request)) # 18 / var /www / html / голоса / вендор / laravel / framework / src / Illuminate / Pipeline / Pipeline.php (163): Illuminate \ View \ Middleware \ ShareErrorsFromSession-> handle (Object (Illuminate \ Http \ Request), Object (Closure))# 19 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Подсветка \ Pipeline \ Pipeline-> Подсветка \ Pipeline \ {closure} (Объект (Подсветить \ Http\ Request)) # 20 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(56): Осветить \ Routing \ Pipeline-> Подсветить \ Routing \ {closure}(Object (Illuminate \ Http \ Request)) # 21 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): освещать дескриптор \ Session \ Middleware \ StartSession->(Объект (Осветить \ Http \ Запрос), Объект (Закрытие)) # 22 / var / www / html / голосов / vendor / laravel / framework / src / Подсветка / Маршрутизация / Pipeline.php (53): Подсветка \ Pipeline \ Pipeline-> Подсветка \ Pipeline \ {closure} (Объект (Подсветка \ Http \ Request)) # 23 / var / www / html / голосов / vendor /laravel / framework / src / Illuminate / Cookie / Middleware / AddQueuedCookiesToResponse.php (37): Подсветка \ Routing \ Pipeline-> Подсветка \ Routing \ {closure} (Объект (Подсветка \ Http \ Request)) # 24 / var / www /html / голосов / вендор / laravel / framework / src / Illuminate / Pipeline / Pipeline.php (163): Illuminate \ Cookie \ Middleware \ AddQueuedCookiesToResponse-> handle (Object (Illuminate \ Http \ Request), Object (Closure)) # 25/var/www/html/votes/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Подсветка \ Pipeline \ Pipeline-> Подсветка \ Pipeline \ {closure} (Объект (Подсветка \ Http \ Запрос))) # 26 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(66): Подсветить \ Routing \ Pipeline-> Подсветить \ Routing \ {closure} (Объект(Подсветка \ Http \ Request)) # 27 / var / www / html / голоса / вендор / laravel / framework / src / Illuminate / Pipeline /Pipeline.php (163): Illuminate \ Cookie \ Middleware \ EncryptCookies-> handle (Объект (Illuminate \ Http \ Request), Объект (Закрытие)) # 28 / var / www / html / голосов / вендор / laravel / framework / src/Illuminate/Routing/Pipeline.php(53): Подсветка \ Pipeline \ Pipeline-> Подсветка \ Pipeline \ {closure} (Объект (Подсветка \ Http \ Запрос)) # 29 / var / www / html / голосования / vendor / laravel/framework/src/Illuminate/Pipeline/Pipeline.php(104): Подсветка \ Маршрут \ Трубопровод-> Подсветка \ Маршрут \ {закрытие} (Объект (Подсветить \ Http \ Запрос)) # 30 / var / www / html / голосования/vendor/laravel/framework/src/Illuminate/Routing/Router.php(682): осветить \ Pipeline \ Pipeline-> then (объект (закрытие)) # 31 / var / www / html / голосование / vendor / laravel / framework/src/Illuminate/Routing/Router.php(657): Подсветка \ Routing \ Router-> runRouteWithinStack (Object (Подсветка \ Маршрут \ Маршрут), Объект (Подсветка \ Http \ Запрос))# 32 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Routing/Router.php(623): Illuminate \ Routing \ Router-> runRoute (Object (Illuminate \ Http \ Request), Object ( осветить \ Routing \ Route)) # 33 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Routing/Router.php(612): Illuminate \ Routing \ Router-> dispatchToRoute (Object (Illuminate \ Http \ Request)) # 34 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(176): Illuminate \ Routing \ Router-> dispatch (Object (Illuminate \ Http \ Request)) # 35 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(30): Подсветка \ Foundation \ Http \ Kernel-> Подсветка \ Foundation \ Http \ {closure} (Объект (Осветите \ Http \ Request)) # 36 /var/www/html/votes/vendor/proengsoft/laravel-jsvalidation/src/RemoteValidationMiddleware.php(53): Подсветка \ Routing \ Pipeline-> Подсветка \ Маршрутизация \ {closure} (Объект (Подсветить \ Http \ Запрос )) # 37 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Proengsoft \ JsValidation \ RemoteValidationMiddleware-> handle (Object (Illuminate \ Http \ Request), Object ( Закрытие)) # 38 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Подсветка \ Pipeline \ Pipeline-> Подсветка \ Pipeline \ {closure} (Объект (Подсветить \ Http \Запрос)) # 39 /var/www/html/votes/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(65): Illuminate \ Routing \ Pipeline-> Подсветка \ Routing \ {closure} (Объект (Осветить \ Http \Запрос)) # 40 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Barryvdh \ Debugbar \ Middleware \ InjectDebugbar-> handle (Object (Illuminate \ Http \ Request), Объект (Закрытие)) # 41 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Подсветка \ Pipeline \ Pipeline-> Подсветка \ Pipeline \ {closure} (Объект (Подсветить \ Http \Запрос)) # 42 /var/www/html/votes/vendor/fideloper/proxy/src/TrustProxies.php(57): Подсветка \ Routing \ Pipeline-> Подсветка \ Маршрутизация \ {closure} (Object (Подсветка \ Http \ Request)) # 43 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Fideloper \ Proxy \ TrustProxies-> handle (Object (Illuminate \ Http \ Request), Object ( Закрытие)) # 44 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Подсветка \ Pipeline \ Pipeline-> Подсветка \ Pipeline \ {closure} (Объект (Подсветить \ Http \Запрос)) # 45 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Подсветка \ Routing \ Pipeline-> Подсветка \ Routing \ {closure} (объект (Осветите \ Http \ Request)) # 46 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate \ Foundation \ Http \ Middleware \ TransformsRequest-> handle (Object (Illuminate \ Http \ Request) ), Объект (Закрытие)) # 47 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Подсветка \ Pipeline \ Pipeline-> Подсветка \ Pipeline \ {closure} (Объект (Подсветить \ Http \Запрос)) # 48 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Подсветка \ Routing \ Pipeline-> Подсветка \ Routing \ {closure} (объект (Осветите \ Http \ Request)) # 49 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate \ Foundation \ Http \ Middleware \ TransformsRequest-> handle (Object (Illuminate \ Http \ Request) ), Объект (Закрытие)) # 50 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Подсветка \ Pipeline \ Pipeline-> Подсветка \ Pipeline \ {closure} (Объект (Подсветить \ Http \Запрос)) # 51 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate \ Routing \ Pipeline-> Illuminate \ Routing \ {closure} (объект (Осветите \ Http \ Request))# 52 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate \ Foundation \ Http \ Middleware \ ValidatePostSize-> handle (Object (Illuminate \ Http \ Request) ), Объект (Закрытие)) # 53 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Подсветка \ Pipeline \ Pipeline-> Подсветка \ Pipeline \ {closure} (Объект (Подсветить \ Http \Запрос)) # 54 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php(62): Illuminate \ Routing \ Pipeline-> Illuminate \ Routing \ {closure} (объект (Осветите \ Http \ Request)) # 55 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Illuminate \ Foundation \ Http \ Middleware \ CheckForMaintenanceMode-> handle (Object (Illuminate \ Http \ Request) ), Объект (Закрытие)) # 56 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Подсветка \ Pipeline \ Pipeline-> Подсветка \ Pipeline \ {closure} (Объект (Подсветить \ Http \Запрос)) # 57 /var/www/html/votes/vendor/itsgoingd/clockwork/Clockwork/Support/Laravel/ClockworkMiddleware.php(29): Подсветить \ Routing \ Pipeline-> Подсветить \ Routing \ {closure} (Объект (Подсветить \ Http \Запрос)) # 58 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163): Clockwork \ Support \ Laravel \ ClockworkMiddleware-> handle (Object (Illuminate \ Http \ Request), Объект (Закрытие)) # 59 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Подсветка \ Pipeline \ Pipeline-> Подсветка \ Pipeline \ {closure} (Объект (Подсветить \ Http \Запрос)) # 60 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(104): Подсветить \ Routing \ Pipeline-> Подсветить \ Routing \ {closure} (Объект (Подсветить \ Http \Запрос)) # 61 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(151): Подсветить \ Pipeline \ Pipeline-> then (Объект (Закрытие)) # 62 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(116): Illuminate \ Foundation \ Http \ Kernel-> sendRequestThroughRouter (Object (Illuminate \ Http \ Request) )) # 63 /var/www/html/votes/public/index.php(55): Illuminate \ Foundation \ Http \ Kernel-> handle (Object (Illuminate \ Http \ Request)) # 64 {main} "}

Что-нибудь найти в этом тексте ошибки? Это ломает мне голову, почему try {block не срабатывает ...

...