اخیرا گزارش هایی مبنی بر مشکل درگاه های بانکی ایرانی از جمله درگاه بانک ملت اپن کارت زمان بازگشت از درگاه ارسال شده است. به طوری که زمان callback مشکلات متعددی مانند عدم واریز به حساب ، سفید شدن صفحات و .. در اپن کارت گزارش شده است.
تیم کارشناسی آی سبد در این مقاله راه حلی برای رفع این مشکل ارائه داده است که روی چند سایت هم تست شده است.
جهت رفع خطای کروم نیاز به تغییر مقدار کوکی samesite به مقدار none می باشد. برای انجام تغییرات و رفع مشکل درگاه اپن کارت با کروم مراحل زیر را انجام دهید.
1- فایل زیر را در حالت ویرایش باز کنید:
catalog/controller/startup/session.php
کدهای زیر را پیدا کنید:
setcookie($this->config->get('session_name'), $this->session->getId(), ini_get('session.cookie_lifetime'), ini_get('session.cookie_path'), ini_get('session.cookie_domain'));
و با کدهای پایین جایگزین و ذخیره کنید:
setcookie($this->config->get('session_name'), $this->session->getId(), ini_get('session.cookie_lifetime'), ini_get('session.cookie_path') . '; SameSite=none', ini_get('session.cookie_domain'), ini_get('session.cookie_secure'));
2- فایل زیر را در حالت ویرایش باز کنید:
system/framework.php
کدهای زیر را پیدا کنید: (نسخه اپن کارت 3)
setcookie($config->get('session_name'), $session->getId(), ini_get('session.cookie_lifetime'), ini_get('session.cookie_path'), ini_get('session.cookie_domain'));
و با کدهای پایین جایگزین و ذخیره کنید:
setcookie($config->get('session_name'), $session->getId(), ini_get('session.cookie_lifetime'), ini_get('session.cookie_path') . '; SameSite=none', ini_get('session.cookie_domain'), ini_get('session.cookie_secure'));
3- اس اس ال (SSL) را فعال کنید.
4- ریدایرکت های لازم را بر روی فایل htaccess اعمال کنید ، از کد زیر استفاده کنید:
کدهای زیر را بالای / RewriteBase قرار دهید.
RewriteCond %{HTTP_HOST} ^www.isabad.com$ [NC] RewriteRule ^(.*)$ https://isabad.com/$1 [R=301,L] RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
دقت کنید که به جای isabad.com آدرس دامین سایت خود را قرار دهید.
برای نسخه های کمتر از 2.3 نیز فایل system/library/session.php را در حالت ویرایش باز کرده و کد زیر را به حالت توضیح در آورید:
ini_set(‘session.cookie_httponly’, ‘On’);
سپس بعد از خط session_start(); کد زیر را اضافه کنید:
setcookie(session_name(), session_id(), ini_get('session.cookie_lifetime'), ini_get('session.cookie_path').'; SameSite=None', ini_get('session.cookie_domain'), true, ini_get('session.cookie_httponly'));
همچنین بعد از کد return session_destroy(); کد زیر را اضافه کنید:
setcookie(session_name(), session_id(), ini_get('session.cookie_lifetime'), ini_get('session.cookie_path').'; SameSite=None', ini_get('session.cookie_domain'), true, ini_get('session.cookie_httponly'));
دیدگاهتان را بنویسید
برای نوشتن دیدگاه باید وارد بشوید.