我已将Stripe集成到我的网站中。下面的代码直接从stripe的文档中复制。尽管此代码与我的实现之间存在细微的差异,但是这些差异与问题无关,因为我的代码和所显示的代码均可正常工作
首先,我安装相关文件。
composer.json
{
"require": {
"stripe/stripe-php": "*"
}
}
然后我用JavaScript进行结帐。 (此示例收取“示例费用”的费用为9.99美元,但您会明白的。以下是简单的结帐,我的是自定义结帐,但这对问题没有影响。)
<form action="nextpage.php" method="POST">
<script
src="https://checkout.stripe.com/checkout.js" class="stripe-button"
data-key="<test key here>"
data-amount="999"
data-name="<myName>"
data-description="Example charge"
data-image="https://stripe.com/img/documentation/checkout/marketplace.png"
data-locale="auto"
data-currency="aud">
</script>
</form>
此结帐功能非常善于捕捉大多数错误,如果找不到任何错误,则会传递令牌供我收取。
最后,我添加了一个页面来创建费用
require 'vendor/autoload.php';
\Stripe\Stripe::setApiKey("<test key here>");
$token = $_POST['stripeToken'];
$charge = \Stripe\Charge::create([
'amount' => 999,
'currency' => 'aud',
'description' => 'Example charge',
'source' => $token,
]);
到目前为止,一切都很好。在测试环境中,这总是成功的。或者,如果我测试了不成功的卡,则它总是在结帐时失败。
但是,假设令牌创建成功,但是问题出在服务器端。 如何检测到?
更具体地说,如果我要使用alert("Your payment has been successful")
或echo "Your payment has been successful"
之类的函数,从哪里调用该函数的正确位置?
答案 0 :(得分:0)
发布后不久就知道了。
首先,我注意到$charge
是这种情况下的输出,因此我运行了echo var_dump($charge);
,从而打开了大量的信息。
我可以在这里找到api参考here,而不是在那里查看,向下滚动到“ The Charge Object”。其中status
(与$charge['status']
相关)可以确认是否成功。
工作代码if($charge['status'] === "succeeded"){}
是发布成功消息的正确位置。
答案 1 :(得分:0)
try{
require 'vendor/autoload.php';
\Stripe\Stripe::setApiKey("<test key here>");
$token = $_POST['stripeToken'];
$charge = \Stripe\Charge::create([
'amount' => 999,
'currency' => 'aud',
'description' => 'Example charge',
'source' => $token,
]);
if(isset($charge->id) && $charge->id != ''){
echo "Payment has been made successful, Transaction ID : ".$charge->id;exit;
}
} catch (\Stripe\Error\Base $e) {
echo "Something went wrong with payment, Note : ".$e->getMessage();exit;
}