ali-zahedi / az-iranian-bank-gateways

درگاه اتصال به بانک های ایرانی ( درگاه پرداخت بانک ملی ایران،بانک سامان، بانک ملت، درگاه پرداخت زرین پال و ... ) با استفاده از پایتون
MIT License
506 stars 87 forks source link

CRITICAL:root:callbackUrl is not valid #133

Open Stink-Po opened 2 weeks ago

Stink-Po commented 2 weeks ago

سلام در اول تشکر میکنم از پکیج خوبتون و خسته نباشید من با توضیحات ویدیو پیش رفتم و تنظیماتم رو در اینجا میزارم ولی کلا دارم این خطا رو میگیرم که callbackUrl is not valid و زمانی که از sampelpayment هم افدام میکنم همین خطا رو میگیرم : BankGatewayAutoConnectionFailed at /bankgateways/sample-payment/ callbackUrl is not valid

setting :

"GATEWAYS": {
 "ZIBAL": {
            "MERCHANT_CODE": "zibal",
        },
},
    "IS_SAMPLE_FORM_ENABLE": True,  # اختیاری و پیش فرض غیر فعال است
    "DEFAULT": "ZIBAL",
    "CURRENCY": "IRR",  # اختیاری
    "TRACKING_CODE_QUERY_PARAM": "tc",  # اختیاری
    "TRACKING_CODE_LENGTH": 16,  # اختیاری
    "SETTING_VALUE_READER_CLASS": "azbankgateways.readers.DefaultReader",  # اختیاری
    "BANK_PRIORITIES": [

    ],  # اختیاری

    "IS_SAFE_GET_GATEWAY_PAYMENT": True,  # اختیاری، بهتر است True بزارید.
    "CUSTOM_APP": None,  # اختیاری
}

USE_X_FORWARDED_HOST = True
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https'
```)
 urls:

urlpatterns = [ path('admin/', admin.site.urls), path("bankgateways/", az_bank_gateways_urls()), path("go-to-gateway/", send_request), path("callback-gateway/", verify, name="callback"), ]


views :

def send_request(request):
    # خواندن مبلغ از هر جایی که مد نظر است
    amount = 100000
    # تنظیم شماره موبایل کاربر از هر جایی که مد نظر است
    user_mobile_number = "+989112221234"  # اختیاری
    print(request.build_absolute_uri(reverse("callback")))
    factory = bankfactories.BankFactory()
    try:
        bank = (
            factory.auto_create()
        )  # or factory.create(bank_models.BankType.BMI) or set identifier
        bank.set_request(request)
        bank.set_amount(amount)
        # یو آر ال بازگشت به نرم افزار برای ادامه فرآیند
        callback_url = request.build_absolute_uri(reverse("callback"))
        print(callback_url)
        bank.set_client_callback_url(callback_url)
        bank.set_mobile_number(user_mobile_number)

        # در صورت تمایل اتصال این رکورد به رکورد فاکتور یا هر چیزی که بعدا بتوانید ارتباط بین محصول یا خدمات را با این
        # پرداخت برقرار کنید.
        bank_record = bank.ready()

        # هدایت کاربر به درگاه بانک
        context = bank.get_gateway()
        return render(request, "orders/redirect_to_bank.html", context=context)
    except AZBankGatewaysException as e:
        print(e.args)
        print(e)
        return render(request, "orders/redirect_to_bank.html")

def verify(request):
    print("calling call back")
    print(f"TRACKING_CODE_QUERY_PARAM: {settings.TRACKING_CODE_QUERY_PARAM}")
    tracking_code = request.GET.get(settings.TRACKING_CODE_QUERY_PARAM, None)
    print(tracking_code)
    if not tracking_code:
        logging.debug("این لینک معتبر نیست.")
        return HttpResponse("این لینک معتبر نیست.")

    try:
        bank_record = bank_models.Bank.objects.get(tracking_code=tracking_code)
    except bank_models.Bank.DoesNotExist:
        logging.debug("این لینک معتبر نیست.")
        raise HttpResponse("این لینک معتبر نیست.")

    # در این قسمت باید از طریق داده هایی که در بانک رکورد وجود دارد، رکورد متناظر یا هر اقدام مقتضی دیگر را انجام دهیم
    if bank_record.is_success:
        # پرداخت با موفقیت انجام پذیرفته است و بانک تایید کرده است.
        # می توانید کاربر را به صفحه نتیجه هدایت کنید یا نتیجه را نمایش دهید.
        return HttpResponse("پرداخت با موفقیت انجام شد.")

    # پرداخت موفق نبوده است. اگر پول کم شده است ظرف مدت ۴۸ ساعت پول به حساب شما بازخواهد گشت.
    return HttpResponse(
        "پرداخت با شکست مواجه شده است. اگر پول کم شده است ظرف مدت ۴۸ ساعت پول به حساب شما بازخواهد گشت."
    )