Используя API PayPal с моей установкой Laravel 5.2, в частности, этот пакет: https://github.com/anouarabdsslm/laravel-paypalpayment
Пакет отлично работает! и я отлично беру платежи! Я изо всех сил стараюсь ловить и перенаправлять, когда пользователь вводит неверные данные, например данные банковской карты. Приложение Laravel просто выдает ошибку 400.
То, что я хочу сделать, это уловить ошибки и перенаправить обратно и уведомить пользователя.
Ниже приведен код, где я делаю запрос:
try { // ### Create Payment // Create a payment by posting to the APIService // using a valid ApiContext // The return object contains the status; $payment->create($this->_apiContext); } catch (\PPConnectionException $ex) { return Redirect::back()->withErrors([$ex->getMessage() . PHP_EOL]); } dd($payment);
Когда выполняется успешный платеж, я получаю хороший объект возврата, который я могу ссылаться и действовать соответственно, когда возникает ошибка типа 400, она полностью уничтожает приложение и НЕ Улавливает и перенаправляет ошибки обратно пользователю.
Сообщения об ошибках:
PayPalConnectionException in PayPalHttpConnection.php Got Http response code 400 when accessing https://api.sandbox.paypal.com/v1/payments/payment.
Кто-нибудь сталкивался с аналогичными проблемами с API-интерфейсом PayPal PHP?
Я знаю, что когда приложение не находится в режиме dev, у меня могут быть страницы ошибок, специально для обнаружения определенных кодов ошибок. Но я действительно хочу поймать ошибки и перенаправить обратно в форму с уведомлениями для пользователя.
Спасибо заранее любому волшебнику, который может помочь.
Правильные парни,
Я отправил ответ здесь: Laravel 5 поймал 400 ответов от API PayPal, но я хочу удостовериться, что кто-то, кто попадает в этот поток, знает, как я решил проблему!
Похоже, что метод Exception
Laravel по умолчанию мешал PayPal API PayPalConnectionException
. Поэтому я изменил код, чтобы поймать общие ошибки Exception
поскольку он содержит все необходимые объекты ошибок. Exception
\
before Exception
была критической! поскольку для этого требуется правильное пространство имен (в любом случае, ваше приложение может быть другим).
try { // ### Create Payment // Create a payment by posting to the APIService // using a valid ApiContext // The return object contains the status; $payment->create($this->_apiContext); } catch (\Exception $ex) { return Redirect::back()->withErrors([$ex->getData()])->withInput(Input::all()); }
Эта ссылка , которую опубликовал @rchatburn, была очень полезна, приложение всегда казалось, что оно улавливается в точке \Exception
и NOT \PayPalConnectionException
только я правильно \PayPalConnectionException
все \PayPalConnectionException
.
В моих исследованиях я столкнулся с app/Exceptions/Handler.php
. Здесь вы можете расширить метод визуализации, чтобы захватить PayPalConnectionException
и обработать ошибки однозначно для этого конкретного исключения. См. Код:
//Be sure to include the exception you want at the top of the file use PayPal\Exception\PayPalConnectionException;//pull in paypal error exception to work with public function render($request, Exception $e) { //check the specific exception if ($e instanceof PayPalConnectionException) { //return with errors and with at the form data return Redirect::back()->withErrors($e->getData())->withInput(Input::all()); } return parent::render($request, $e); }
Либо работайте отлично, но для меня это стало более удобным, чтобы просто изменить метод улова, чтобы найти общий Exception
, где я тестирую, если платеж был успешным.
Надеюсь, это поможет любому, кто сталкивается с подобными проблемами: D !!!
Ник.