【问题标题】:Try not working on a Stripe charge尝试不使用 Stripe 充电
【发布时间】:2013-04-14 01:56:05
【问题描述】:

我正在我的网站上测试 Stripe,但无法通过下面的“尝试”。基本上,我从来没有在“尝试”之后看到“测试”。

我在这里做错了吗?

   try {
$charge = Stripe_Charge::create(array(
  "amount" => 50, // amount in cents, again
  "currency" => "usd",
  "customer" => $customer->id,
  "card" => $token,
  "description" => $email));
echo "TEST1";
} catch (Stripe_CardError $e) {
    // Since it's a decline, Stripe_CardError will be caught
    $body = $e->getJsonBody();
    $err  = $body['error'];
    echo 'Status is:' . $e->getHttpStatus() . "\n";
    echo 'Type is:' . $err['type'] . "\n";
    echo 'Code is:' . $err['code'] . "\n";
    // param is '' in this case
    echo 'Param is:' . $err['param'] . "\n";
    echo 'Message is:' . $err['message'] . "\n";
}
echo "TEST";

谢谢!

【问题讨论】:

  • 这可能意味着您遇到致命错误,或者不是 Stripe_CardError 类型的异常。更改您的 catch() 块以捕获所有类型的 Exception 和 var_dump() 您的 $e
  • try 和 catch 都没有返回任何回显的值。我正在使用完整代码更新帖子。

标签: php try-catch stripe-payments


【解决方案1】:

您不太可能遇到另一个错误 - 如果您遇到了,您将看到一个未捕获的错误异常。话虽如此,正如 periklis 建议的那样,您也应该捕获其他类型的异常。

最有可能发生的是 Stripe_CardError is 被抛出和捕获,但是因为您没有在 catch 语句中回显任何内容,所以它会默默地失败。试试这个:

} catch (Stripe_CardError $e) {
    // Since it's a decline, Stripe_CardError will be caught
    $body = $e->getJsonBody();
    $err  = $body['error'];

    echo 'Status is:' . $e->getHttpStatus() . "\n";
    echo 'Type is:' . $err['type'] . "\n";
    echo 'Code is:' . $err['code'] . "\n";
    // param is '' in this case
    echo 'Param is:' . $err['param'] . "\n";
    echo 'Message is:' . $err['message'] . "\n";
} catch (Exception $e) {
    echo $e->getMessage();
} catch (ErrorException $e) {
    echo $e->getMessage();
}

编辑 4/16/13 - 您在评论中指出您甚至没有在 try 语句中看到您的回声。因此,要么 a)您的 echo 语句从视图中隐藏,要么 b)它之前的代码块失败。但是,由于您没有捕获 Stripe_CardError,因此它必须是不同类型的异常。我现在的猜测是,您传递给 Stripe 函数的变量之一存在问题......要么未声明,要么试图访问非对象的属性。

添加其他 catch 语句,看看你是否得到任何东西。您无法访问最后一个 echo 语句的唯一方法是抛出未捕获的异常......您只是没有看到它。

这是在黑暗中拍摄的,但是您的 php 环境是否有可能以其他不明显的方式抑制或处理异常报告?有时,生产环境会设置为忽略或记录异常,而不是向用户显示它们。检查一下,因为如果你没有看到它,它就会被其他地方捕获并记录或隐藏在视图之外。

尝试在尝试捕获之前将其插入某处:

ini_set('error_reporting', E_ALL);

【讨论】:

  • 为什么会失败?你发现错误,什么都不做,然后脚本应该继续......
  • 同样的事情,我在 catch 后回显的“TEST”没有打印出来。并且没有打印任何错误,实际上没有打印任何内容。
【解决方案2】:

我知道这是一个迟到的回复,但我遇到了完全相同的问题。我尝试在每一行代码后回显,并且在尝试收费后回声停止,我将我的“金额”设置为 10 美分(愚蠢),它应该是 10 欧元(1000),条纹不允许这样小额费用,一旦我将金额增加到 1000 美分,它就起作用了。

$charge = Stripe_Charge::create(array(
  "amount" => 50, // amount in cents, again <<THIS IS WHAT CAUSED MY ISSUE!!
  "currency" => "usd",
  "customer" => $customer->id,
  "card" => $token,
  "description" => $email));

【讨论】:

    猜你喜欢
    • 2016-11-17
    • 2021-09-01
    • 2021-11-28
    • 2017-12-26
    • 2013-03-06
    • 2014-06-06
    • 2012-12-21
    • 2015-01-15
    • 2015-11-16
    相关资源
    最近更新 更多