2017-01-12 16 views
2

Я создал таблицу app__stripe_customer, содержащую идентификаторы клиентов, чтобы избежать создания нескольких раз одного и того же клиента.Stripe, на странице перезагрузки клиент снова заряжается

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']