我在MAMP堆栈上运行,尝试创建Stripe Checkout with a custom button测试费用。信用卡验证发生,甚至第二次记住我。此外,我的Stripe仪表板上出现了200个POST日志,但没有收费记录。因此,表单代码可能与服务器代码无关......
具有自定义'注册'的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文件并创建费用?我还仔细检查了我的秘密和可发布的测试密钥是否正确。为什么我的设置中没有结账代码与服务器端通信?
----更新----我收到Stripe支持的电子邮件回复,建议我添加
echo('Hello world!');
到我的PHP文件,看看代码是否正在运行。我确实将它添加到config.php和charge.php文件中,但我无法在任何地方显示“Hello World!&#39;”。所以看起来PHP文件没有运行。 我也看了一下JavaScript控制台......没有错误。
那么如何让我的PHP文件运行&#34;运行&#34;?
答案 0 :(得分:2)
解决。
是的,MAMP足以让HTML与PHP文件对话。如果MAMP正在运行&#39;成功,PHP应该工作正常。毕竟PHP是MAMP的一部分。
问题是Stripe's custom checkout页面上提供的令牌功能没有附带任何代码来告诉它要做什么并将表单提交到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在自定义结帐页面上的完全匹配,但我使用了令牌功能的内容。下面的代码填写我的令牌功能并添加它的提交功能。
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
,以在评论中反映Stripe的建议。因此,实施上述代码既可以进行卡片验证检查,也可以在我的Stripe仪表板上发布客户和费用。以及将表格带到charge.php以显示收费确认页面。