2017-01-12 3 views
2

Ich habe eine Tabelle app__stripe_customer erstellt, die die Kundennummer enthält, um zu vermeiden, dass ein Kunde mehrmals erstellt wird.Stripe, beim Laden der Seite wird der Kunde erneut geladen

if ($_POST) { 

    \Stripe\Stripe::setApiKey($StripeKeySecret); 
    $error = ''; 
    $success = ''; 

    /** 
    * Check if Customer Exists if not Create a Customer: 
    */ 
    try { 
     $sql = $dataBase->prepare('SELECT * FROM app__stripe_customer 
            WHERE user_id = :uid'); 
     $sql->execute(array('uid' => $_SESSION['user_id'])); 
     $stripeCustomer = $sql->fetch(); 
     if(empty($stripeCustomer)) { 
      /** 
      * We create the new Stripe Customer 
      */ 
      $customer = \Stripe\Customer::create(array(
       "email" => $user['email'], 
       "source" => $token)); 

      /** 
      * Creating new Stripe Customer Id in database 
      */ 
      $sql = $dataBase->prepare('INSERT INTO app__stripe_customer(user_id, customer_id) 
             VALUES(:uid, 
               :cid)'); 
      $sql->execute(array('uid' => $_SESSION['user_id'], 
           'cid' => $customer->id)); 
      $stripeCustomerId = $customer->id; 
     } else { 
      $stripeCustomerId = $stripeCustomer['customer_id']; 
     } 

     if (!isset($_POST['stripeToken'])) 
      throw new Exception("The Stripe Token was not generated correctly"); 
     $charge = \Stripe\Charge::create(array("amount" => $AMT*100, 
               "currency" => "usd", 
               "customer" => $stripeCustomerId)); 
     $chargeID = $charge->id; 
     $success = 'Your payment was successful: '.$chargeID; 
     //echo $success; 
     show__paymentDone(); 

    } catch (Exception $e) { 

     $error = $e->getMessage(); 

     show__errorPayment($error); 

    } 

} 

Es funktioniert gut, aber wenn der Kunde das Token existiert nicht verwendet wird, und wenn der Benutzer die Seite neu zu laden er wieder aufgeladen werden.

Für mich sieht dieser Code gut aus, aber wie könnte ich verhindern, dass ein Benutzer mehrfach aufgeladen wird?

+0

Verwenden https://en.wikipedia.org/wiki/Post/Redirect/Get – ceejayoz

Antwort

1

Ein Weg mit $_SESSION vor if($_POST):

if((isset($_SESSION['stripe_token']) && ($_SESSION['stripe_token'] == $_POST['stripeToken'])) { 
     show__errorTokenTwice($token); 
     exit; 
} 

Nachdem die Ladung erfolgt:

$_SESSION['stripe_token'] = $_POST['stripeToken'] 
Verwandte Themen