az-iranian-bank-gateways icon indicating copy to clipboard operation
az-iranian-bank-gateways copied to clipboard

AttributeError at /bankgateways/callback/ خطای

Open azhidecode opened this issue 3 years ago • 7 comments

با سلام موقع برگشت از درگاه تو حالت دیباگ با این خطا مواجه شدم یک پروژه خالی دیگه هم ران کردم و قدم به قدم با توضیحات ویدیویی جلو رفتم و باز هم این خطا وجود داشت ممنون میشم راهنمایی بفرمایید

AttributeError at /bankgateways/callback/ "NoneType" object has no attribute "callback_url"

azhidecode avatar Nov 18 '21 12:11 azhidecode

#views from azbankgateways.exceptions import AZBankGatewaysException import logging from django.http import HttpResponse, Http404 from django.urls import reverse from azbankgateways import bankfactories, models as bank_models, default_settings as settings

def go_to_gateway_view(request): # خواندن مبلغ از هر جایی که مد نظر است amount = 1000 # تنظیم شماره موبایل کاربر از هر جایی که مد نظر است user_mobile_number = '+989112221234' # اختیاری

factory = bankfactories.BankFactory()
try:
    bank = factory.create()  # or factory.create(bank_models.BankType.BMI) or set identifier
    bank.set_request(request)
    bank.set_amount(amount)
    # یو آر ال بازگشت به نرم افزار برای ادامه فرآیند
    bank.set_client_callback_url('/callback-gateway/')
    bank.set_mobile_number(user_mobile_number)  # اختیاری

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

    # هدایت کاربر به درگاه بانک
    return bank.redirect_gateway()
except AZBankGatewaysException as e:
    logging.critical(e)
    # TODO: redirect to failed page.
    raise e

def callback_gateway_view(request): tracking_code = request.GET.get(settings.TRACKING_CODE_QUERY_PARAM, None) if not tracking_code: logging.debug("این لینک معتبر نیست.") raise Http404

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

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

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

azhidecode avatar Nov 18 '21 12:11 azhidecode

#settings AZ_IRANIAN_BANK_GATEWAYS = { 'GATEWAYS': {

    'IDPAY': {
        'MERCHANT_CODE': '9db51849-7cd9-42ab-8b14-b28c585988d1',
        'METHOD': 'POST',  # GET or POST
        'X_SANDBOX': 1,  # 0 disable, 1 active
    },

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

],  # اختیاری

}

USE_X_FORWARDED_HOST = True SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')

azhidecode avatar Nov 18 '21 12:11 azhidecode

#urls from azbankgateways.urls import az_bank_gateways_urls from django.contrib import admin from django.urls import path from payment import views

urlpatterns = [ path('admin/', admin.site.urls), path('bankgateways/', az_bank_gateways_urls()), path('go-to-gateway/', views.go_to_gateway_view), path('callback-gateway/', views.callback_gateway_view)

]

azhidecode avatar Nov 18 '21 12:11 azhidecode

image

azhidecode avatar Nov 18 '21 12:11 azhidecode

@azhidecode سلام وقت بخیر لطفا در تنظیمات گزینه

AZ_IRANIAN_BANK_GATEWAYS = {
...
'IS_SAMPLE_FORM_ENABLE': True,
...
}

قرار دهید

سپس از این آدرس برای پرداخت امتحان کنید

http://127.0.0.1:8000/bankgateways/sample-payment/

نتیجه رو هم به اشتراک بگذارید لطفا

ali-zahedi avatar Nov 18 '21 20:11 ali-zahedi

ممنون از جوابتون ولی مشکل حل نشدش تنظیماتی که عرض کردید از قبل روی همون ست شده بود تا درگاه بصورت دیباگ میره ولی برای کالبک مشکل داره :(( بازم تشکر

azhidecode avatar Nov 19 '21 05:11 azhidecode

@azhidecode ممکن هست نسخه جدید رو پول بگیرید و ببینید مشکل رفع شده یا نه؟ بنظر میاد مورد رفع شده. ورژن 1.6.14

ali-zahedi avatar Jan 14 '22 06:01 ali-zahedi

سلام خسته نباشید منم تو همین قسمت کالبک مشکل دارم و ارور میگیرم

Reverse for '/callback-gateway/' not found. '/callback-gateway/' is not a valid view function or pattern name. هر کاری میکنم میگه ادرس درست نیست با هر روشی امتحان کردم حتی اون ریورس رو هم حظف کردم ولی باز خطا میده و میگه ادرس اشتباهه ولی ادرس درسته

miladamini avatar Apr 18 '23 04:04 miladamini

طبق این ایشو #62 و اینکه از ورزن ۱.۶.۱۴ به بعد گزارش نشده، احتمالا این مشکل مرتفع شده، در صورتی که هنوز معتقد هستید این مشکل پا برجاست میتونید این ایشو رو مجدد از همینجا باز کنید.

ali-zahedi avatar Apr 19 '23 05:04 ali-zahedi

سلام بر اقای زاهدی عزیز ورژن az bank.... من 1.9 هستش در تنظیمات هم 'IS_SAFE_GET_GATEWAY_PAYMENT': True, و در urls هم ادرسهای زیر هست:

from azbankgateways.urls import az_bank_gateways_urls from peyment_app.views import go_to_gateway_view , callback_gateway_view ....

path('bankgateways/', az_bank_gateways_urls()),
path('logout/', include('home_app.urls')),
path('go-to-gateway/',go_to_gateway_view),
path('callback_gateway/', callback_gateway_view),

در views.py bank.set_client_callback_url(reverse('/callback_gatewa/'))

هم برای زیبال و هم برای ای دی پی چک کردم باز هم همین ایراد دو میده

خطا در call back

3257525958 avatar Aug 07 '23 15:08 3257525958

@3257525958 سلام و ادب. حالت تست رو فعال کنید. حالت سیف رو غیر فعال کنید. 'IS_SAMPLE_FORM_ENABLE': True, 'IS_SAFE_GET_GATEWAY_PAYMENT': False,

به این آدرس برید: http://127.0.0.1:8000/bankgateways/sample-payment/ حالت دیباگ زیبال و یا آی دی پی رو فعال کنید. برای حالت دیباگ مود زیبال خاطرم هست که باید مرچنت کد رو زیبال میزاشتید یا همچین چیزی. اگه با پشتیبانی تماس گرفتید حتما اینجا هم شیر کنید که حالت دیباگ رو چطوری میشه فعال کرد و یا با یک مرج ریکوئست باهامون شیرش کنید. نتیجه رو اینجا شیر کنید.

ali-zahedi avatar Aug 08 '23 05:08 ali-zahedi

@3257525958

سلام وقت بخیر بهتر بود متن خطا رو قرار میدادید تا بهتر متوجه مشکل بشیم ولی با توجه به توضیحاتی که دادید فکر میکنم خطایی که دریافت میکنید چیزی شبیه به زیر است

NoReverseMatch at /main/ Reverse for 'callback/' not found. 'callback/' is not a valid view function or pattern name.

که دلیل به وجود اومدن این خطا استفاده نادرست از reverse است. درتوضیحات ارایه شده توسط خود شما گفته شده که set_client_callback_url بصورت زیر تنظیم شده

bank.set_client_callback_url(reverse('/callback_gatewa/'))

این اشتباه است و نحوه صحیح بصورت زیر است

bank.set_client_callback_url(reverse('callback_gatewa'))

MrMRM1 avatar Aug 08 '23 05:08 MrMRM1

سلام جناب زاهدی ... اینادرس به درستی عمل میکنه http://127.0.0.1:8000/bankgateways/sample-payment/ ولی هنوز همون ایراد داده میشه و

Reverse for '/callback-gateway/' not found. '/callback-gateway/' is not a valid view function or pattern name. نمیدونم چیکار کنم هر چه هم گشتم چیزی پیدا نکردم

3257525958 avatar Aug 12 '23 20:08 3257525958

من دقیقا همونطور که توی فیلم شما گفتید انجام دادم چرا درست کار نمیکنه؟

3257525958 avatar Aug 12 '23 20:08 3257525958

همون ایرادی که روستمون گفت رو میده من به جای bank.set_client_callback_url(reverse('/callback_gatewa/'))

یک مزتبه هم bank.set_client_callback_url(reverse('callback_gatewa')) رو قرار دادم ولی فرقی نکرد

3257525958 avatar Aug 12 '23 20:08 3257525958

بجای bank.set_client_callback_url(reverse('/callback_gatewa/')) هم bank.set_client_callback_url(reverse('callback_gatewa')) گداشتم باز فرقی نکرد

3257525958 avatar Aug 12 '23 20:08 3257525958

@3257525958 به نظر همونطور که MrMRM1 اشاره کرد موردتون از کال بک هست و باید اسم کال بکی که تنظیم کردید رو درست قرار بدید.

ali-zahedi avatar Aug 13 '23 12:08 ali-zahedi