【问题标题】:Stripe from sandbox to live, question about source?从沙盒到直播,关于来源的问题?
【发布时间】:2019-03-22 05:09:18
【问题描述】:

我有条带连接在测试模式下工作,但对“来源”很好奇..

以下代码在我的控制器中预授权付款:

token = params[:stripeToken]
            payment_form = params[:payment_form]

            customer = Stripe::Customer.create({
              :source  => 'tok_visa',
              :email => params[:stripeEmail],
            })

            charge = Stripe::Charge.create({
              amount: @amount,
              currency: 'usd',
              customer: customer.id,
              capture: false,
          })

我想进入实时模式,但我需要将源更新为“tok_visa”以外的其他内容...

应该去那里做什么?

到目前为止,我收集了客户令牌和条带令牌,我尝试在那个地方同时使用两者,但都不起作用。

当我使用时

:source => @order.order_token,

在自定义创建或收费创建中,它告诉我:

Stripe::InvalidRequestError (No such token: KFU8PmscYRDsXs1234560jG4sn8J-S8TMi123456BUBkWr9aOvw):

这是在使用测试号时:4242424242424242

它适用于测试令牌,但不适用于数字?这正常吗?

更新:

当我使用以下内容时:

token = params[:stripeToken]
            payment_form = params[:payment_form]

            customer = Stripe::Customer.create({
              # :source  => 'tok_visa',
              :source => token,
              :email => order_params[:email],
            })

            charge = Stripe::Charge.create({
              amount: @amount,
              currency: 'usd',
              customer: customer.id,
              capture: false,
          })

不收取任何费用,也不保存订单(如果卡坏了等,应该保存)

JSON 格式

{
  "error": {
    "code": "missing",
    "doc_url": "https://stripe.com/docs/error-codes/missing",
    "message": "Cannot charge a customer that has no active card",
    "param": "card",
    "type": "card_error"
  }
}

元素的 JS:

var stripe = Stripe('pk_test_xxxxxxxxxxxxxxxxxxxxx');

var elements = stripe.elements();

var style = {
  base: {
    color: '#32325d',
    lineHeight: '24px',
    fontFamily: '"Helvetica Neue", Helvetica, sans-serif',
    fontSmoothing: 'antialiased',
    fontSize: '16px',
    '::placeholder': {
      color: '#aab7c4'
    }
  },
  invalid: {
    color: '#fa755a',
    iconColor: '#fa755a'
  }
};

var card = elements.create('card', {style: style});


card.mount('#card-element');


card.addEventListener('change', function(event) {
  var displayError = document.getElementById('card-errors');
  if (event.error) {
    displayError.textContent = event.error.message;
  } else {
    displayError.textContent = '';
  }
});

var form = document.getElementById('payment_form');
form.addEventListener('submit', function(event) {
  event.preventDefault();

  stripe.createToken(card).then(function(result) {
    if (result.error) {
      var errorElement = document.getElementById('card-errors');
      errorElement.textContent = result.error.message;
    } else {
      stripeTokenHandler(result.token);
    }
  });
});

  function stripeTokenHandler(token) {
    var form = document.getElementById('payment_form');
    var hiddenInput = document.createElement('input');
    hiddenInput.setAttribute('type', 'hidden');
    hiddenInput.setAttribute('name', 'stripeToken');
    hiddenInput.setAttribute('value', token.id);
    form.appendChild(hiddenInput);

    form.submit();
  }

表格:

<%= form_for(@order, url: listing_orders_path([@listing, @listing_video]), remote: true ) do |form| %>


  <div class="form-group">
    <%= form.label :name, "Their Name" %>
    <%= form.text_field :name, class: "form-control", required: true, placeholder: "Steph" %>
  </div>
...

  <script src="https://js.stripe.com/v3/"></script>



  <div class="form-row">
      <label for="card-element">
         Credit or debit card
      </label>
    <div id="card-element" class="form-control">
    </div>

    <div id="card-errors" role="alert"></div>
  </div>
  <br>
  <div class="form-group">



  <%= form.submit  id:"button-element"  %>

 </div>

<span class="token"></span>

<% end %>

【问题讨论】:

  • 你在使用条纹元素吗?如果设置正确,它应该会给你一个有效的令牌。检查客户是否是在仪表板中使用卡片创建的。
  • 当我使用 tok_visa 时,一切都很完美。我想用实际数字进行测试,但没有成功。令牌在我收到时有效,它来自 Stripe。正在创建客户,而不是收费工作
  • @leifcr 是元素。我得到了令牌,正如您在 OP 中看到的那样,但是当我使用 :source =&gt; token, 而不是 tok_visa 时,无论出于何种原因,它都不起作用,我不明白。我看到很多人有同样的问题,no1 似乎已经解决了。
  • @uno 您可以尝试使用:source 的令牌ID 而不是令牌本身吗?
  • 尝试使用 token.id、@order.stripe_customer_token --- 都不起作用。

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


【解决方案1】:

使用 Stripe 的前端实用程序(例如结帐或收费),您可以创建令牌,它是对未附加到客户的单笔收费的授权,或源,它是信用卡的令牌化形式,可以依附于客户。

创建客户时,您会在创建客户时附加一个默认来源,所有未来的费用都会自动转到该来源。在您的前端,您需要将createToken 更改为createSource - 之后的所有内容大致相同,除了您在响应中引用的变量是source 而不是token

  stripe.createSource(card).then(function(result) {
    if (result.error) {
      var errorElement = document.getElementById('card-errors');
      errorElement.textContent = result.error.message;
    } else {
      stripeTokenHandler(result.source);
    }
  });

【讨论】:

  • Dang,不幸的是,这不起作用,为什么当我使用 tok_vis 源时会起作用,但在输入卡号本身时却不起作用?令牌也每次都在创建。
  • 为了澄清。你指的是javascript正确吗?我为你添加了 javascript 到我的 OP 中
  • 正确,我更新了我的答案以在其中包含更正的 JS。
  • 我补充说,仍然没有通过测试号码。我不明白。 “tok_visa”是如何工作的,它到底在做什么,使用测试号不会生成任何“tok_visa”生成的东西?
  • 所以我开始做一些事情。我注意到我的令牌没有被记录......我认为我的表单设置方式搞砸了......因为你可能会看到一些东西,我将它添加到我的 OP
【解决方案2】:

通过将html帖子添加到表单来解决它。

因此,它没有创建令牌。没有令牌,它什么也做不了

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-29
    • 2015-04-14
    • 2016-04-26
    • 1970-01-01
    • 1970-01-01
    • 2017-09-09
    • 1970-01-01
    相关资源
    最近更新 更多