# تأیید پرداخت (Payment Verification)

متد verify به شما امکان می‌دهد تا پس از بازگشت کاربر از درگاه پرداخت، وضعیت تراکنش را بررسی و تأیید کنید. با استفاده از این متد، شما می‌توانید صحت پرداخت و جزئیات تراکنش را بررسی کنید و در صورت موفقیت‌آمیز بودن پرداخت، آن را تأیید نمایید.

این متد معمولاً پس از بازگشت کاربر به آدرس callback_url که در درخواست پرداخت مشخص شده بود، استفاده می‌شود.

# پارامترهای تأیید پرداخت

در جدول زیر پارامترهای ارسالی به متد verify و توضیحات مربوط به آن‌ها آورده شده است:

نام پارامتر نوع الزامی توضیحات
authority String بله کد authority که پس از درخواست پرداخت از درگاه دریافت می‌شود و در کوئری استرینگ بازگشت به callback_url وجود دارد.
amount Integer بله مبلغ پرداختی که باید با مبلغ اصلی تراکنش مطابقت داشته باشد. این مقدار باید از دیتابیس استخراج شود.

# نمونه کد Python

در ادامه، نمونه کدی ارائه شده است که ابتدا کد authority از کوئری استرینگ دریافت می‌شود، سپس مبلغ مربوط به این authority از دیتابیس استخراج شده و برای تأیید به زرین‌پال ارسال می‌شود:

from zarinpal import ZarinPal
from utils.Config import Config
authority = "Your Authority"    
status = "OK"
def get_amount_from_database(authority):
    return 20000
def verify_payment(authority, status):
    if status == "OK":
        amount = get_amount_from_database(authority)
        if amount:
            try:
                config = Config(
                    merchant_id= "Your merchant code", 
                    sandbox=True, 
                )
                zarinpal = ZarinPal(config)    
                response = zarinpal.verifications.verify({
                    "amount": amount,
                    "authority": authority,
                })
                if response["data"]["code"] == 100:
                    print("Payment Verified:")
                    print("Reference ID:", response["data"]["ref_id"])
                    print("Card PAN:", response["data"]["card_pan"])
                    print("Fee:", response["data"]["fee"])
                elif response["data"]["code"] == 101:
                    print("Payment already verified.")
                else:
                    print("Transaction failed with code:", response["data"]["code"])
            except Exception as e:
                print("Payment Verification Failed:", e)
        else:
            print("No Matching Transaction Found For This Authority Code.")
    else:
        print("Transaction was cancelled or failed.")
if __name__ == "__main__":
    verify_payment(authority, status)