我正在使用带有视图的django-strip创建费用,如果成功,则将一些本地项目保存到数据库中。
我遇到错误:
CardError at /relevant/url
Request req_tdxeiuSSMmJi89: Your card's expiration year is invalid.
最初,我将自己的年份设置为使用整个年份。我尝试将其更改为仅使用最后两位数字,并且当我遇到this问题时,似乎可以解决该问题,但是没有任何区别。
在条纹仪表板中,我可以看到正在传递给条纹的内容,并且该错误似乎是由于卡年未正确传递到条纹所致。
从我的条纹仪表板中:
Request POST body
{
"card": {
"number": "************4242",
"exp_month": "10",
"exp_year": "0",
"cvc": "*********"
}
}
我正在扩展视图中的表单,使其具有用于处理付款的字段,因为我不会将该信息保存到数据库中,因此这些字段与模型不对应。
我的视图:
def payment_order(request):
card_num = request.POST.get('card_num', False)
exp_month = request.POST.get('exp_month', False)
exp_year = request.POST.get('exp_year ', False)
cvc = request.POST.get('cvc', False)
email = request.POST.get('email', False)
cart = Cart(request)
if request.method == 'POST':
form = OrderPayForm(request.POST)
if form.is_valid():
token = stripe.Token.create(
card={
"number": card_num,
"exp_month": int(exp_month),
"exp_year": int(exp_year),
"cvc": cvc
},
)
charge = stripe.Charge.create(
amount=cart.item['price'],
currency="usd",
source=token,
description="order for "+ email
)
if charge['captured'] == True:
order = form.save()
for item in cart:
OrderItem.objects.create(
order=order,
product=item['product'],
price=item['price'],
)
return render(request, 'orders/created.html', {'order': order})
form = OrderPayForm()
return render(request, 'orders/create.html', {'form': form})
我的扩展表格:
card_num = forms.CharField(max_length=16)
exp_month = forms.CharField(max_length=2)
exp_year = forms.CharField(max_length=2)
cvc = forms.CharField(max_length=3)
class Meta(OrderForm.Meta):
fields = OrderForm.Meta.fields + ['card_num', 'exp_month', 'exp_year', 'cvc']
我不确定为什么会发生这种情况,因为我表单中的其他字段正在处理中并可以正常通过。具体来说,我不明白为什么在处理,传递和接收exp_month而没有问题时exp_year无法通过。
答案 0 :(得分:1)
exp_year = request.POST.get('exp_year',False)
exp_year之后的POST.get调用中有多余的空间。