mercredi 10 juillet 2019

How fix paypal error with response code 400

Implementing paypal in my laravel 5.8 app

I got error :

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

My control :

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;


} 

I my browse I see output : 1) Can somebody say which kind of error is it ?

2) I see lines like :

$this->logger->info

Is it some logging ? Where can I look into it ?

3) That was very strange that error line was shown and not pre output in try catch block: I expected to see pce->getData output:

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

4) Searching I net I checked that making payment With JS code I set the same total and return urls, like :

<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>

On error in apps log I found :

> 2019-07-10 11:12:44] local.ERROR: Got Http response code 400 when
> accessing
> https://api.sandbox.paypal.com/v1/payments/payment/PAYID-LUS4QGI75E1056086596714T/execute.
> {"exception":"[object]
> (PayPal\\Exception\\PayPalConnectionException(code: 400): Got Http
> response code 400 when accessing
> https://api.sandbox.paypal.com/v1/payments/payment/PAYID-LUS4QGI75E1056086596714T/execute.
> at
> /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/payments/pa...', 'POST', '{\"payer_id\":\"Z9...', Array)
> #2 /var/www/html/votes/vendor/paypal/rest-api-sdk-php/lib/PayPal/Api/Payment.php(650):
> PayPal\\Common\\PayPalResourceModel::executeCall('/v1/payments/pa...',
> 'POST', '{\"payer_id\":\"Z9...', NULL,
> Object(PayPal\\Rest\\ApiContext),
> Object(PayPal\\Transport\\PayPalRestCall))
> #3 /var/www/html/votes/app/Http/Controllers/PaymentController.php(102):
> PayPal\\Api\\Payment->execute(Object(PayPal\\Api\\PaymentExecution),
> Object(PayPal\\Rest\\ApiContext))
> #4 [internal function]: App\\Http\\Controllers\\PaymentController->paypal_payment_execute()
> #5 /var/www/html/votes/vendor/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):
> Illuminate\\Routing\\Controller->callAction('paypal_payment_...',
> Array)
> #7 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Routing/Route.php(219):
> Illuminate\\Routing\\ControllerDispatcher->dispatch(Object(Illuminate\\Routing\\Route),
> Object(App\\Http\\Controllers\\PaymentController),
> 'paypal_payment_...')
> #8 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Routing/Route.php(176):
> Illuminate\\Routing\\Route->runController()
> #9 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Routing/Router.php(680):
> Illuminate\\Routing\\Route->run()
> #10 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(30):
> Illuminate\\Routing\\Router->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
> #11 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(41):
> Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
> #12 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163):
> Illuminate\\Routing\\Middleware\\SubstituteBindings->handle(Object(Illuminate\\Http\\Request),
> Object(Closure))
> #13 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53):
> Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
> #14 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php(75):
> Illuminate\\Routing\\Pipeline->Illuminate\\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):
> Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
> #17 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49):
> Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
> #18 /var/www/html/votes/vendor/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):
> Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
> #20 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(56):
> Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
> #21 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163):
> Illuminate\\Session\\Middleware\\StartSession->handle(Object(Illuminate\\Http\\Request),
> Object(Closure))
> #22 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53):
> Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
> #23 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37):
> Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
> #24 /var/www/html/votes/vendor/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):
> Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
> #26 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(66):
> Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
> #27 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163):
> Illuminate\\Cookie\\Middleware\\EncryptCookies->handle(Object(Illuminate\\Http\\Request),
> Object(Closure))
> #28 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53):
> Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
> #29 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(104):
> Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
> #30 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Routing/Router.php(682):
> Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
> #31 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Routing/Router.php(657):
> Illuminate\\Routing\\Router->runRouteWithinStack(Object(Illuminate\\Routing\\Route),
> Object(Illuminate\\Http\\Request))
> #32 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Routing/Router.php(623):
> Illuminate\\Routing\\Router->runRoute(Object(Illuminate\\Http\\Request),
> Object(Illuminate\\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):
> Illuminate\\Foundation\\Http\\Kernel->Illuminate\\Foundation\\Http\\{closure}(Object(Illuminate\\Http\\Request))
> #36 /var/www/html/votes/vendor/proengsoft/laravel-jsvalidation/src/RemoteValidationMiddleware.php(53):
> Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
> #37 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163):
> Proengsoft\\JsValidation\\RemoteValidationMiddleware->handle(Object(Illuminate\\Http\\Request),
> Object(Closure))
> #38 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53):
> Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
> #39 /var/www/html/votes/vendor/barryvdh/laravel-debugbar/src/Middleware/InjectDebugbar.php(65):
> Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
> #40 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163):
> Barryvdh\\Debugbar\\Middleware\\InjectDebugbar->handle(Object(Illuminate\\Http\\Request),
> Object(Closure))
> #41 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53):
> Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
> #42 /var/www/html/votes/vendor/fideloper/proxy/src/TrustProxies.php(57):
> Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\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(Closure))
> #44 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53):
> Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
> #45 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21):
> Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\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),
> Object(Closure))
> #47 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53):
> Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
> #48 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21):
> Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\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),
> Object(Closure))
> #50 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53):
> Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
> #51 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27):
> Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\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),
> Object(Closure))
> #53 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53):
> Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
> #54 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php(62):
> Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\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),
> Object(Closure))
> #56 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53):
> Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
> #57 /var/www/html/votes/vendor/itsgoingd/clockwork/Clockwork/Support/Laravel/ClockworkMiddleware.php(29):
> Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
> #58 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(163):
> Clockwork\\Support\\Laravel\\ClockworkMiddleware->handle(Object(Illuminate\\Http\\Request),
> Object(Closure))
> #59 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53):
> Illuminate\\Pipeline\\Pipeline->Illuminate\\Pipeline\\{closure}(Object(Illuminate\\Http\\Request))
> #60 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(104):
> Illuminate\\Routing\\Pipeline->Illuminate\\Routing\\{closure}(Object(Illuminate\\Http\\Request))
> #61 /var/www/html/votes/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(151):
> Illuminate\\Pipeline\\Pipeline->then(Object(Closure))
> #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}

How fix it ?

composer.json :

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



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire