捕获并处理PayPal SDK HTTP异常PHP yii2
我一直在使用Paypal SDK,我有一个验证 付款的顺序 我想在交易过程中捕获并处理Paypal错误,以便稍后在消息中显示 我尝试在catch上添加PayPal\Exception\PayPalConnectionException,但没有任何结果 以下是显示错误的方式: 我的代码操作:捕获并处理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
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
块。并且,为了便于在代码中的某个地方出现异常时脚本不会停止,使用了FYItry-catch
block。谢谢你,我完全理解,但我想说的是,似乎我抓不到任何异常,因为PaypalClient.php的代码中有这样一行:抛出新的HttpException($body,$statusCode,$headers);如果我没有弄错,它不会返回任何值,它会自动向服务器抛出异常。问候解决:我在课堂上遇到了一个错误。非常感谢你的帮助,我很高兴你解决了这个问题。快乐编码!:)