STRIPE - 在 charge.php 上调用时动态设置数量 returns null
STRIPE - Dynamically set amount returns null when called on charge.php
我正在尝试让用户能够通过 Stripe 动态设置他们的捐赠价值。我已经能够使用 StripeAmount 变量为 'amount' 分配一个值,但是当我尝试在我的 charge.php 文件上调用此变量时,变量 returns 为空。我无休止地搜索 google 寻找解决方案,但 none 有效。我是一个相对新手。
= 表单代码 =
<form id="target_form" action="charge.php" method="POST">
<script src="https://checkout.stripe.com/checkout.js"></script>
<button class="stripe_button_style" id="myStripeButton">Give By Card</button>
<script>
var handler = StripeCheckout.configure({
key: "pk_test_xxxxxxxxxxxxxxxx",
image: "includes/images/stripe_logo.png",
token: function(token, args){
var form = $('#target_form');
form.append($('<input type="hidden" name="stripeToken" />').val(token.id));
form.get(0).submit();
}
});
document.getElementById('myStripeButton').addEventListener('click', function(e) {
var StripeAmount = $("#donation_amount").val() *100;
handler.open({
name: "company name",
description: "donation",
panelLabel: "Give:",
allowRememberMe: true,
amount: StripeAmount,
zipCode: true,
shippingAddress: true,
billingAddress: true
});
e.preventDefault();
});
$(window).on('popstate', function() {
handler.close();
});
</script>
</form>
= Charge.php代码=
<?php require_once('includes/stripe/init.php');
$stripe = array(
"secret_key" => "sk_test_xxxxxxxxxxxxxxxxxxxxxxxx",
"publishable_key" => "pk_test_xxxxxxxxxxxxxxxxxxxxxxxx"
);
\Stripe\Stripe::setApiKey($stripe['secret_key']);
$token = $_POST['stripeToken'];
$email = $_POST['stripeEmail'];
try {
$customer = \Stripe\Customer::create(array(
'email' => $_POST['stripeEmail'],
'source' => $token));
$charge = \Stripe\Charge::create(array(
'amount' => $amount,
'customer' => $customer->id,
'currency' => "usd",
'description' => $email));
echo 'Thank you for your donation. We will send you a receipt by email for your tax records within 48hours';
var_dump($charge);
}catch(\Stripe\Error\Card $e){
echo $e->getMessage();
}
在您的服务器端代码中,$amount
从未被初始化。
另外,请注意传递给 Checkout 的金额和货币用于显示目的。结帐不会将金额和货币发送到服务器。
你需要做这样的事情:
更新您的客户端代码以将金额发送到服务器:
token: function(token, args) {
var form = $('#target_form');
form.append($('<input type="hidden" name="amount" />').val($("#donation_amount").val() * 100;));
form.append($('<input type="hidden" name="stripeToken" />').val(token.id));
form.get(0).submit();
}
在您的服务器端代码中检索金额:
$amount = $_POST['amount'];
我正在尝试让用户能够通过 Stripe 动态设置他们的捐赠价值。我已经能够使用 StripeAmount 变量为 'amount' 分配一个值,但是当我尝试在我的 charge.php 文件上调用此变量时,变量 returns 为空。我无休止地搜索 google 寻找解决方案,但 none 有效。我是一个相对新手。
= 表单代码 =
<form id="target_form" action="charge.php" method="POST">
<script src="https://checkout.stripe.com/checkout.js"></script>
<button class="stripe_button_style" id="myStripeButton">Give By Card</button>
<script>
var handler = StripeCheckout.configure({
key: "pk_test_xxxxxxxxxxxxxxxx",
image: "includes/images/stripe_logo.png",
token: function(token, args){
var form = $('#target_form');
form.append($('<input type="hidden" name="stripeToken" />').val(token.id));
form.get(0).submit();
}
});
document.getElementById('myStripeButton').addEventListener('click', function(e) {
var StripeAmount = $("#donation_amount").val() *100;
handler.open({
name: "company name",
description: "donation",
panelLabel: "Give:",
allowRememberMe: true,
amount: StripeAmount,
zipCode: true,
shippingAddress: true,
billingAddress: true
});
e.preventDefault();
});
$(window).on('popstate', function() {
handler.close();
});
</script>
</form>
= Charge.php代码=
<?php require_once('includes/stripe/init.php');
$stripe = array(
"secret_key" => "sk_test_xxxxxxxxxxxxxxxxxxxxxxxx",
"publishable_key" => "pk_test_xxxxxxxxxxxxxxxxxxxxxxxx"
);
\Stripe\Stripe::setApiKey($stripe['secret_key']);
$token = $_POST['stripeToken'];
$email = $_POST['stripeEmail'];
try {
$customer = \Stripe\Customer::create(array(
'email' => $_POST['stripeEmail'],
'source' => $token));
$charge = \Stripe\Charge::create(array(
'amount' => $amount,
'customer' => $customer->id,
'currency' => "usd",
'description' => $email));
echo 'Thank you for your donation. We will send you a receipt by email for your tax records within 48hours';
var_dump($charge);
}catch(\Stripe\Error\Card $e){
echo $e->getMessage();
}
在您的服务器端代码中,$amount
从未被初始化。
另外,请注意传递给 Checkout 的金额和货币用于显示目的。结帐不会将金额和货币发送到服务器。
你需要做这样的事情:
更新您的客户端代码以将金额发送到服务器:
token: function(token, args) { var form = $('#target_form'); form.append($('<input type="hidden" name="amount" />').val($("#donation_amount").val() * 100;)); form.append($('<input type="hidden" name="stripeToken" />').val(token.id)); form.get(0).submit(); }
在您的服务器端代码中检索金额:
$amount = $_POST['amount'];