【发布时间】:2019-09-08 12:29:58
【问题描述】:
我正在使用服务器快速入门示例将用户发送到 Stripe 进行付款
https://stripe.com/docs/payments/checkout/server
返回所需的会话 ID,并将其发送给 Stripe。但是付款页面没有加载。
我已将我的 API 密钥换成 XXXXX。
设置PHP显示所有错误,不存在。
三重检查我的代码是否与集成示例匹配(明显需要修改)
检查了我的 Stripe 帐户。
在头部
<script src="https://js.stripe.com/v3/"></script>
在 PHP 中
require_once('stripe-php-6.31.5/init.php');
\Stripe\Stripe::setApiKey("pk_test_XXXXXXXXXXXXXXXXXXXXXXX");
$object = \Stripe\Checkout\Session::create([
'success_url' => 'https://www.example.com/success',
'cancel_url' => 'https://www.example.com/cancel',
'payment_method_types' => ['card'],
'line_items' => [[
'amount' => 500,
'currency' => 'gbp',
'name' => 'T-shirt',
'description' => 'Comfortable cotton t-shirt',
'images' => ['https://www.example.com/t-shirt.png'],
'quantity' => 1,
]]
]);
$session_id = $object->id;
if ($session_id) {
echo "<script>
var stripe = Stripe('pk_test_XXXXXXXXXXXXXXXXXXXXXXX');
stripe.redirectToCheckout({
sessionId: '{{" . $session_id . "}}'
}).then(function (result) {
});
</script>";
} else {
echo 'No Session ID!';
}
Stripe 支付页面应该会加载。
此外,一旦我有了 session_id,javascript 看起来像这样
stripe.redirectToCheckout({
sessionId:
'{{cs_KmeIFgWSfN5GW6tP2e5IQ0Vb9EA0q3pWGHZNoDfFKAdcc6kW7DwsM6dAbhQ30}}'
}).then(function (result) {
// If `redirectToCheckout` fails due to a browser or network
// error, display the localized error message to your customer
// using `result.error.message`.
});
然后用户会出现这个页面
<!DOCTYPE html>
<html>
<head>
<title>KP Balance and Purchase</title>
<script src="https://js.stripe.com/v3/"></script>
<script>
<!--
function checkout(session_id) {
var stripe = Stripe('pk_test_yLz5iASFgRnotoAQc79miQGz');
stripe.redirectToCheckout({
sessionId: '{{cs_KmeIFgWSfN5GW6tP2e5IQ0Vb9EA0q3pWGHZNoDfFKAdcc6kW7DwsM6dAbhQ30}}'
}).then(function (result) {
// If `redirectToCheckout` fails due to a browser or network
// error, display the localized error message to your customer
// using `result.error.message`.
});
}
//-->
</script>
</head>
<body>
<form>
<input type="button" onclick="checkout()" value="Buy Now!" />
</form>
</body>
</html>
【问题讨论】:
-
您的 JavaScript 执行是否正确?如果您在那里回显
console.log呼叫会发生什么? -
会发生什么?您的浏览器开发工具显示什么?您链接的 Stripe 文档上的示例代码描述了在
.then()函数中使用result.error.message显示错误消息,添加这可能会显示问题? -
执行 javascript 时,浏览器被重定向到 Stripe,在控制台中我现在看到错误“未捕获错误:apiKey 或 pageIdentifier/sessionIdentifier 未设置”,但我的 javascript 确实包含会话身份证。
-
{{CHECKOUT_SESSION_ID}}通常用于在技术文档中表示“这是一个占位符”,但这并不意味着您应该在实际值中包含大括号。很确定您的sessionId: '{{cs_KmeI…Q30}}'实际上应该只是sessionId: 'cs_KmeI…Q30' -
不知道该笑还是该哭。就是这样。非常感谢!
标签: php stripe-payments