Django 创建的Stripe customer没有信用卡信息
我正在尝试将stripe设置为我的支付网关,但遇到了一些问题 我希望我的用户输入他们的信用卡信息,以便以后能够向他们收费。(又名创建客户) 输入所有信息并按enter键后,我的客户将在Stripe.com上创建,但credt卡信息不会保存(因此我以后无法对其收费)。 在我的数据库中,代币被保存,当我试图向客户收费时,我从Stripe api得到了一个答案“不能收费,用户没有信用卡” 这是我的密码: views.pyDjango 创建的Stripe customer没有信用卡信息,django,django-forms,stripe-payments,Django,Django Forms,Stripe Payments,我正在尝试将stripe设置为我的支付网关,但遇到了一些问题 我希望我的用户输入他们的信用卡信息,以便以后能够向他们收费。(又名创建客户) 输入所有信息并按enter键后,我的客户将在Stripe.com上创建,但credt卡信息不会保存(因此我以后无法对其收费)。 在我的数据库中,代币被保存,当我试图向客户收费时,我从Stripe api得到了一个答案“不能收费,用户没有信用卡” 这是我的密码: views.py import stripe def paiements(request):
import stripe
def paiements(request):
stripe.api_key = "sk_test_mytestapikey"
utilisateur = request.user
cc_save = Stripetoken.objects.filter(utilisateur= request.user).exists() #check if the user have already a stripe token.
if request.method == 'POST':
token_cc = request.POST.get('stripeToken') #request.POST['stripeToken'] give me an error.
customer = stripe.Customer.create(
card = token_cc,
description = utilisateur.email,
email = utilisateur.email
)
Stripetoken.objects.create(utilisateur= request.user, token = customer.id , description= request.user.email) #save the customer information and token to charge later on
return HttpResponseRedirect('/frontprop/tb/') # Redirect after POST
args = {}
args.update(csrf(request))
args['cc_save'] = cc_save
return render_to_response('b_param_paiement.html', args)
和我的html页面:
<script type="text/javascript" src="https://js.stripe.com/v2/"></script>
<!-- jQuery is used only for this example; it isn't required to use Stripe -->
<script type="text/javascript">
// This identifies your website in the createToken call below
Stripe.setPublishableKey('pk_test_withmyid');
var stripeResponseHandler = function(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 {
// token contains id, last4, and card type
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 re-submit
$form.get(0).submit();
}
};
jQuery(function($) {
$('#payment-form').submit(function(e) {
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;
});
});
</script>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js">
</script>
<script>
$(document).ready(function(){
$("#toggle").click(function(){
$("#cbinfo").toggle();
});
});
</script>
<form action="/frontprop/tb/param/paiements/" method="POST" id="payment-form"> {% csrf_token %}
<span class="payment-errors"></span>
<div class="form-row">
<label>
<span>Votre numero de carte bancaire:</span>
<input class="form-control" type="text" size="20" data-stripe="number"/>
</label>
</div>
<div class="form-row">
<label>
<span>CVC:</span>
<input class="form-control" type="text" size="4" data-stripe="cvc"/>
</label>
</div>
<div class="form-inline">
<label>
<span>Expiration (MM/YYYY):</span> <br>
<input class="form-control" type="text" size="2" data-stripe="exp-month"/>
</label>
<span> / </span>
<input class="form-control" type="text" size="4" data-stripe="exp-year"/>
</div>
<br>
<button id="stripebutton" class="btn btn-primary" type="submit">Enregistrer la carte</button>
</form>
//这将在下面的createToken调用中标识您的网站
Stripe.setPublishableKey('pk_test_with myid');
var stripeResponseHandler=函数(状态、响应){
var$form=$(“#付款单”);
if(response.error){
//在表单上显示错误
$form.find('.payment errors').text(response.error.message);
$form.find('button').prop('disabled',false);
}否则{
//令牌包含id、last4和卡类型
var token=response.id;
//将令牌插入表单,以便将其提交到服务器
$form.append($('').val(标记));
//并重新提交
$form.get(0.submit();
}
};
jQuery(函数($){
$(“#付款单”)。提交(功能(e){
var$form=$(此);
//禁用“提交”按钮以防止重复单击
$form.find('button').prop('disabled',true);
Stripe.card.createToken($form,stripeResponseHandler);
//阻止使用默认操作提交表单
返回false;
});
});
$(文档).ready(函数(){
$(“#切换”)。单击(函数(){
$(“#cbinfo”).toggle();
});
});
{%csrf_令牌%}
银行点菜编号:
CVC:
到期日(年月日):
/
点菜登记
仅供参考:我已经遵循了这一点
感谢您的帮助您需要创建一个免费的计划并将其分配给该计划,以后您可以根据需要向该客户收取一次性费用。如Tom所述,加载/发布表单时出现Javascript问题。 我必须在stripe.js之后移到顶部
谢谢Tom,我已经准备好了:)从您关于stripeToken给您带来错误的评论来看,您的JavaScript似乎不太正常。在加载页面/提交表单时,请注意浏览器控制台是否有错误。谢谢Tom,通过查看浏览器控制台(我刚刚在您的评论中发现)您是对的Jquery脚本有错误,我将Jquery脚本标记放在顶部,它正在工作!感谢您尝试解决我的问题,但这确实是一些javascript干扰。