在我的Laravel 5.2安装中使用PayPal API,特别是此软件包: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.
有没有人遇到与PayPal PHP API类似的问题?
我知道当应用程序不处于开发模式时,我可以专门有错误页面来捕获某些错误代码。但我真的想捕获错误并重定向回到表单,并为用户提供通知。
提前感谢任何可以提供帮助的巫师。
答案 0 :(得分:0)
合适的人,
我在这里发布了答案:Laravel 5 catching 400 response from PayPal API但我想确保有人知道我是如何解决这个问题的!
Laravel的默认Exception
方法似乎干扰了PayPal API PayPalConnectionException
。所以我修改了代码以捕获一般Exception
错误,因为它包含所有必需的错误对象。 \
之前的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发布的这个link非常有用,一旦我将所有内容都正确命名,应用程序似乎总是抓住\Exception
而不是\PayPalConnectionException
。
在我的调查中,我遇到了app/Exceptions/Handler.php
。在这里,您可以扩展render方法以获取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);
}
要么工作得很好,但对我来说,只需更改catch方法就可以了解一般Exception
,我正在测试付款是否成功。
希望这可以帮助任何面临类似问题的人:D !!!
尼克。
答案 1 :(得分:0)
如果您需要API调用的JSON详细信息,可以添加以下代码。
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 dd($ex->getData());
exit(1);
}
希望它可以帮到你