Я использую полосу django с видом для создания заряда, и, если это успешно, сохраняю некоторые локальные элементы в БД.
Я получаю ошибку:
CardError at /relevant/url
Request req_tdxeiuSSMmJi89: Your card's expiration year is invalid.
Первоначально у меня был год, чтобы использовать весь год.Я попытался изменить это, чтобы использовать только последние 2 цифры, и когда я наткнулся на этот вопрос, казалось, что это решило бы проблему, однако это не имело никакого значения.
В моемПанель инструментов полосы, я вижу, что передается полосе, и, похоже, ошибка вызвана тем, что год карты не был передан полосе правильно.
С панели инструментов моей полосы:
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_year не проходит, когда exp_month обрабатывается, передается и принимается без проблем.