2017-02-20 41 views
0

Im using Stripe Connect Автономный для моего приложения. Пока пользователи могут успешно подключать свою учетную запись stripe, а платежи поступают в мою учетную запись stripe. Проблема в том, что мне нужно, чтобы пользователи могли оплачивать друг друга, и я сохраняю плату за подачу заявки.неинициализированная константа 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 %> 

Я новичок в полоской Connect, и застрял в этой части на некоторое время. Сводит меня с ума. У меня есть кнопка «Оплатить сейчас» в профилях пользователей, которые должны позволять «Пользователь А» оплачивать «Пользовательский B», при этом присылая мне плату за заявку. Как исправить эту ошибку? Является ли это основной проблемой в моем платежном потоке (позволяя пользователям платить друг другу через кнопку в своем профиле)?

UPDATE:

CONNECTED_STRIPE_ACCOUNT_ID не был инициализирован, потому что он должен быть заменен с подключенными пользователями stripe_user_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

Спасибо за ваш ответ. Я также немного новичок в рубинах/рельсах и легко запутался. Так, например, я бы включил инициализаторы/stripe.rb и добавил ... что? CONNECTED_STRIPE_ACCOUNT_ID принадлежит пользователю, правильно получающему средства в транзакции? или я не прав? В моем замешательстве я был убежден, что CONNECTED_STRIPE .... происходит только тогда, когда пользователь получает деньги, так как я могу определить это в инициализаторе? – ChrisJC2017

+0

Вы можете прочитать это [с использованием файла среды в ruby ​​on rails] (http://railsapps.github.io/rails-environment-variables.html) –

ответ

2

Вы должны заменить CONNECTED_STRIPE_ACCOUNT_ID по идентификатору подключенного счета. Идентификаторами учетной записи являются строки, начинающиеся с "acct_", за которыми следуют случайные буквенно-цифровые символы.

Когда учетная запись подключается к учетной записи вашей платформы с использованием OAuth flow, вы получаете идентификатор своей учетной записи в поле last step потока в поле stripe_user_id. Затем вы должны сохранить этот идентификатор в своей базе данных.

Затем вы можете использовать идентификатор для оплаты сборов или выдавать любой запрос API от имени этой учетной записи, используя заголовок Stripe-Account.

+0

спасибо, что ответили. Эта информация сохраняется в моей БД. Теперь я не уверен, как вызвать идентификатор пользователя stripe в мое приложение. Является ли мой обвиняющий контроллер немного беспорядочным? Я обновил свой вопрос внизу с дополнительной информацией. – ChrisJC2017