【发布时间】: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 => token,而不是tok_visa时,无论出于何种原因,它都不起作用,我不明白。我看到很多人有同样的问题,no1 似乎已经解决了。 -
@uno 您可以尝试使用
:source的令牌ID 而不是令牌本身吗? -
尝试使用 token.id、@order.stripe_customer_token --- 都不起作用。
标签: ruby-on-rails ruby stripe-payments