django-stripe错误:无论输入什么年份,​​测试时“您的卡的失效年份无效”

时间:2019-03-11 23:22:52

标签: python django django-views stripe-payments

我正在使用带有视图的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无法通过。

1 个答案:

答案 0 :(得分:1)

  

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

exp_year之后的POST.get调用中有多余的空间。