2016-09-23 62 views
1

我有一個客戶想要有一個不花費任何東西的Stripe訂閱。目前,他們的申請被設置爲接收CC信息,因爲他們的舊計劃確實需要每月收費。可能創建帶有Stripe JS的令牌並且沒有付款信息

我想知道是否有可能通過Stripe JS創建Stripe客戶令牌而無需從用戶處獲取任何類型的CC信息/銀行賬戶等?

我試着用jQuery刪除CC字段,但由於無法找到付款信息,我一直收到條帶無效請求錯誤。總之,當用戶從下拉列表中選擇「免費」計劃時,他們不應該看到CC字段,並且他們應該能夠在沒有任何條紋驗證的情況下通過註冊頁面前進,同時還創建他們的客戶令牌。

這可能嗎?

相關文件

主機控制器#創建

def create 
    @host = User.new(host_params) 

    if @host.valid? 
     customer = Stripe::Customer.create(
     stripe_params.merge(email: host_params[:email], coupon: coupon) 
    ) 

     @host.update(
     stripe_customer_id: customer[:id], 
     subscription_plan: stripe_params[:plan] 
    ) 

     sign_in(:user, @host) 

     redirect_to dashboard_path, notice: t('notices.hosts.created') 
    else 
     render :new 
    end 
    rescue Stripe::CardError, Stripe::InvalidRequestError => error 
    render :new, alert: error.message 
    end 

條紋JS代碼

$(document).on 'ready page:load', -> 
    $cardFields = $('#credit-card-fields') 
    $parentForm = $cardFields.parents('form') 
    $parentBtn = $('.js-payment-btn', $parentForm) 

    return unless $parentForm.length 

    $parentBtn.on 'click', (event) -> 
     event.preventDefault() 

     pub_key = $('meta[name=stripe-publishable-key]').attr('content') 

     $parentBtn.prop('disabled', true) 

     Stripe.setPublishableKey(pub_key) 

     Stripe.card.createToken $parentForm, (status, response) -> 
     if response.error 
      $parentForm.find('.payment-errors').text(response.error.message) 
      $parentBtn.prop('disabled', false) 
     else 
      token = response.id 
S>  $parentForm.append($('<input type="hidden" name="stripe[source]" />').val(token)) 
      $parentForm.get(0).submit() 

條紋JS表格

<script type="text/javascript" src="https://js.stripe.com/v2/" data-turbolinks-track="true"></script> 

<div class="clearfix" id="credit-card-fields"> 
    <span class="payment-errors"></span> 

    <div class="form-group"> 
    <div class="input-group"> 
     <span class="input-group-addon icon icon-credit-card"></span> 
     <input id="card-number" class="form-control input-cc" required placeholder="Card Number" type="text" size="16" maxlength=16 data-stripe="number" /> 
    </div> 
    </div> 

    <div class="form-group side-by-side"> 
    <div class="input-group"> 
     <span class="input-group-addon icon icon-calendar"></span> 
     <input id="card-month" class="form-control input-exp" required placeholder="MM" type="text" size="2" maxlength="2" data-stripe="exp-month" /> 
     <input id="card-year" class="form-control input-exp" required placeholder="YY" type="text" size="2" maxlength="2" data-stripe="exp-year" /> 
    </div> 
    </div> 

    <div class="form-group side-by-side"> 
    <div class="input-group"> 
     <span class="input-group-addon icon icon-lock"></span> 
     <input id="card-cvc" class="form-control input-cvv" required placeholder="CVC" type="text" size="4" maxlength="4" data-stripe="cvc" /> 
    </div> 
    </div> 
</div> 

回答

1

創建卡片令牌沒有任何卡片細節是沒有意義的,所以這是不可能的。正如你所提到的,如果你嘗試創建一個沒有所需參數(例如卡號或有效期限)的令牌,你會得到一個invalid_request_error

如果你不想要求卡的細節,那麼你應該不會創建一個令牌。當有人試圖訂閱免費計劃時,您會忽略創建令牌的需要,並簡單地收集您想要的其他信息,例如客戶的電子郵件地址或姓名。然後在服務器端,您將調用Create Customer API並傳遞參數​​中的計劃ID以訂閱它們。

如果計劃是免費的,那麼不需要傳遞令牌,您可以完全忽略source參數。

+0

很酷,客戶API正在#create動作中調用。有沒有辦法排除或忽略條帶參數散列中的源參數?我看着#except,但它似乎並沒有擺脫這個參數。 –

+0

只是不要發送它,因爲它不是必需的。這是你自己的代碼,所以你決定你發送給Stripe的參數! – koopajah

+0

感謝您的幫助! –

相關問題