Локальная переменная 'verify_payment' ссылается перед присвоением

У меня локальная переменная переназначается перед присвоением, и я перепробовал много способов, которые я могу использовать, чтобы исправить это. любая помощь будет очень признательна

позвольте мне показать некоторый код

views.py (ошибка после вершины второго оператора if)

def call_back_url(request):
    reference = request.GET.get('reference')
    # We need to fetch the reference from PAYMENT
    check_pay = PayHistory.objects.filter(paystack_charge_id=reference).exists()
    if check_pay == False:
        # This means payment was not made error should be thrown here...
        print("Error")
    else:
        payment = PayHistory.objects.get(paystack_charge_id=reference)
        # We need to fetch this to verify if the payment was successful.
        def verify_payment(request):
            url = 'https://api.paystack.co/transaction/verify/'+reference
            headers = {
                'Authorization': 'Bearer '+settings.PAYSTACK_SECRET_KEY,
                'Content-Type' : 'application/json',
                'Accept': 'application/json',
                }
            datum = {
                "reference": payment.paystack_charge_id
                }
            x = requests.get(url, data=json.dumps(datum), headers=headers)
            if x.status_code != 200:
                return str(x.status_code)
            
            results = x.json()
            return results
    initialized = verify_payment(request)
    if initialized['data']['status'] == 'success':
        PayHistory.objects.filter(paystack_charge_id=initialized['data']['reference']).update(paid=True)
        new_payment = PayHistory.objects.get(paystack_charge_id=initialized['data']['reference'])
        instance = Membership.objects.get(id=new_payment.payment_for.id)
        sub = UserMembership.objects.filter(reference_code=initialized['data']['reference']).update(membership=instance)
        user_membership = UserMembership.objects.get(reference_code=initialized['data']['reference'])
        Subscription.objects.create(user_membership=user_membership, expires_in=dt.now().date() + timedelta(days=user_membership.membership.duration))
        return redirect('subscribed')
    return render(request, 'payment.html')


def subscribed(request):
    return render(request, 'subscribed.html')

traceback

System check identified 1 issue (0 silenced).
November 26, 2021 - 18:50:42
Django version 3.2.9, using settings 'dexxapikprj.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
Error
Internal Server Error: /sub/payment/
Traceback (most recent call last):
  File "C:\Users\Destiny\Desktop\DexxaPik\venv\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
    response = get_response(request)
  File "C:\Users\Destiny\Desktop\DexxaPik\venv\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\Destiny\Desktop\DexxaPik\dexxapikprj\subscription\views.py", line 85, in call_back_url
    initialized = verify_payment(request)
UnboundLocalError: local variable 'verify_payment' referenced before assignment
[26/Nov/2021 18:50:44] "GET /sub/payment/ HTTP/1.1" 500 66028

try:

def verify_payment(request):
    url = 'https://api.paystack.co/transaction/verify/'+reference
    headers = {
        'Authorization': 'Bearer '+settings.PAYSTACK_SECRET_KEY,
        'Content-Type' : 'application/json',
        'Accept': 'application/json',
        }
    datum = {
        "reference": payment.paystack_charge_id
        }
    x = requests.get(url, data=json.dumps(datum), headers=headers)
    if x.status_code != 200:
        return str(x.status_code)
    
    results = x.json()
    return results

def call_back_url(request):
    reference = request.GET.get('reference')
    # We need to fetch the reference from PAYMENT
    check_pay = PayHistory.objects.filter(paystack_charge_id=reference).exists()
    if check_pay == False:
        # This means payment was not made error should be thrown here...
        print("Error")
    else:
        payment = PayHistory.objects.get(paystack_charge_id=reference)
        # We need to fetch this to verify if the payment was successful.

    initialized = verify_payment(request)
    if initialized['data']['status'] == 'success':
        PayHistory.objects.filter(paystack_charge_id=initialized['data']['reference']).update(paid=True)
        new_payment = PayHistory.objects.get(paystack_charge_id=initialized['data']['reference'])
        instance = Membership.objects.get(id=new_payment.payment_for.id)
        sub = UserMembership.objects.filter(reference_code=initialized['data']['reference']).update(membership=instance)
        user_membership = UserMembership.objects.get(reference_code=initialized['data']['reference'])
        Subscription.objects.create(user_membership=user_membership, expires_in=dt.now().date() + timedelta(days=user_membership.membership.duration))
        return redirect('subscribed')
    return render(request, 'payment.html')

def subscribed(request):
    return render(request, 'subscribed.html')

Вернуться на верх