2017-04-09 5 views
0

Ich habe einen echten Bugger einer Frage. Ich versuche eine Spendenseite für eine gemeinnützige Organisation aufzubauen, die Leute über Stripe abrechnet. Jede Ladung ich versuche, ist mir ein Fehler zu machen, die lautet:Stripe 400 Fehler "Invalid Positive Integer"

Parsed Anfrage Beitrag Körper

{ 
    "card"  : "TOKEN WAS HERE", 
    "description" : "Donation by ()", 
    "amount"  : "0", 
    "currency" : "usd" 
} 

Antwort Körper:

{ 
    "error" : 
    { 
     "type" : "invalid_request_error", 
     "message" : "Invalid positive integer", 
     "param" : "amount" 
    } 
} 

ich denken gibt es ein Problem mit der Menge, die ich an Stripe übergebe (klar Stripe denkt, dass er eine Menge von 0 erhält - ich bin mir nur nicht sicher, ob es tatsächlich ist) - aber ich kann absolut nicht herausfinden, was es ist. Hier ist der volle Umfang des Codes auf meiner Seite:

<?php 
    require('Stripe/init.php'); 

    // Load configuration settings 
    $config = require('config.php'); 

    // Force https 
    if ($config[ 'test-mode' ] && 
     $_SERVER[ 'HTTPS' ] != 'on') 
    { 
     header('HTTP/1.1 301 Moved Permanently'); 
     header('Location: https://' . 
        $_SERVER[ "SERVER_NAME" ] . 
        $_SERVER[ "REQUEST_URI" ]); 
     exit; 
    } 

    if ($_POST) 
    { 
     \Stripe\Stripe::setApiKey($config[ 'secret-key' ]); 

     // POSTed Variables 
     $token  = $_POST[ 'stripeToken' ]; 
     $first_name = $_POST[ 'first-name' ]; 
     $last_name = $_POST[ 'last-name' ]; 
     $name  = $first_name . 
          ' ' . 
          $last_name; 
     $address = $_POST[ 'address' ] . 
          "\n" . 
          $_POST[ 'city' ] . 
          ', ' . 
          $_POST[ 'state' ] . 
          ' ' . 
          $_POST[ 'zip' ]; 
     $email  = $_POST[ 'email' ]; 
     $phone  = $_POST[ 'phone' ]; 
     $amount  = (float) $_POST[ 'amount' ]; 

     try 
     { 
      if (! isset($_POST[ 'stripeToken' ])) 
      { 
       throw new Exception("The Stripe Token was not generated correctly"); 
      } 

      // Charge the card 
      $donation = \Stripe\Charge::create(array('card'  => $token, 
                 'description' => 'Donation by ' . 
                      $name . 
                      ' (' . 
                      $email . 
                      ')', 
                     'amount' => $amount * 100, 
                     'currency' => 'usd')); 

      // Build and send the email 
      $headers = 'From: ' . 
          $config[ 'email-from' ]; 

      $headers .= "\r\nBcc: " . 
          $config[ 'email-bcc' ] . 
          "\r\n\r\n"; 

      // Find and replace values 
      $find = array('%name%', 
           '%amount%'); 

      $replace = array($name, 
           '$' . 
            $amount); 

      $message = str_replace($find, 
            $replace, 
            $config[ 'email-message' ]) . 
             "\n\n"; 
      $message .= 'Amount: $' . 
          $amount . 
          "\n"; 

      $message .= 'Address: ' . 
          $address . 
          "\n"; 

      $message .= 'Phone: ' . 
          $phone . 
          "\n"; 

      $message .= 'Email: ' . 
          $email . 
          "\n"; 

      $message .= 'Date: ' . 
          date('M j, Y, g:ia', 
            $donation[ 'created' ]) . 
            "\n"; 

      $message .= 'Transaction ID: ' . 
          $donation['id'] . 
          "\n\n\n"; 

      $subject = $config[ 'email-subject' ]; 

      // Send it 
      if (!$config[ 'test-mode' ]) 
      { 
       mail($email, 
         $subject, 
         $message, 
         $headers); 
      } 

      // Forward to "Thank You" page 
      header('Location: ' . 
        $config[ 'thank-you' ]); 
      exit; 
     } 
     catch (Exception $e) 
     { 
      $error = $e->getMessage(); 
     } 
    } 
?> 

<!DOCTYPE html> 

<html lang="en"> 
    <head> 
     <meta charset="UTF-8"> 

     <title>Title</title> 

     <link rel="stylesheet" type="text/css" href="style.css" media="all"> 
     <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon"> 
     <link rel="icon" href="/favicon.ico" type="image/x-icon"> 

     <script src = "https://js.stripe.com/v2" 
       type = "text/javascript"> 
     </script> 

     <script src = "https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" 
       type = "text/javascript"> 
     </script> 

     <script type = "text/javascript"> 
      Stripe.setPublishableKey('<?php echo $config[ 'publishable-key' ] ?>'); 
     </script> 

     <script src = "script.js" 
       type = "text/javascript" > 
     </script> 
    </head> 

    <body> 
     <div class = "wrapper"> 
      <div class = "messages"> 
       <!-- Error messages go here go here --> 
      </div> 

      <form action = "#" 
        class = "donation-form" 
        id  = "donor" 
        method = "POST"> 
       <fieldset> 
        <legend> 
         Contact Information 
        </legend> 

        <div class = "form-row form-first-name"> 
         <label> 
          First Name 
         </label> 

         <input class = "first-name text" 
           name = "first-name" 
           type = "text"> 
        </div> 

        <div class = "form-row form-last-name"> 
         <label> 
          Last Name 
         </label> 

         <input class = "last-name text" 
           name = "last-name" 
           type = "text"> 
        </div> 

        <div class = "form-row form-email"> 
         <label> 
          Email 
         </label> 

         <input class = "email text" 
           name = "email" 
           type = "text"> 
        </div> 

        <div class = "form-row form-phone"> 
         <label> 
          Phone 
         </label> 

         <input class = "phone text" 
           name = "phone" 
           type = "text"> 
        </div> 

        <div class = "form-row form-address"> 
         <label> 
          Address 
         </label> 

         <textarea class = "address text" 
            name = "address" 
            cols = "30" 
            rows = "2"> 
         </textarea> 
        </div> 

        <div class = "form-row form-city"> 
         <label> 
          City 
         </label> 

         <input class = "city text" 
           name = "city" 
           type = "text"> 
        </div> 

        <div class = "form-row form-state"> 
         <label> 
          State 
         </label> 

         <select name = "state" class="state text"> 
          <option value = "AL"> 
           AL 
          </option> 

          <option value = "AK"> 
           AK 
          </option> 

          <option value = "AZ"> 
           AZ 
          </option> 

          <option value = "AR"> 
           AR 
          </option> 

          <option value = "CA"> 
           CA 
          </option> 

          <option value = "CO"> 
           CO 
          </option> 

          <option value = "CT"> 
           CT 
          </option> 

          <option value = "DE"> 
           DE 
          </option> 

          <option value = "DC"> 
           DC 
          </option> 

          <option value = "FL"> 
           FL 
          </option> 

          <option value = "GA"> 
           GA 
          </option> 

          <option value = "HI"> 
           HI 
          </option> 

          <option value = "ID"> 
           ID 
          </option> 

          <option value = "IL"> 
           IL 
          </option> 

          <option value = "IN"> 
           IN 
          </option> 

          <option value = "IA"> 
           IA 
          </option> 

          <option value = "KS"> 
           KS 
          </option> 

          <option value = "KY"> 
           KY 
          </option> 

          <option value = "LA"> 
           LA 
          </option> 

          <option value = "ME"> 
           ME 
          </option> 

          <option value = "MD"> 
           MD 
          </option> 

          <option value = "MA"> 
           MA 
          </option> 

          <option value = "MI"> 
           MI 
          </option> 

          <option value = "MN"> 
           MN 
          </option> 

          <option value = "MS"> 
           MS 
          </option> 

          <option value = "MO"> 
           MO 
          </option> 

          <option value = "MT"> 
           MT 
          </option> 

          <option value = "NE"> 
           NE 
          </option> 

          <option value = "NV"> 
           NV 
          </option> 

          <option value = "NH"> 
           NH 
          </option> 

          <option value = "NJ"> 
           NJ 
          </option> 

          <option value = "NM"> 
           NM 
          </option> 

          <option value = "NY"> 
           NY 
          </option> 

          <option value = "NC"> 
           NC 
          </option> 

          <option value = "ND"> 
           ND 
          </option> 

          <option value = "OH"> 
           OH 
          </option> 

          <option value = "OK"> 
           OK 
          </option> 

          <option value = "OR"> 
           OR 
          </option> 

          <option value = "PA"> 
           PA 
          </option> 

          <option value = "RI"> 
           RI 
          </option> 

          <option value = "SC"> 
           SC 
          </option> 

          <option value = "SD"> 
           SD 
          </option> 

          <option value = "TN"> 
           TN 
          </option> 

          <option value = "TX"> 
           TX 
          </option> 

          <option value = "UT"> 
           UT 
          </option> 

          <option value = "VT"> 
           VT 
          </option> 

          <option value = "VA"> 
           VA 
          </option> 

          <option value = "WA"> 
           WA 
          </option> 

          <option value = "WV"> 
           WV 
          </option> 

          <option value = "WI"> 
           WI 
          </option> 

          <option value = "WY"> 
           WY 
          </option> 
         </select> 
        </div> 

        <div class = "form-row form-zip"> 
         <label> 
          Zip 
         </label> 

         <input class = "zip text" 
           name = "zip" 
           type = "text"> 
        </div> 
       </fieldset> 

       <fieldset> 
        <legend> 
         Your Generous Donation 
        </legend> 

        <div class = "form-row form-amount"> 
         <label> 
          <input class = "set-amount" 
            name = "amount" 
            type = "radio" 
            value = "10"> 
           $10 
         </label> 

         <label> 
          <input class = "set-amount" 
            name = "amount" 
            type = "radio" 
            value = "27"> 
           $27 
         </label> 

         <label> 
          <input class = "set-amount" 
            name = "amount" 
            type = "radio" 
            value = "50"> 
           $50 
         </label> 

         <label> 
          <input class = "set-amount" 
            name = "amount" 
            type = "radio" 
            value = "100"> 
           $100 
         </label> 

         <label> 
          <input class = "other-amount" 
            name = "amount" 
            type = "radio" 
            value = "0"> 
           Other: 
         </label> 

         <input type="text" class="amount text" /> 
        </div> 

        <div class="form-row form-number"> 
         <label> 
          Card Number 
         </label> 

         <input class  = "card-number text" 
           autocomplete = "off" 
           type   = "text" 
           value  = ""> 
        </div> 

        <div class="form-row form-cvc"> 
         <label> 
          CVC 
         </label> 

         <input class  = "card-cvc text" 
           autocomplete = "off" 
           type   = "text" 
           value  = ""> 
        </div> 

        <div class = "form-row form-expiry"> 
         <label> 
          Expiration Date 
         </label> 

         <select class="card-expiry-month text"> 
          <option selected 
            value = "01"> 
           January 
          </option> 

          <option value = "02"> 
           February 
          </option> 

          <option value = "03"> 
           March 
          </option> 

          <option value = "04"> 
           April 
          </option> 

          <option value = "05"> 
           May 
          </option> 

          <option value = "06"> 
           June 
          </option> 

          <option value = "07"> 
           July 
          </option> 

          <option value = "08"> 
           August 
          </option> 

          <option value = "09"> 
           September 
          </option> 

          <option value = "10"> 
           October 
          </option> 

          <option value = "11"> 
           November 
          </option> 

          <option value = "12"> 
           December 
          </option> 
         </select> 

         <select class = "card-expiry-year text"> 
          <option selected 
            value = "2017"> 
           2017 
          </option> 

          <option value = "2018"> 
           2018 
          </option> 

          <option value = "2019"> 
           2019 
          </option> 

          <option value = "2020"> 
           2020 
          </option> 

          <option value = "2021"> 
           2021 
          </option> 

          <option value = "2022"> 
           2022 
          </option> 

          <option value = "2023"> 
           2023 
          </option> 

          <option value = "2024"> 
           2024 
          </option> 

          <option value = "2025"> 
           2025 
          </option> 

          <option value = "2026"> 
           2026 
          </option> 
         </select> 
        </div> 

        <div class = "form-row form-submit"> 
         <input class = "submit-button" 
           type = "submit" 
           value = "Submit Donation"> 
        </div> 
       </fieldset> 
      </form> 
     </div> 

     <script> 
      if (window.Stripe) $('.donation-form').show() 
     </script> 

     <noscript> 
      <p> 
       JavaScript is required for the donation form. 
      </p> 
     </noscript> 
    </body> 

    <script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"> 
    </script> 

    <script src = 'google-sheet.js'> 
    </script> 
</html> 
+0

Haben Sie überprüft, was an sie gesendet wird? Was ist der tatsächliche Wert? –

+0

Ich bin mir nicht sicher - ich bin bei PHP ziemlich unerfahren. Ich weiß, dass ich 1 in meine Spendenbox getippt habe, also versuche ich einen Wert von 1 zu senden, und ich weiß, dass Stripe den Wert 0 erhält. Ich bin nicht sicher, wo es dazwischen verloren geht. –

Antwort

0

Ich weiß nicht, php so weg hier sein kann, aber es sieht aus, als ob Sie den Betrag als schwimmende Zahl deklarieren. Die Multiplikation mit 100 sollte dies nicht ändern, daher müssen Sie sie möglicherweise vor dem Senden in eine Ganzzahl konvertieren.

(Ich schätze, Sie senden 123.0000 .... statt 123)

+0

Meiner Kenntnis nach ist PHP ein dynamisches System, also wird PHP den Typ nach Bedarf konvertieren. Ich könnte von der Basis weg sein, da ich Amateur-Programmierer bin, aber ich glaube, das ist kein Problem. –

+0

In Ordnung, und nur weil ich keine Ahnung habe, was ich tue, habe ich versucht, in Ganzzahl zu konvertieren und ich habe den gleichen Fehler –

+0

Können Sie versuchen, den Datentyp der Menge und den Wert unmittelbar vor/nach dem Senden zu protokollieren? –