Внедрение 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 не срабатывает ...