📋 تفکیک گزارش تغییرات (Changelog) در ۲ نسخه اخیر
پایش لحظهای تغییرات، وصلههای امنیتی و ویژگیهای اضافه شده در نسخه کنونی و نسخه پیشین از مخزن رسمی WordPress.org:
نگارش فعلی (Latest)
نسخه 5.1.1
• رفع مشکل امنیتی مربوط به حذف دورزن توکن امنیتی هاردکد شده در کنترلکننده AJAX تغییر روش پرداخت در صفحه تسویه حساب برای جلوگیری از درخواستهای احراز هویتنشده
📦 نگارش قبلی (Previous)
نسخه 5.1.0
• رفع آسیبپذیری جعل درخواست بینسایتی در عملیاتهای بررسی مجدد دستی تراکنش و استعلام جزئیات تراکنش در بخش مدیریتی
• اعمال استانداردهای کدنویسی و ارتقای امنیت شامل ریدایرکتهای امن، پاکسازی ورودیها، ایمنسازی خروجیها و دامنه ترجمه
📑 فهرست عناوین و سرفصلهای این مقاله:
معماری فنی و سازوکار اتصال به درگاه زرینپال در ووکامرس
افزونه درگاه پرداخت زرینپال ووکامرس با اسلاگ zarinpal-woocommerce-payment-gateway به عنوان یک پل ارتباطی استاندارد میان چرخه خرید ووکامرس و زیرساخت پردازشی زرینپال عمل میکند. این پلاگین با بهرهگیری از کلاس WC_Payment_Gateway وردپرس توسعه یافته و فرآیند تسویه حساب را به صورت ساختاریافته مدیریت میکند. هنگامی که کاربر سفارشی را ثبت میکند، افزونه یک درخواست HTTP امن (از طریق توابع داخلی wp_remote_post) به سمت وبسرویسهای زرینپال ارسال میکند تا توکن یکتا یا همان Authority دریافت شود.
پس از دریافت توکن، کاربر به درگاه پرداخت هدایت میشود و پس از انجام تراکنش، شبکه شاپرک کاربر را به صفحه بازگشت (Callback URL) در سایت وردپرسی هدایت میکند. در این مرحله، افزونه وظیفه دارد پارامترهای ارسالی از جمله Status و Authority را اعتبارسنجی کرده و درخواست تایید تراکنش (Verification) را به سرورهای زرینپال ارسال نماید. این چرخه دو مرحلهای تضمین میکند که هیچ تراکنشی بدون تایید نهایی سرور به عنوان پرداخت موفق ثبت نشود.
از دیدگاه مهندسی نرمافزار، مدیریت وضعیت سفارشها در این افزونه بهینهسازی شده است تا از ایجاد سفارشهای معلق (Pending) جلوگیری کند. اگر ارتباط با سرور زرینپال در حین بازگشت به دلیل اختلالات شبکه قطع شود، مکانیزمهای لاگگیری افزونه (Logging) به مدیر سایت اجازه میدهند تا تراکنشهای ناموفق یا ناقص را ردیابی و وضعیت مالی مشتری را بررسی کند.
مدیریت هوکها، فیلترها و توسعهپذیری در اکوسیستم وردپرس
به عنوان یک توسعهدهنده وردپرس، آگاهی از هوکهای (Hooks) اکشن و فیلترهای موجود در افزونه zarinpal-woocommerce-payment-gateway برای شخصیسازی رفتار درگاه حیاتی است. این افزونه با استفاده از هوکهای استاندارد ووکامرس مانند woocommerce_receipt_[gateway_id] و woocommerce_update_options_payment_gateways_ به توسعهدهندگان اجازه میدهد تا منطق پیشفرض پردازش پرداخت را بر اساس نیازهای خاص پروژه بازنویسی یا توسعه دهند.
به عنوان مثال، با استفاده از فیلترهای سفارشی میتوانید دادههای ارسالی به درگاه از جمله توضیحات تراکنش (Description) یا متادیتای سفارش را پیش از ارسال درخواست پرداخت تغییر دهید. این قابلیت به ویژه زمانی کاربردی است که بخواهید اطلاعات تکمیلی مانند شماره موبایل کاربر، کدملی یا شناسههای اختصاصی انبارداری را به همراه مبلغ تراکنش به سمت زرینپال ارسال نمایید تا در پنل مدیریت مالی قابل پیگیری باشد.
همچنین، هوکهای مربوط به بازگشت از درگاه امکان اجرای کدهای سفارشی (مانند صدور خودکار لایسنس، ثبت نام در دورهها یا ارسال پیامک از طریق سرویسهای پیامکی وردپرس) را پس از تایید قطعی تراکنش فراهم میکنند. این رویدادمحور بودن، هماهنگی کامل افزونه را با سایر پلاگینهای سازگار با ووکامرس تضمین مینماید.
چالشهای هاستینگ ایرانی و بهینهسازی پایداری تراکنشها
زیرساخت میزبانی وب در ایران دارای چالشهای خاصی نظیر محدودیتهای توابع cURL، بستهبودن پورتهای خروجی روی برخی سرورها و خطاهای SSL/TLS است. افزونه زرینپال برای غلبه بر این مشکلات، وابستگی شدیدی به توابع استاندارد وردپرس دارد تا سازگاری حداکثری با نسخههای مختلف PHP (به ویژه نسخههای ۷.۴، ۸.۰، ۸.۱ و ۸.۲) حفظ شود. فعال بودن ماژول cURL و باز بودن پورتهای استاندارد HTTPS برای ارتباط با دامنه زرینپال از پیشنیازهای غیرقابل اجتناب سرور است.
یکی از مشکلات رایج در هاستینگهای اشتراکی، تداخل در ذخیرهسازی Session یا کش شدن صفحات تسویه حساب توسط افزونههای کشینگ (مانند LiteSpeed Cache یا WP Rocket) است. برای جلوگیری از این مشکل، صفحاتی که فرآیند پرداخت و بازگشت از درگاه در آنها انجام میشود باید به طور کامل از کشینگ معاف (Exclude) شوند. عدم رعایت این نکته میتواند باعث ایجاد خطای «تراکنش تکراری» یا «توکن نامعتبر» برای کاربران گردد.
تنظیم صحیح منطقه زمانی سرور (Timezone) و همگامسازی ساعت سرور با ساعت رسمی کشور نیز از دیگر نکات فنی مهم است. اختلاف زمانی میان سرور میزبان وردپرس و سرورهای زرینپال میتواند در اعتبارسنجی توکنهای زماندار اختلال ایجاد کند و منجر به شکست تراکنشهای کاملاً قانونی شود.
امنیت، مدیریت توکنها و جلوگیری از حملات بازپخش (Replay Attacks)
امنیت تراکنشهای مالی در وردپرس نیازمند رعایت استانداردهای سختگیرانه است. افزونه زرینپال با استفاده از توکنهای یکبار مصرف (Authority) از حملات بازپخش و دستکاری مبالغ در سمت کاربر جلوگیری میکند. مبلغ نهایی همیشه بر اساس دیتابیس ووکامرس و سمت سرور محاسبه میشود و هیچگاه به دادههای ارسال شده از فرمهای سمت فرانتاند (HTML/JavaScript) اعتماد نمیشود.
پیادهسازی صحیح پروتکل HTTPS روی تمام صفحات فروشگاه، به ویژه صفحه تسویه حساب و صفحه بازگشت از درگاه، برای جلوگیری از حملات Man-in-the-Middle ضروری است. توکنهای پرداخت حاوی اطلاعات حساسی هستند که اگر در بستری ناامن منتقل شوند، امنیت مالی فروشگاه و مشتری به خطر میافتد. همچنین، دسترسی به لاگهای تراکنشها در پوشه امن ووکامرس باید به دقت مدیریت شود تا اطلاعات تراکنشها در دسترس کاربران غیرمجاز قرار نگیرد.
استفاده از سیستم اعتبارسنجی دو مرحلهای (Verification) پس از بازگشت کاربر از شاپرک، نقطه قوت امنیتی این افزونه محسوب میشود. حتی اگر کاربر با استفاده از ابزارهای دستکاری مرورگر اقدام به تغییر وضعیت بازگشت به سایت کند، سرور وردپرس با ارسال یک درخواست مستقیم سرور به سرور (Server-to-Server) به زرینپال، صحت وضعیت پرداخت را استعلام میکند و هیچ سفارشی بدون پول واقعی به وضعیت تکمیلشده تغییر پیدا نمیکند.
❓ سوالات متداول درباره درگاه پرداخت زرینپال ووکامرس
پاسخ به سوالات و چالشهای فنی وبمسترها، طراحان سایت و مدیران سرور درباره افزونه درگاه پرداخت زرینپال ووکامرس در این بخش گردآوری شده است:
این مشکل معمولاً به دلیل مسدود بودن پورتهای خروجی سرور، عدم پاسخگویی تابع wp_remote_post به دلیل تنظیمات فایروال هاست، یا مسدود شدن درخواستهای Server-to-Server در سرور رخ میدهد. بررسی لاگهای خطای ووکامرس و تست اتصال cURL به دامنه زرینپال از طریق ابزارهای عیبیابی هاست راهگشا است.
شما میتوانید از هوک اکشن اختصاصی ووکامرس برای تغییر وضعیت سفارش به پردازششده یا تکمیلشده (مانند woocommerce_order_status_completed) استفاده کنید. این هوک تضمین میکند که کدهای سفارشی شما پس از تایید قطعی تراکنش توسط زرینپال اجرا شوند.
بله. اگر صفحه بازگشت یا همان صفحه تسویه حساب ووکامرس توسط افزونههایی مانند LiteSpeed Cache یا WP Rocket کش شود، ممکن است پاسخ درگاه به درستی پردازش نشده و کاربر با خطای صفحه منقضی شده یا توکن نامعتبر مواجه شود. حتماً این صفحات را از کش کردن معاف کنید.
این خطا زمانی رخ میدهد که واحد پول پیشفرض ووکامرس (مثلاً تومان یا ریال) با واحد پولی که در پنل زرینپال یا تنظیمات افزونه تعریف شده است همخوانی نداشته باشد، یا افزونههای تخفیف و مالیات، مبلغ نهایی را در آخرین لحظه تغییر داده باشند که نیازمند بازبینی تنظیمات ارزی است.