2017-02-20 8 views
0

私のアプリケーションにStripe Connectスタンドアロンを使用しています。これまでのところ、ユーザーはストライプアカウントを正常に接続でき、支払いはストライプアカウントに届きます。問題は、私はお互いにお金を支払うことができるようにユーザーが必要であり、私は申請料を保持しています。未初期化定数ChargesController :: CONNECTED_STRIPE_ACCOUNT_ID

現時点では、すべての支払いは私の(プラットフォーム)アカウントに入金され、申請手数料はかかりません。エンドユーザーはお金を受け取ることはありません。私が解決策を探した後、私は充電コントローラにストライプヘッダーを追加し、Stripesドキュメントに表示された充電メソッドを使用しました。私はクレジットカードのフォームを送信すると、私はこのエラーが表示されます。

uninitialized constant ChargesController::CONNECTED_STRIPE_ACCOUNT_ID

は、これが私の料金コントローラ内のこの行に対応している:ここでは

Stripe::Account.retrieve(CONNECTED_STRIPE_ACCOUNT_ID) 

は私charges_controller.rbです:

class ChargesController < ApplicationController 

    def new 
    end 

def create 
Stripe.api_key = "sk_test_1q2w3e4r5t6y...." 

Stripe::Account.retrieve(CONNECTED_STRIPE_ACCOUNT_ID) 

token = params[:stripeToken] 

# Create a customer 
Stripe::Customer.create(
    {:description => "[email protected]"}, 
    {:stripe_account => CONNECTED_STRIPE_ACCOUNT_ID} 
) 
# Create a Charge: 
charge = Stripe::Charge.create({ 
    :amount => 1000, 
    :currency => "cad", 
    :source => token, 
    :application_fee => 200 # amount in cents 
}, :stripe_account => "{CONNECTED_STRIPE_ACCOUNT_ID}") 

rescue Stripe::CardError => e 
    flash[:error] = e.message 
    redirect_to new_charge_path 
end 
end 

初期化子/ stripe.rb

Rails.configuration.stripe = { 
    :publishable_key => ENV['PUBLISHABLE_KEY'], 
    :secret_key  => ENV['STRIPE_SECRET_KEY'], 
    :stripe_account => ENV['CONNECTED_STRIPE_ACCOUNT_ID'] 
} 
Stripe.api_key = Rails.configuration.stripe[:secret_key] 

application.yml

development: 

    PUBLISHABLE_KEY: pk_test_########### 
    STRIPE_SECRET_KEY: sk_test_########## 
    STRIPE_CLIENT_ID: ca_########### 

料金/ new.html.erb

<script type="text/javascript" src="https://js.stripe.com/v2/"></script> 
<script type="text/javascript"> 
Stripe.setPublishableKey('pk_test_###############'); 

$(function() { 
    var $form = $('#payment-form'); 
    $form.submit(function(event) { 
    // Disable the submit button to prevent repeated clicks: 
    $form.find('.submit').prop('disabled', true); 

    // Request a token from Stripe: 
    Stripe.card.createToken($form, stripeResponseHandler); 

    // Prevent the form from being submitted: 
    return false; 
    }); 
}); 

function stripeResponseHandler(status, response) { 
    // Grab the form: 
    var $form = $('#payment-form'); 

    if (response.error) { // Problem! 

    // Show the errors on the form: 
    $form.find('.payment-errors').text(response.error.message); 
    $form.find('.submit').prop('disabled', false); // Re-enable submission 

    } else { // Token was created! 

    // Get the token ID: 
    var token = response.id; 

    // Insert the token ID into the form so it gets submitted to the server: 
    $form.append($('<input type="hidden" name="stripeToken">').val(token)); 

    // Submit the form: 
    $form.get(0).submit(); 
    } 
}; 
</script> 


<%= form_tag charges_path, :id => 'payment-form' do %> 
    <article> 
    <% if flash[:error].present? %> 
     <div id="error_explanation"> 
     <p><%= flash[:error] %></p> 
     </div> 
    <% end %> 
    <label class="amount"> 
     <span>Amount: $10.00</span> 
    </label> 
    </article> 

    <script src="https://checkout.stripe.com/checkout.js" class="stripe-button" 
      data-key="<%= Rails.configuration.stripe[:publishable_key] %>" 
      data-description="A month's subscription" 
      data-amount="1000" 
      data-locale="auto"></script> 
<% end %> 

私はストライプの接続に新たなんだ、としばらくの間、この部分に貼付されています。私を狂わせる私は「ユーザーA」が「ユーザーB」を支払うことを許可するはずのユーザープロファイルに「今支払う」ボタンを持っていますが、私に申請料金を送ってください。このエラーを修正するにはどうすればよいですか?これは私の支払いフローの主な問題ですか(ユーザーが自分のプロフィールのボタンを使ってお互いにお金を払うことを許可していますか?

UPDATE:それは接続しているユーザに置き換えるstripe_user_idしなければならないため

CONNECTED_STRIPE_ACCOUNT_IDが、初期化されていません。私のデータベースでは、これは "uid"として保存されます。だから問題は私のアプリケーションにそれを呼び出すことです。

UPDATE 2:ユーザーが接続すると

、その公開可能キー、およびストライプユーザーID(私のデシベルではuid)は、私のデータベースに保存されています。

name: "Testguy", publishable_key: "pk_test_6IgEWlj4y##########", provider: "stripe_connect", uid: "acct_19l9#########", access_code: "sk_test_vldP#########">]>

私のアプリケーションでユーザーIDを呼び出すにはどうすればいいですか?

Stripe::Account.retrieve(UID) 

uninitialized constant ChargesController::UID

+0

'CONNECTED_STRIPE_ACCOUNT_ID'は定義されていません。あなたは初期化ファイルやコントローラ上で初期化できます(悪い考え方)。環境ファイルを使用して別の方法で' ENV ['CONNECTED_STRIPE_ACCOUNT_ID'] ' –

+0

でお返事ありがとうございます。私はまた、Ruby/Railに若干新しくて、簡単に混乱します。例えば、私はinitializers/stripe.rbに行き、add..what? CONNECTED_STRIPE_ACCOUNT_IDは、取引で資金を受け取ったユーザーに属していますか?または私は間違っていますか?私の混乱の中で私はCONNECTED_STRIPE ....はユーザーがお金を受け取っているときにのみ発生すると信じられているので、どうすれば初期化子で定義できますか? – ChrisJC2017

+0

あなたはこれを読むことができます[ruby on railsの環境ファイルを使用して](http://railsapps.github.io/rails-environment-variables.html) –

答えて

2

はあなたが接続されているアカウントのIDでCONNECTED_STRIPE_ACCOUNT_IDを交換する必要が初期化されていないエラーになります。アカウントIDは、"acct_"で始まり、その後にランダムな英数字が続く文字列です。

OAuth flowを使用してアカウントがプラットフォームのアカウントに接続すると、stripe_user_idフィールドのフローのlast stepにアカウントIDが表示されます。このIDをデータベースに保存する必要があります。

IDを使用して、Stripe-Accountヘッダーを使用して、このアカウントに代わって料金を処理したり、APIリクエストを発行することができます。

+0

お返事ありがとうございます。その情報は私のDBに保存されます。今私はアプリケーションにストライプのユーザーIDを呼び出す方法がわかりません。私の料金のコントローラーはちょっと混乱していますか?私は詳細を下に私の質問を更新しました。 – ChrisJC2017

関連する問題