捕获并处理PayPal SDK HTTP异常PHP yii2

捕获并处理PayPal SDK HTTP异常PHP yii2,php,paypal,sdk,Php,Paypal,Sdk,我一直在使用Paypal SDK,我有一个验证 付款的顺序 我想在交易过程中捕获并处理Paypal错误,以便稍后在消息中显示 我尝试在catch上添加PayPal\Exception\PayPalConnectionException,但没有任何结果 以下是显示错误的方式: 我的代码操作: public static function actionGetorder($orderId) { try { // 3. Call PayPal to get the t

我一直在使用Paypal SDK,我有一个验证 付款的顺序

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

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

以下是显示错误的方式:

我的代码操作:

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消息,但它没有,所以是否有可能捕获并处理错误以及如何处理


感谢阅读,问候。

例外情况可能有所不同。但是在您的代码中,您只尝试捕获一个异常,即
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{}
block中使用的代码中知道它

在您的情况下,检查是否
PayPalClient::client();或者
$client->execute(newordersgetrequest($orderId));引发任何异常。如果有,请在
catch
块中使用它们


希望这对你有帮助

我遇到了到类的路由问题,因此代码在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();
    }

我猜你只是使用了一个错误的异常
.ConnectionException
我想是对连接失败或错误凭据的响应。感谢您的回答,但它没有捕获任何这些,我正在查看PayPalHttp\HttpClient.php,它似乎有自己的异常,在跟踪图像中,您可以看到代码我想您没有理解我。您必须找出那些异常正在
try{}
块中使用,并将它们逐个设置为
catch
块。并且,为了便于在代码中的某个地方出现异常时脚本不会停止,使用了FYI
try-catch
block。谢谢你,我完全理解,但我想说的是,似乎我抓不到任何异常,因为PaypalClient.php的代码中有这样一行:抛出新的HttpException($body,$statusCode,$headers);如果我没有弄错,它不会返回任何值,它会自动向服务器抛出异常。问候解决:我在课堂上遇到了一个错误。非常感谢你的帮助,我很高兴你解决了这个问题。快乐编码!:)