سلام وقت بخیر
من ویدیو 130 رو تا دقیقه 7:33 دیدم و بعد از اینکه خواستم صفحه پرداخت رو مثل ویدیو بیارم، ارور زیر رو دریافت کردم:
'dict' object has no attribute 'headers'
این کد ویو من هستش:
if settings.SANDBOX:
sandbox = 'sandbox'
else:
sandbox = 'www'
MERCHANT = 'd****d93-47*1-4e*0-****-fb8***15'
ZP_API_REQUEST = f"https://{sandbox}.zarinpal.com/pg/rest/WebGate/PaymentRequest.json"
ZP_API_VERIFY = f"https://{sandbox}.zarinpal.com/pg/rest/WebGate/PaymentVerification.json"
ZP_API_STARTPAY = f"https://{sandbox}.zarinpal.com/pg/StartPay/"
# amount = 1000 # Rial / Required
description = "توضیحات مربوط به تراکنش را در این قسمت وارد کنید" # Required
phone = '' # Optional
# Important: need to edit for realy server.
CallbackURL = 'http://127.0.0.1:8080/dashboard/order/verify-payment/'
@login_required
def request_payment(request: HttpRequest):
current_order, created = Order.objects.get_or_create(is_paid=False, user_id=request.user.id) # سبد خرید کاربر
total_price = current_order.calculate_total_price()
if total_price == 0:
return redirect(reverse('user_basket'))
data = {
"MerchantID": MERCHANT,
"Amount": total_price * 10,
"Description": description,
# "Phone": phone,
"CallbackURL": CallbackURL,
}
data["Amount"] = float(total_price * 10)
data = json.dumps(data)
# set content length by data
headers = {'content-type': 'application/json', 'content-length': str(len(data))}
try:
response = requests.post(ZP_API_REQUEST, data=data, headers=headers, timeout=10)
if response.status_code == 200:
response = response.json()
if response['Status'] == 100:
return {'status': True, 'url': ZP_API_STARTPAY + str(response['Authority']),
'authority': response['Authority']}
else:
return {'status': False, 'code': str(response['Status'])}
return response
except requests.exceptions.Timeout:
return {'status': False, 'code': 'timeout'}
except requests.exceptions.ConnectionError:
return {'status': False, 'code': 'connection error'}
@login_required
def verify_payment(request: HttpRequest, authority):
print(request.user)
print(request.user.id)
current_order, created = Order.objects.get_or_create(is_paid=False, user_id=request.user.id) # سبد خرید کاربر
total_price = current_order.calculate_total_price()
data = {
"MerchantID": MERCHANT,
"Amount": total_price,
"Authority": authority,
}
data["Amount"] = float(total_price * 10)
data = json.dumps(data)
# set content length by data
headers = {'content-type': 'application/json', 'content-length': str(len(data))}
response = requests.post(ZP_API_VERIFY, data=data, headers=headers)
if response.status_code == 200:
response = response.json()
if response['Status'] == 100:
return {'status': True, 'RefID': response['RefID']}
else:
return {'status': False, 'code': str(response['Status'])}
return response
من تمامی تیکه کدهایی که در آموزش داخل این کد زرین پال استفاده شده بود رو هم برداشتم و همینطوری تست کردم. باز هم این ارور دریافت میکنم
تو جزییات ارور، به یه middleware اشاره کرده بود اونو کامنت کردم به یکی دیگه اشاره کرد و اونو هم کامنت کردم اما باز ارور میده
کدها رو تا دقیقه 7:33 که این ارور رو میگیرم چک میکنم به نظر مشکلی ندارن
با چت جی پی برای رفع این مشکل اقدام کردم و کدم رو به این صورت تغییر داد و درست شد:
def request_payment(request):
current_order, created = Order.objects.get_or_create(is_paid=False, user_id=request.user.id) # سبد خرید کاربر
total_price = current_order.calculate_total_price()
if total_price == 0:
return redirect(reverse('user_basket'))
data = {
"MerchantID": MERCHANT,
"Amount": total_price * 10,
"Description": description,
# "Phone": phone,
"CallbackURL": CallbackURL,
}
data["Amount"] = float(total_price * 10)
data = json.dumps(data)
# set content length by data
headers = {'content-type': 'application/json', 'content-length': str(len(data))}
try:
response = requests.post(ZP_API_REQUEST, data=data, headers=headers, timeout=10)
if response.status_code == 200:
response = response.json()
if response['Status'] == 100:
return redirect(ZP_API_STARTPAY + str(response['Authority']))
else:
return JsonResponse({'status': False, 'code': str(response['Status'])})
return JsonResponse(response)
except requests.exceptions.Timeout:
return JsonResponse({'status': False, 'code': 'timeout'})
except requests.exceptions.ConnectionError:
return JsonResponse({'status': False, 'code': 'connection error'})
در ویدیو 131 دقیقه 12:40 مشکل ذخیره تاریخ در payment_date که به صورت یه عدد خیلی بزرگ ذخیره میشد رو نگفتید چطور حلش کنیم. ویدیو قطع میشه و دوباره آموزش از سر گرفته میشه و در این مورد چیزی گفته نمیشه
سلام دوست من
خوشحالم که مشکلتون برطرف شده
مقدار تاریخ رو از داخل نرم افزار تغییر ندین دوست من
پروژه رو اجرا کنین و از ادمین تاریخ رو تنظیم کنین چرا که دیتا از نرم افزار به صورت عدد ذخیره میشه اما ادمین اون رو به صورت تاریخ ذخیره میکنه
ممنونم
خواهش میکنم دوست من
موفق باشین :)