Laravel 5在localhost:8000上捕获PayPal PHP API 400错误

时间:2017-05-22 09:22:13

标签: php laravel laravel-5 paypal paypal-sandbox

在我的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类似的问题?

我知道当应用程序不处于开发模式时,我可以专门有错误页面来捕获某些错误代码。但我真的想捕获错误并重定向回到表单,并为用户提供通知。

提前感谢任何可以提供帮助的巫师。

2 个答案:

答案 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);
      }

希望它可以帮到你