我已将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"
这样的函数,那么从哪里调用它的正确位置呢?
刚发布后不久便想出来了。
首先我注意到$charge
是这种情况下的输出,所以我运行了echo var_dump($charge);
,它开辟了大量的信息。
不是在那里看,我可以找到api参考here,向下滚动到“充电对象”。在此范围内,status
(与$charge['status']
有关)可以确认它是否成功。
工作代码if($charge['status'] === "succeeded"){}
是放置成功消息的正确位置。
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;
}