2016-06-16 8 views
2

Ich versuche, Benutzern zu ermöglichen, den Wert ihrer Spenden dynamisch über Stripe festzulegen. Ich konnte mit einer StripeAmount-Variablen einen Wert für 'amount' zuweisen, aber wenn ich versuche, diese Variable in meiner charge.php-Datei aufzurufen, gibt die Variable null zurück. Ich suche google endlos nach einer Lösung, aber keine funktioniert. Ich bin ein relativer Neuling.STRIPE - Der dynamisch eingestellte Betrag gibt null zurück, wenn er unter charge.php aufgerufen wird.

= Form Code =

 <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-Code =

<?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(); 

} 

Antwort

0

In Ihrem serverseitigen Code wird $amount nie initialisiert.

Beachten Sie auch, dass der Betrag und die Währung, die an Checkout übergeben wurden, für Anzeigezwecke verwendet werden. Checkout sendet den Betrag und die Währung nicht an den Server.

Sie müssen, so etwas tun:

  1. Aktualisieren Sie Ihre clientseitigen Code, um die Menge an den Server senden:

    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. Rufen Sie den Betrag in Ihrem server- Seitencode:

    $amount = $_POST['amount']; 
    
+0

ich brauchte o zu machen ne kleine Bearbeitung, aber ansonsten war das perfekt. Massiver Dank. –