2017-07-18 147 views
1

我的代碼創建並加載Stripe Checkout,客戶輸入名稱和卡片詳細信息,然後返回到接收到令牌並用於創建Stripe客戶的PHP腳本,然後發送購買請求爲他們的卡充電。使用Stripe Checkout和Omnipay創建訂閱

如何儘可能最好地添加使用相同卡和omnipay庫的訂閱?我是否使用令牌或從購買對象中獲取源ID並使用該ID,並在購買後創建訂購?

在課堂內部,在下面的代碼中調用createSubscription會給出錯誤「此客戶沒有附加的支付來源」。

public function createSubscription($token,$customer_id,$plan,$source_id) 
{ 
     try { 
      $response = $this->gateway->createSubscription(
           array(
            'customerReference' => $customer_id, 
            'plan'    => $plan, 
            'source'   => $token 
           ) 
      )->send(); 
      if ($response->isSuccessful()) { 
       $data = $response->getData(); 
return $data; 
      } 
     } catch (Exception $e) { 
      $message = "Error creating Stripe subscription: " . $e->getMessage(); 
      return; 
     } 
    } 
+0

條紋訂閱總是會收取客戶的默認卡(default_source),所以如果你已經添加了卡就沒有必要通過「源」 什麼你在這裏傳給'源'嗎?從Stripe.js/Checkout獲得的令牌(用於測試:tok_visa)? – duck

+0

我試過在客戶完成他們的'Checkout'之後傳遞從Stripe接收到的令牌。不確定這裏的「源」是否可以是標記,或者它是否必須是源ID或卡對象。我會嘗試在收取卡後添加訂閱,但不確定該來源是否只適合一次性收費。 –

+0

購買後無法使用源ID或令牌讓它工作,我得到'invalid_request_error - 此客戶沒有附加的支付來源'。我會再次嘗試使用創建客戶請求。 –

回答

0

我已經通過創建具有信用卡詳細資料的客戶連接使用令牌,然後創建使用「計劃」和「customerReference」參數訂閱,並最終充電使用customerReference(isSuccessful檢查卡成功並檢查錯誤省略爲清楚起見):

$response = $gateway->createCustomer(array(
    'description'  => 'Test Customer', 
    'email'    => $_POST['stripeEmail'], 
    'source' => $token 
))->send(); 

$response = $gateway->createSubscription(array(
    "customerReference" => $customer_id, 
    'plan' => 'plan_name', 
))->send(); 

$transaction = $gateway->purchase(array(
        'amount' => '5.00', 
        'currency' => 'gbp', 
        'receipt_email' => '[email protected]', 
        "description" => 'Test Order', 
        'customerReference' => $customer_id, 
));