Я в начальной стадии построения формы оплаты с помощью фотографии Stripe. Я использую библиотеку jquery.payment для форматирования своего месяца и года https://github.com/stripe/jquery.payment.Stripe - параметр «exp_month» должен быть целым числом (вместо этого, является 02) в Django View
Я создал exp
поле ввода для сбора данных, но для того, чтобы получить Stripe требуется exp_month
и exp_year
поля я создал их в качестве новых переменных и взял значение моего exp
поля и нарезанное значения мне нужно, то прошло на мой взгляд.
Правильные значения передаются моему представлению, но когда он достигает stripe.Token.create
, я получаю ошибку stripe.error.CardError: Request req_A16AvRkITlz3Oi: The 'exp_month' parameter should be an integer (instead, is 02).
в консоли. Замечание: Эта форма отлично работала, когда у меня было поле для exp_month
и exp_year
, но насколько это весело? :)
Ниже приведен код для обзора:
Аякса
var fields = {
number: 'null',
cvc: 'null',
exp: 'null',
exp_month: 'null',
exp_year: 'null'
};
$('#plaqueFormBTN').click(function (e) {
e.preventDefault();
fields.number = $('#id_number').val();
fields.exp = $('#id_exp').val();
fields.cvc = $('#id_cvc').val();
$('#loader').show();
var exp_month = fields.exp.slice(0, 3);
var exp_year = fields.exp.slice(5);
console.log(exp_month);
console.log(exp_year);
$.ajax({
type: 'POST',
data: {
csrfmiddlewaretoken: getCookie('csrftoken'),
number: fields.number,
exp: fields.exp,
exp_month: exp_month,
exp_year: exp_year,
cvc: fields.cvc
},
url: $('#plaqueForm').attr('action'),
cache: false,
...
вид
def plaque_order_form(request):
if request.method == 'POST':
form = PlaqueOrderForm(data=request.POST)
if form.is_valid():
number = request.POST.get('number', '')
cvc = request.POST.get('cvc', '')
exp_month = request.POST.get('exp_month', '')
exp_year = request.POST.get('exp_year', '')
subject = 'New Plaque Order'
from_email = settings.DEFAULT_FROM_EMAIL
recipient_list = [from_email]
# Token is created using Stripe.js or Checkout!
# Get the payment token submitted by the form:
token = stripe.Token.create(
card={
'number': number,
'exp_month': exp_month,
'exp_year': exp_year,
'cvc': cvc
},
)
...
Преобразование к 'int' работал @danyamachine упоминалось, но я согласен с вами по поводу необходимости использовать очищенные данные, но у меня всегда были проблемы заставить его работать надежно. Я изменил свои поля для форматирования, как 'exp_year = form.cleaned_data.get («exp_year»)', и я получил сообщение об ошибке 'stripe.error.InvalidRequestError: Запрос req_A1C8GvSrpG3It3: отсутствуют необходимые параметры: exp_year. ' –