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 的金额和货币用于显示目的。结帐不会将金额和货币发送到服务器。

你需要做这样的事情:

  1. 更新您的客户端代码以将金额发送到服务器:

    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();
    }
    
  2. 在您的服务器端代码中检索金额:

    $amount = $_POST['amount'];