2

我正在我的网站上测试 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";

谢谢!

4

2 回答 2

6

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

最有可能发生的是 Stripe_CardError抛出和捕获,但是因为您没有在 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 语句,看看你是否得到任何东西。您无法到达最后一个回显语句的唯一方法是抛出未捕获的异常......您只是没有看到它。

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

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

ini_set('error_reporting', E_ALL);
于 2013-04-15T15:04:19.850 回答
1

我知道这是一个迟到的答复,但我遇到了完全相同的问题。我尝试在每一行代码后回显,并且在尝试收费后回声停止,我将我的“金额”设置为 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));
于 2014-08-01T09:10:08.043 回答