【问题标题】:Stripe::InvalidRequestError (This customer has no attached payment source)Stripe::InvalidRequestError(此客户没有附加付款来源)
【发布时间】:2016-05-22 18:04:34
【问题描述】:

将客户数据和令牌发送回 Stripe 的服务器似乎存在问题。我目前正在使用测试 api 进行虚拟交易。但是,我根本无法无缘无故地超越这一点。我已经尝试了一切来解决这个错误。我将在下面发布代码和错误消息。

Subscriptions_Controller.rb

class SubscriptionsController < ApplicationController
  before_filter :authenticate_user!, except: [:new]
  before_action :redirect_to_signup, only: [:new]

  def show

  end

  def new
    @subscription = current_user.subscription
    if @subscription.active
      @stripe_customer = Stripe::Customer.retrieve(@subscription.stripe_user_id)
      @stripe_subscription = @stripe_customer.subscription.first
    end
  end

  def create
    token = params[:stripeToken]
    customer = Stripe::Customer.create(
        :source => token,
        :plan => "gbsubscriptionlevel1",
        :email => current_user.email
    )

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

    current_user.subscription.stripe_user_id = customer.id
    current_user.subscription.active = true
    current_user.subscription.save

    redirect_to users_index_path
  end

  def cancel_subscription
    @stripe_customer = Stripe::Customer.retrieve(
        current_user.subscription.stripe_user_id
    )
    @stripe_subscription = @stripe_customer.subscription.first
  end

  private
  def redirect_to_signup
    if !user_signed_in?
      session["user_return_to"] = new_subscription_path
      redirect_to new_user_registration_path
    end
  end
end

_stripe_form.html.erb

<div class="container">
  <%= form_tag subscription_path, id: 'payment-form' do %>

  <form action="/subscription" method="POST" id="payment-form">
    <span class="payment-errors"></span>

    <div class="row">
      <div class="col-xs-4">
        <label>
          <span>Card Number</span>
          <input value="4242 4242 4242 4242" class="form-control" type="text" size="20" data-stripe="number"/>
        </label>
      </div>
    </div>

    <div class="row">
      <div class="col-xs-1">
        <label>
          <span>CVC</span>
          <input value="123" class="form-control" type="text" size="4" data-stripe="cvc"/>
        </label>
      </div>
    </div>

    <div class="row">
      <div class="col-xs-1">
        <label>MM</label>
        <input value="12" class="form-control" type="text" size="2" data-stripe="exp-month" placeholder="01"/>
      </div>
      <div class="col-xs-1">
        <label>YYYY</label>
        <input value="2019" class="form-control" type="text" size="3" data-stripe="exp-year" placeholder="2020"/>
      </div>
    </div>

    <div class="row">
      <div class="col-xs-1">
        <br/>
        <button class="btn btn-primary-outline" type="submit">Create Subscription</button>
      </div>
    </div>
  </form>
  <% end %>
  <script type="text/javascript" src="https://js.stripe.com/v2/"></script>
</div>

订阅.js

Stripe.setPublishableKey('pk_test_tmBNNUvHTmtWXLhSL1q647iH');

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

    if (response.error) {
        // Show the errors on the form
        $form.find('.payment-errors').text(response.error.message);
        $form.find('button').prop('disabled', false);
    } else {
        // response contains id and card, which contains additional card details
        var token = response.id;
        // Insert the token into the form so it gets submitted to the server
        $form.append($('<input type="hidden" name="stripeToken" />').val(token));
        // and submit
        $form.get(0).submit();
    }
}

jQuery(function ($) {
    $('#payment-form').submit(function (event) {
        var $form = $(this);

        // Disable the submit button to prevent repeated clicks
        $form.find('button').prop('disabled', true);

        Stripe.card.createToken($form, stripeResponseHandler);

        // Prevent the form from submitting with the default action
        return false;
    });
});

条纹.rb

Stripe.api_key = ENV["STRIPE_API_TEST_SECRET_KEY"]

【问题讨论】:

    标签: javascript ruby-on-rails ruby-on-rails-4 stripe-payments


    【解决方案1】:

    当您尝试将订阅附加到未附加卡片令牌的人时,通常会出现该响应。从您的代码中,我冒昧地猜测您遇到了 CardError,然后尽管如此,仍然尝试附加订阅,但这是行不通的。

    【讨论】:

    • 我知道没有卡片令牌,但是如何添加?
    猜你喜欢
    • 1970-01-01
    • 2018-07-28
    • 2016-05-21
    • 2017-03-13
    • 1970-01-01
    • 2018-12-13
    • 2019-01-26
    • 2018-11-07
    • 1970-01-01
    相关资源
    最近更新 更多