ошибка django-stripe: "Год истечения срока действия вашей карты недействителен" при тестировании, независимо от того, введен год - PullRequest
0 голосов
/ 12 марта 2019

Я использую полосу 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 обрабатывается, передается и принимается без проблем.

1 Ответ

1 голос
/ 12 марта 2019

exp_year = request.POST.get ('exp_year', False)

У вас есть дополнительный пробел после exp_year в вызове POST.get.

...