2017-01-12 126 views
2

我創建了一個包含客戶ID的表app__stripe_customer,以避免多次創建同一個客戶。條紋,在重新載入頁面客戶再次收費

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

    } 

} 

它工作正常,但如果客戶存在未使用的令牌,如果用戶重裝他將再次充電的頁面。

對我來說,這段代碼看起來不錯,但我怎麼能阻止多次用戶收費?

+0

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

回答

1

使用$_SESSIONif($_POST)道:

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

充電完成後:

$_SESSION['stripe_token'] = $_POST['stripeToken'] 
相關問題