【问题标题】:Catch and handle PayPal SDK HTTP Exceptions PHP yii2捕获并处理 PayPal SDK HTTP 异常 PHP yii2
【发布时间】:2020-05-11 21:52:02
【问题描述】:

我一直在使用 Paypal SDK,并且我有一个操作可以验证 付款顺序。

我想在交易过程中捕获并处理 Paypal 错误,以便稍后在消息中显示。

我尝试在 catch 上添加 PayPal\Exception\PayPalConnectionException,但没有任何结果。

这是它显示错误的方式:

https://i.stack.imgur.com/zlRge.png

我的代码操作:

public static function actionGetorder($orderId)
{
    try 
    {
        // 3. Call PayPal to get the transaction details
        $client = PayPalClient::client();
        $response = $client->execute(new OrdersGetRequest($orderId)); //The order ID isn't valid so it will give the error

        var_dump ($response->result->payer->email_address);
        print "Status: {$response->result->status}\n";
    } 
    catch (PayPal\Exception\PayPalConnectionException $ex) 
    {
        echo "lol";
    }

}

这个想法是在那个代码中它应该显示 lol 消息但它没有,所以是否可以捕获并处理错误以及如何处理?

感谢阅读,问候。

【问题讨论】:

  • 我猜你只是使用了错误的异常。 ..ConnectionException 我认为响应连接失败或错误的凭据。

标签: php paypal sdk


【解决方案1】:

例外情况可能不同。但是在您的代码中,您只是想赶上一个异常,即PayPal\Exception\PayPalConnectionException。但是,如果异常是另一个呢?显然,PHP 执行流程将不会进入您的 catch 块,因此您不会看到消息 lol。在您的图像中显示您的代码捕获了PayPalHttp\HttpException

所以你需要尝试设置多个catch 块。这意味着您可以根据需要添加任意数量的异常,如下面的代码:

public static function actionGetorder($orderId)
{
    try {
        // 3. Call PayPal to get the transaction details
        $client = PayPalClient::client();
        $response = $client->execute(new OrdersGetRequest($orderId)); //The order ID isn't valid so it will give the error

        var_dump ($response->result->payer->email_address);
        print "Status: {$response->result->status}\n";
    } catch (PayPalHttp\HttpException $e) {
        echo $e->getMessage();
    } catch (PayPal\Exception\PayPalConnectionException $e) {
        echo $e->getMessage();
    } finally {
        echo 'If no exception has already been caught, show your own custom message';
    }
}

现在的问题是,您如何知道应该使用哪些异常?嗯,从你在try {} 块中使用的代码就可以知道。

在你的情况下,检查PayPalClient::client(); or$client->execute(new OrdersGetRequest($orderId));引发任何异常。如果有,请在 catch 块中使用它们。

希望对您有所帮助!

【讨论】:

  • 感谢您的回答,但它没有捕捉到任何这些,我正在寻找 PayPalHttp\HttpClient.php 并且看起来它有他自己的异常,在跟踪图像中您可以看到代码
  • 我想你没有明白我的意思。您必须找出在try {} 块中使用的那些异常,并将它们一一设置到catch 块中。并且 FYI try-catch 块被使用,这样如果您的代码中某处出现任何异常,您的脚本就不会停止。谢谢
  • 是的,我完全理解,但我想说我似乎无法捕捉到任何异常,因为 PaypalClient.php 在代码中有这一行: throw new HttpException($body, $statusCode, $headers);如果我没记错的话,它没有返回任何值,它会自动向服务器抛出异常。问候
  • 已解决:我的类 routem 出现错误非常感谢您的帮助
  • 很高兴您解决了这个问题。快乐编码! :)
【解决方案2】:

我有一个路由问题,所以这就是代码在 yii2 上的工作方式,我希望它可以帮助某人:

try 
    {
        // $orderId = base64_decode($orderId);
        $client = PayPalClient::client();
        $response = $client->execute(new OrdersGetRequest($orderId));
        $status = $response->result->status;
        $email_cliente = $response->result->payer->email_address;

        if ($status != 'COMPLETED') 
        {
            \Yii::$app->session->setFlash('error', \Yii::t("app", "problema_pago"));

            return $this->redirect(['../web/pagar']);
        }


    }
    catch (\PayPalHttp\HttpException $e) {
    echo $e->getMessage();
    } catch (\PayPal\Exception\PayPalConnectionException $e) {
        echo $e->getMessage();
    }

【讨论】:

    猜你喜欢
    • 2016-08-06
    • 1970-01-01
    • 2018-02-06
    • 2010-12-11
    • 1970-01-01
    • 2018-05-30
    • 2011-09-16
    • 1970-01-01
    • 2013-11-13
    相关资源
    最近更新 更多