【问题标题】:Issues with try/catch using Stripe使用 Stripe 的 try/catch 问题
【发布时间】:2017-07-20 18:10:49
【问题描述】:

在继续对其 API 的其余调用之前,我正在尝试检查优惠券代码在条带中是否有效。如果您向他们发送无效的订阅优惠券代码,则会收到致命错误。

所以,作为一个菜鸟,我想我会尝试try/catch,但显然我搞砸了。我正在做这样的事情:

if (!empty($_POST['coupon'])) { //see if person even submitted a code

try {

$couponValid = \Stripe\Coupon::retrieve($coupon);

 throw new Exception();//if not a valid coupon code
} catch (Exception \Stripe\Error\InvalidRequest $e) {
    echo("error");
}
}
//run the rest of the code if no errors

这仍然给我致命的错误,即优惠券代码不存在(它不存在)。

PHP Fatal error: Uncaught Stripe\Error\InvalidRequest: No such coupon: fdsf

条纹文档说要处理我正在做的错误like this(我认为)

我在这里做错了什么。

【问题讨论】:

  • 在您发表评论后,我又进行了一些挖掘工作。拿了一份 Stripe API 并自己运行了一些测试。 \Stripe\Error\InvalidRequest 被成功捕获。我相信错误可能是由您在此处发布的内容之后产生的。仅从上面发布的内容来看,如果 $_POST['coupon'] 为空,它将在您的评论中获取并运行下面的内容。在您上面发布的代码之后,是否有使用优惠券的 Stripe 调用,而不是包含在它自己的 try/catch 中?

标签: php stripe-payments


【解决方案1】:

从你的捕获中删除异常。

} catch (\Stripe\Error\InvalidRequest $e) {

如果您需要同时捕获 Exception 和 \Stripe\Error\InvalidRequest,您可以将这些捕获链接在一起。

} catch (\Stripe\Error\InvalidRequest $e) {
//Handle Invalid Request
} catch (Exception $e) {
//Handle Exception
}

如果您使用的是 php 7.1+ 并且无论抛出什么都想要相同的处理,您可以通过管道处理它们。

} catch (Exception | \Stripe\Error\InvalidRequest $e) {

【讨论】:

  • 谢谢,但这给了我同样的错误。我尝试了您的第一个建议,以从我的捕获中删除异常
  • 奇数。该页面上是否还有其他代码进行 Stripe 调用?我感觉您的问题可能出在周围的代码中,而不是您显示的内容。
  • 实际上,您正在做一些事情。在我有//run the rest of the code, I use coupon again 的部分。我认为只有在没有捕获异常时才会运行其中的任何内容。那就是问题所在。那么,如果出现异常,如何停止代码运行呢?
  • 奇怪的是,当我在本地测试时,代码似乎可以正常工作,但在我的服务器上却不行。对于不同的 PHP 版本,这个 try/catch 的工作方式是否不同?
  • 刚刚粘贴的代码,如果包裹在其中的代码块,只要帖子为空,就可以跳过整个代码块。即使它不为空,并且其中的代码运行,如果您在捕获异常时不以某种方式停止执行,则执行将继续。因此,您可以很好地接听第一个电话,而第二个电话仍在运行。
猜你喜欢
  • 2020-06-19
  • 2011-02-23
  • 1970-01-01
  • 2011-11-28
  • 2011-08-26
  • 2011-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多