未初始化的常量ChargesController :: CONNECTED_STRIPE_ACCOUNT_ID

时间:2017-02-20 00:45:24

标签: ruby-on-rails stripe-payments stripe-connect

我在我的应用程序中使用Stripe Connect Standalone。到目前为止,用户可以成功连接他们的条带帐户,付款将进入我的条带帐户。问题是我需要用户能够互相支付,我保留申请费。

目前,所有付款都只是进入我的(平台)帐户,不收取申请费,最终用户也没有收到任何款项。在我搜索解决方案之后,我向我的充电控制器添加了一个条带标题,并使用了Stripes文档中显示的计费方法。提交信用卡表单后,我收到此错误:

  

未初始化的常量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 => "example@stripe.com"},
  {: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 %>

我是Stripe Connect的新手,并且已经停留了一段时间。快把我逼疯了。我有一个&#34;立即付款&#34;用户配置文件上的按钮应该允许&#34;用户A&#34;支付&#34;用户B&#34;,同时向我发送申请费。我该如何解决这个错误?这是我的付款流程中的主要问题(允许用户通过其个人资料中的按钮互相付款)?

更新:

CONNECTED_STRIPE_ACCOUNT_ID尚未初始化,因为必须将其替换为已连接的用户stripe_user_id。在我的数据库中,这被保存为&#34; uid&#34;。所以现在问题是将它调用到我的应用程序中。

更新2:

当用户连接时,他们的可发布密钥和条带用户ID(我的数据库中的uid)将保存到我的数据库中。看起来像这样:

        

名称:&#34; Testguy&#34;,publishable_key:&#34; pk_test_6IgEWlj4y ##########&#34;,   提供者:&#34; stripe_connect&#34;,uid:&#34; acct_19l9 #########&#34;,access_code:   &#34; sk_test_vldP #########&#34;&GT;]&GT;

现在,如何在我的应用程序中调用他们的用户ID?

Stripe::Account.retrieve(UID)

获取未初始化的错误

  

未初始化的常量ChargesController :: UID

1 个答案:

答案 0 :(得分:2)

您需要将git push --force 替换为已连接帐户的ID。帐户ID是以CONNECTED_STRIPE_ACCOUNT_ID开头的字符串,后跟随机的字母数字字符。

当帐户使用OAuth flow连接到您平台的帐户时,您会在"acct_"字段中的流程的last step中获取其帐户ID。然后,您应该将此ID保存在数据库中。

然后,您可以使用该Stripe-Account标题来代表此帐户处理费用或发出任何API请求。