• 1401/10/21

مشکل ایجاد درگاه پرداخت :

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

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

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

  • 1401/10/21
  • ساعت 16:04

و اینکه اصلا میشه اینطوری درست کرد یا نه

 


  • 1401/10/22
  • ساعت 14:50

سلام دوست من

کد رو از سایت زرین پال دریافت کردین؟

منظورم merchantid هستش


  • 1401/10/22
  • ساعت 16:18

اگه همون کد اولیه منظورتونه بله 


  • 1401/10/23
  • ساعت 22:46

نه دوست من

باید توی سایت zarinpal ثبت نام کنین و بعد از فرایند احراز هویت و ارسال مدارک به شما کدی داده میشه تحت عنوان MerchantId که یک کلید تقریبا 48 کاراکتری هستش

منظورم این کد هستش


  • 1401/10/24
  • ساعت 22:52

بله دریافت کردم 


  • 1401/10/25
  • ساعت 21:47

اطلاعاتی که از سمت سرور zarinpal در درخواست اول دریافت میکنین رو لاگ بزنین و ببینین چه خطایی بهتون میده


  • 1401/10/26
  • ساعت 01:46

متاسفانه پروژه ام داخل pycharm کار نمی کنه و خطای ویرژال ایوایمنت میده و من با اینکه چند بار حذف  و نصب کردم داخل pycharm کار نمی کنه و نمیتونم لاگ بزنم


  • 1401/10/27
  • ساعت 00:04

دستور python manage.py runserver رو اجرا کنین دوست من نیازی به pycharm نیست

پروژه رو اجرا کنین ، با استفاده از دستور print خروجی رو لاگ بزنین


  • 1401/10/27
  • ساعت 01:17

  authority = float(req.json()['data']['authority'])

TypeError: list indices must be integers or slices, not str


  • 1401/10/28
  • ساعت 12:10

چرا دستور authority رو به float تبدیل کردین دوست من؟

این مقدار اصلا عدد نیست و نباید به عدد تبدیل کنین


  • 1401/10/28
  • ساعت 12:37

الان برداشتم این خطا رو میاره

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


  • 1401/10/28
  • ساعت 12:39

کد 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 %}

  • 1401/10/28
  • ساعت 23:40

به نظر مشکل از اینترنت هستش دوست من

درخواست شما به سمت درگاه ارسال میشه اما time out میگیره

لطفا بدون فیلترشکن و یا بدون پروکسی تست کنین


  • 1401/10/29
  • ساعت 01:17

امتحان کردم این دفعه این خطا رو میاره

 authority = req.json()['data']['authority']

TypeError: list indices must be integers or slices, not str


  • 1401/10/30
  • ساعت 22:53

این خطا رو زمانی میده که نتیجه ی درخواست شما به سمت درگاه درست نیست و نمیتونه به json تبدیل کنه و یا نتیجه ی ارسالی حاوی مقدار data و یا autority نیست

لطفا درخواست رو با postman ارسال کنین و بررسی کنین که چه نتیجه ای رو دریافت میکنین

 


  • 1401/11/01
  • ساعت 11:32

سلام پس اگه میشه بگین چجوری میتونم یک مدل بسازم که بعد از 5 دقیقه داخلش پاک بشه


  • 1401/11/01
  • ساعت 22:20

یک فیلد تاریخ در نظر بگیرین برای دیتای مورد نظر و زمان 5 دقیقه بعد رو بهش بدین موقع ذخیره سازی

هر وقت داشتین با دیتا کار میکردین ، بررسی کنین که تاریخی که براش در نظر گرفتین از زمان جاری بزرگتر باشه