سلام می خواستم کاری کنم که داخل یک اینپوت یک قیمت بزنم و یک نام هم برای اون انتخاب کنم و وقتی روی دکمه بزنم داخل لینک قیمت بیاد و بعد وقتی روی دکمه پرداخت بزنم اون قیمت رو بگیره و به درگاه پرداخت وصل بشه من می خوام داخل views می خوام اون قیمت رو دریافت کنم که میگه نباید str باشه و وقتی تبدیل به int هم می کنم باز هم خطا میده باید چکار کنم
خطایی که وقتی str هست میاد

خطایی که وقتی int هست میاد

و اینکه اصلا میشه اینطوری درست کرد یا نه
سلام دوست من
کد رو از سایت زرین پال دریافت کردین؟
منظورم merchantid هستش
اگه همون کد اولیه منظورتونه بله
نه دوست من
باید توی سایت zarinpal ثبت نام کنین و بعد از فرایند احراز هویت و ارسال مدارک به شما کدی داده میشه تحت عنوان MerchantId که یک کلید تقریبا 48 کاراکتری هستش
منظورم این کد هستش
بله دریافت کردم
اطلاعاتی که از سمت سرور zarinpal در درخواست اول دریافت میکنین رو لاگ بزنین و ببینین چه خطایی بهتون میده
متاسفانه پروژه ام داخل pycharm کار نمی کنه و خطای ویرژال ایوایمنت میده و من با اینکه چند بار حذف و نصب کردم داخل pycharm کار نمی کنه و نمیتونم لاگ بزنم
دستور python manage.py runserver رو اجرا کنین دوست من نیازی به pycharm نیست
پروژه رو اجرا کنین ، با استفاده از دستور print خروجی رو لاگ بزنین
authority = float(req.json()['data']['authority'])
TypeError: list indices must be integers or slices, not str
چرا دستور authority رو به float تبدیل کردین دوست من؟
این مقدار اصلا عدد نیست و نباید به عدد تبدیل کنین
الان برداشتم این خطا رو میاره
HTTPSConnectionPool(host='api.zarinpal.com', port=443): Max retries exceeded with url: /pg/v4/payment/request.json (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x000002C521680400>: Failed to establish a new connection: [Errno 11002] getaddrinfo failed'))
کد view:
def send_request(request):
requestss: HttpRequest = request
if amount is None:
return JsonResponse({
'error': 'error'
})
req_data = {
"merchant_id": MERCHANT,
"amount": requestss.GET.get('pay'),
"callback_url": CallbackURL,
"description": description,
#"metadata": {"mobile": mobile, "email": email}
}
req_header = {"accept": "application/json",
"content-type": "application/json'"}
req = requests.post(url=ZP_API_REQUEST, data=json.dumps(
req_data), headers=req_header)
authority = req.json()['data']['authority']
if len(req.json()['errors']) == 0:
return redirect(ZP_API_STARTPAY.format(authority=authority))
else:
e_code = req.json()['errors']['code']
e_message = req.json()['errors']['message']
return HttpResponse(f"Error code: {e_code}, Error Message: {e_message}")
def verify(request):
requestss: HttpRequest = request
t_status = request.GET.get('Status')
t_authority = request.GET['Authority']
if request.GET.get('Status') == 'OK':
req_header = {"accept": "application/json",
"content-type": "application/json'"}
req_data = {
"merchant_id": MERCHANT,
"amount": requestss.GET.get('pay'),
"authority": t_authority
}
req = requests.post(url=ZP_API_VERIFY, data=json.dumps(req_data), headers=req_header)
if len(req.json()['errors']) == 0:
t_status = req.json()['data']['code']
if t_status == 100:
req_result = req.json()['data']['ref_id']
context = {
'success': req_result
}
return render(request, 'order_module/payment_result.html',context)
elif t_status == 101:
context={'info': f'این تراکنش قبلا ثبت شده است' }
return render(request, 'order_module/payment_result.html', context)
else:
context={'error': str(req.json()['data']['message'])}
return render(request, 'order_module/payment_result.html',context)
else:
e_code = req.json()['errors']['code']
e_message = req.json()['errors']['message']
context={'error': e_message}
return render(request, 'order_module/payment_result.html', context)
else:
context = {'error': 'پرداخت با خطا مواجه شد'}
return render(request, 'order_module/payment_result.html', context)
کد html:
{% extends 'shared/_layout.html' %}
{% load static %}
{% block title %}
پرداخت
{% endblock %}
{% block content %}
<form method='get'>
<input type='number' id='pay_in' name='pay'/>
<button>ثبت قیمت</button>
<a class="btn btn-default check_out" href="{% url 'request_home' %}">پرداخت</a>
{% endblock %}به نظر مشکل از اینترنت هستش دوست من
درخواست شما به سمت درگاه ارسال میشه اما time out میگیره
لطفا بدون فیلترشکن و یا بدون پروکسی تست کنین
امتحان کردم این دفعه این خطا رو میاره
authority = req.json()['data']['authority']
TypeError: list indices must be integers or slices, not str
این خطا رو زمانی میده که نتیجه ی درخواست شما به سمت درگاه درست نیست و نمیتونه به json تبدیل کنه و یا نتیجه ی ارسالی حاوی مقدار data و یا autority نیست
لطفا درخواست رو با postman ارسال کنین و بررسی کنین که چه نتیجه ای رو دریافت میکنین
سلام پس اگه میشه بگین چجوری میتونم یک مدل بسازم که بعد از 5 دقیقه داخلش پاک بشه
یک فیلد تاریخ در نظر بگیرین برای دیتای مورد نظر و زمان 5 دقیقه بعد رو بهش بدین موقع ذخیره سازی
هر وقت داشتین با دیتا کار میکردین ، بررسی کنین که تاریخی که براش در نظر گرفتین از زمان جاری بزرگتر باشه