#python #django
Вопрос:
извините за опечатки, я использую перевод
Я хочу интегрировать виртуальный pos для способа оплаты, но ошибка, которую я получил, выглядит следующим образом
Ошибка; объект ‘dict’ не имеет атрибута ‘META’
views.py:
@login_required(login_url="/user/login")
def payment(request):
options = {
'api_key': 'api_key',
'secret_key': 'secret_key',
'base_url': 'sandbox-api.iyzipay.com'
}
payment_card = {
'cardHolderName': 'John Doe',
'cardNumber': '5528790000000008',
'expireMonth': '12',
'expireYear': '2030',
'cvc': '123',
'registerCard': '0'
}
buyer = {
'id': 'BY789',
'name': 'John',
'surname': 'Doe',
'gsmNumber': ' 905350000000',
'email': 'email@email.com',
'identityNumber': '74300864791',
'lastLoginDate': '2015-10-05 12:43:35',
'registrationDate': '2013-04-21 15:12:09',
'registrationAddress': 'Nidakule Göztepe, Merdivenköy Mah. Bora Sok. No:1',
'ip': '85.34.78.112',
'city': 'Istanbul',
'country': 'Turkey',
'zipCode': '34732'
}
address = {
'contactName': 'Jane Doe',
'city': 'Istanbul',
'country': 'Turkey',
'address': 'Nidakule Göztepe, Merdivenköy Mah. Bora Sok. No:1',
'zipCode': '34732'
}
basket_items = [
{
'id': 'BI101',
'name': 'Binocular',
'category1': 'Collectibles',
'category2': 'Accessories',
'itemType': 'PHYSICAL',
'price': '0.3'
},
{
'id': 'BI102',
'name': 'Game code',
'category1': 'Game',
'category2': 'Online Game Items',
'itemType': 'VIRTUAL',
'price': '0.5'
},
{
'id': 'BI103',
'name': 'Usb',
'category1': 'Electronics',
'category2': 'Usb / Cable',
'itemType': 'PHYSICAL',
'price': '0.2'
}
]
request = {
'locale': 'tr',
'conversationId': '123456789',
'price': '1',
'paidPrice': '1.2',
'currency': 'TRY',
'installment': '1',
'basketId': 'B67832',
'paymentChannel': 'WEB',
'paymentGroup': 'PRODUCT',
'paymentCard': payment_card,
'buyer': buyer,
'shippingAddress': address,
'billingAddress': address,
'basketItems': basket_items
}
payment = iyzipay.Payment().create(request, options)
return render(request, "cart/payment.html")
коды брокерских фирм;
https://github.com/iyzico/iyzipay-python
Может быть, вы можете осудить меня за попытку выполнить такую работу, не зная основ 🙂
Ответ №1:
Вы изменили значение запроса в своем коде в строке
request = {'locale': 'tr',...
Это приводит к появлению строки
return render(request, "cart/payment.html")
чтобы использовать измененное значение запроса вместо значения в
def payment(request):
Попробуйте изменить имя переменной вашего запроса на что-то другое
экс:
request_api = {'locale': 'tr',...
payment = iyzipay.Payment().create(request_api, options)
Ответ №2:
Вы переопределяете request
переменную своим пользовательским диктом, из-за чего вы получаете ошибку метаданных.
Измените имя переменной dict request
на что-то request_payload
вроде :
request_payload = {
'locale': 'tr',
'conversationId': '123456789',
'price': '1',
'paidPrice': '1.2',
'currency': 'TRY',
'installment': '1',
'basketId': 'B67832',
'paymentChannel': 'WEB',
'paymentGroup': 'PRODUCT',
'paymentCard': payment_card,
'buyer': buyer,
'shippingAddress': address,
'billingAddress': address,
'basketItems': basket_items
}
payment = iyzipay.Payment().create(request_payload, options)
return render(request, "cart/payment.html")
Вот и все.
Комментарии:
1. Спасибо за оба комментария, моя проблема решена