gpt4 book ai didi

php - Laravel 5 从 PayPal API 捕获 400 响应

转载 作者:太空宇宙 更新时间:2023-11-03 15:48:08 25 4
gpt4 key购买 nike

我在这里问了一个非常具体的问题:Laravel 5 catching PayPal PHP API 400 errors on localhost:8000

因为没有人能提供帮助,所以我想让它成为一个关于从 PayPal API 捕获 400 错误的更开放的问题。

我正在向 PayPal 发出请求,当请求成功时,一切正常,我得到一个可爱的响应对象,我可以使用它并采取相应的行动。

例如,当输入不正确的卡详细信息时,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);

//will not catch here :( throws Laravel 400 error! want to redirect with message!
} catch (\PPConnectionException $ex) {
return Redirect::back()->withErrors([$ex->getMessage() . PHP_EOL]);
}

//if we get an approved payment ! This fires perfectly when succesful!!! woo!!
if($payment->state == 'approved') {
//if success we hit here fine!!!
} else {
//won't get here, dies before catch.
}

这是 Laravel Debug模式下的错误:

enter image description here

当我查看 PayPal API 沙盒日志时,我应该会得到一个不错的对象,以便我可以采取相应的行动。

{
"status": 400,
"duration_time": 60,
"body": {
"message": "Invalid request. See details.",
"information_link": "https://developer.paypal.com/webapps/developer/docs/api/#VALIDATION_ERROR",
"details": [
{
"field": "payer.funding_instruments[0].credit_card.number",
"issue": "Value is invalid."
}
],
"name": "VALIDATION_ERROR",
"debug_id": "XXXXXXXXXXXXXX"
},
"additional_properties": {},
"header": {
"Date": "Thu, 25 May 2017 14:44:43 GMT",
"paypal-debug-id": "2f88f18d519c3",
"APPLICATION_ID": "APP-XXXXXXXXXXXX",
"Content-Language": "*",
"CALLER_ACCT_NUM": "XXXXXXXXXXXXX"
}
}

如果有任何 Laravel 向导可以帮助您,那么您就是我的英雄。

尼克。

最佳答案

对的人,

看起来 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());
}

link @rchatburn 发布的内容非常有用,应用程序似乎总是在 \Exception 而不是 \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);
}

两者都很好,但对我来说,将 catch 方法更改为监视一般的 Exception 感觉更简洁,我正在其中测试付款是否成功。

希望这对面临类似问题的人有所帮助 :D!!!

尼克。

关于php - Laravel 5 从 PayPal API 捕获 400 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44258214/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com