• 1402/03/10

ارور در انتقال به صفحه پرداخت :

سلام وقت بخیر

من ویدیو 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
  • 1402/03/11
  • ساعت 11:43

من تمامی تیکه کدهایی که در آموزش داخل این کد زرین پال استفاده شده بود رو هم برداشتم و همینطوری تست کردم. باز هم این ارور دریافت میکنم


  • 1402/03/11
  • ساعت 11:52

تو جزییات ارور، به یه middleware اشاره کرده بود اونو کامنت کردم به یکی دیگه اشاره کرد و اونو هم کامنت کردم اما باز ارور میده


  • 1402/03/11
  • ساعت 11:55

کدها رو تا دقیقه 7:33 که این ارور رو میگیرم چک میکنم به نظر مشکلی ندارن


  • 1402/03/11
  • ساعت 15:02

با چت جی پی برای رفع این مشکل اقدام کردم و کدم رو به این صورت تغییر داد و درست شد:

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'})


  • 1402/03/11
  • ساعت 16:52

در ویدیو 131 دقیقه 12:40 مشکل ذخیره تاریخ در payment_date که به صورت یه عدد خیلی بزرگ ذخیره میشد رو نگفتید چطور حلش کنیم. ویدیو قطع میشه و دوباره آموزش از سر گرفته میشه و در این مورد چیزی گفته نمیشه


  • 1402/03/12
  • ساعت 10:24

سلام دوست من

خوشحالم که مشکلتون برطرف شده

مقدار تاریخ رو از داخل نرم افزار تغییر ندین دوست من

پروژه رو اجرا کنین و از ادمین تاریخ رو تنظیم کنین چرا که دیتا از نرم افزار به صورت عدد ذخیره میشه اما ادمین اون رو به صورت تاریخ ذخیره میکنه


  • 1402/03/13
  • ساعت 08:58

ممنونم


  • 1402/03/15
  • ساعت 12:15

خواهش میکنم دوست من

موفق باشین :)


logo-samandehi