gpt4 book ai didi

javascript - 已记录 Stripe 调用但未产生测试费用

转载 作者:行者123 更新时间:2023-11-29 21:57:25 24 4
gpt4 key购买 nike

我在 MAMP 堆栈上运行,试图创建一个 Stripe Checkout with a custom button测试充电。信用卡验证发生,甚至第二次记得我。此外,200 POST 日志出现在我的 Stripe 仪表板上,但没有收费记录。所以也许表单代码没有与服务器代码对话......

具有自定义“注册”按钮的 index.html 具有以下代码:

<script src="bower_components/jquery/dist/jquery.min.js"></script>  <!-- In the head -->
...
...
<?php require_once('/php/config.php'); ?>
<form action="/php/charge.php" method="post">
<a href="#" id="stripeButton" class="button">Sign Up</a>
<script src="https://checkout.stripe.com/checkout.js"></script>
<script>
var handler = StripeCheckout.configure({
key: 'pk_test_*************************',
image: 'img/logo.png',
token: function(token) {
// Use the token to create the charge with a server-side script.
// You can access the token ID with `token.id`
}
});
document.getElementById('stripeButton').addEventListener('click', function(e) {
// Open Checkout with further options
handler.open({
name: 'Awesome Subscription',
description: 'Unlimited Awesomeness',
amount: 2000,
panelLabel: '{{amount}} Per Month'
});
e.preventDefault();
});
</script>
</form>

config.php 文件包含以下代码,大部分取自 stripe's php tutorial :

<?php
require_once('../stripe/lib/Stripe.php');
$stripe = array(
'secret_key' => 'sk_test_************************',
'publishable_key' => 'pk_test_************************'
);
Stripe::setApiKey($stripe['secret_key']);
?>

在同一个/php/文件夹中,charge.php 文件包含:

<?php
require_once(dirname(__FILE__) . '/config.php');

$token = $_POST['stripeToken'];

$customer = Stripe_Customer::create(array(
'email' => 'customer@example.com',
'card' => $token
));

$charge = Stripe_Charge::create(array(
'customer' => $customer->id,
'amount' => 2000,
'currency' => 'usd'
));

echo '<h1>Successfully charged $20.00!</h1>';
?>

关于我可能做错了什么有什么想法吗? MAMP 是否足以让 index.html 中的代码到达 .php 文件并创建费用?我还仔细检查了我的 secret 和可发布的测试 key 是否正确。为什么结帐代码不与我的设置中的服务器端通信?

---- 更新 ---- 我收到了 Stripe 支持的电子邮件回复,建议我添加

echo('Hello world!');

到我的 PHP 文件以查看代码是否正在运行。我确实将它添加到 config.php 和 charge.php 文件中,但我没有在任何地方显示“Hello World!”。所以看起来 PHP 文件没有运行。 我还查看了 JavaScript 控制台……没有错误。

那么如何让我的 PHP 文件“运行”呢?

最佳答案

已解决。

是的,MAMP 足以让 HTML 与 PHP 文件对话。如果 MAMP 成功“运行”,PHP 应该可以正常工作。 PHP 毕竟是 MAMP 的一部分。

问题是 Stripe's custom checkout 上提供的 token 功能页面没有任何代码来告诉它做什么以及将表单提交到您的 PHP 文件。你应该用你自己的代码来填充这个函数。愚蠢的错误,但我没有通过提供的评论以这种方式阅读它:

token: function(token) {
// Use the token to create the charge with a server-side script.
// You can access the token ID with `token.id`
}

我遇到了 this StackOverflow thread虽然代码看起来有点旧,因为它与 Stripe 现在在他们的自定义结帐页面上的内容不完全匹配,但我使用以下代码的 token 函数内容来填充我的 token 函数并添加它的提交功能.

var token = function(res){
var $input = $('<input type=hidden name=stripeToken />').val(res.id);
$('form').append($input).submit();
};

现在我的 index.html(我的注册按钮所在的位置)如下所示:

<form action="/php/charge.php" method="post">
<a href="#" id="stripeButton" class="special-button">Sign Up</a>
</form>
...
...
<!-- Just before body tag close -->
<script src="bower_components/jquery/dist/jquery.min.js"></script> <!-- jQuery coming from Zurb Foundation install -->
...
<script src="https://checkout.stripe.com/checkout.js"></script>
<script>
var handler = StripeCheckout.configure({
key: 'pk_test_************************',
image: 'img/logo.png',
token: function(token) {
var $input = $('<input type=hidden name=stripeToken />').val(token.id);
$('form').append($input).submit(); <!-- Code pulled from other StackOverflow thread -->
}
});
document.getElementById('stripeButton').addEventListener('click', function(e) {
// Open Checkout with further options
handler.open({
name: 'Product Name',
description: 'Product Description',
amount: 2000,
panelLabel: '{{amount}} Per Month'
});
e.preventDefault();
});
</script>

注意 * 从旧代码中,res.id 被传递到 .val() 所以我只是将 res.id 替换为token.id 以在他们的评论中反射(reflect) Stripe 的建议。因此,实现上述代码既可以进行卡验证检查,也可以在我的 Stripe 仪表板上发布客户和费用。以及将我带到 charge.php 以显示收费确认页面的表格。

关于javascript - 已记录 Stripe 调用但未产生测试费用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25712203/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com