افزونه اشتراک ووکامرس با زرین‌پال: در آزمایش ما تمدید ماه بعد پول نگرفت و ایمیلی نفرستاد

کارت سفارش تمدید ۱۰۰ هزار تومانی با لوگوی زرین‌پال که با WooCommerce Subscriptions وضعیت اشتراک را On hold و ایمیل به خریدار را هیچ نشان می‌دهد
محصولات زیر برای شماست...
جدیدترین مقالات
دسترسی سریع
فهرست محتوا

در فروشگاه آزمایشی‌مان با افزونه اشتراک ووکامرس یک اشتراک ماهانه ۱۰۰ هزار تومانی ساختیم و با درگاه آزمایشی زرین‌پال خریدیم. بعد تاریخ تمدید را به امروز آوردیم و صف کارهای افزونه را اجرا کردیم. با WooCommerce Subscriptions 9.4.1 و افزونه زرین‌پال 5.1.2، سفارش تمدید «در انتظار پرداخت» ماند، اشتراک به «On hold» رفت و هیچ ایمیلی نرفت. ایمیل یادآوری همین اشتراک، وقتی اجرایش کردیم، به خریدار نوشت که اشتراکش «automatically renew» می‌شود.

با YITH WooCommerce Subscription 4.26.3 هم سفارش تمدید ساخته شد و پولی گرفته نشد؛ فرقش این بود که اشتراک «فعال» ماند و باز ایمیلی نرفت. هر دو افزونه را در وردپرس نیاز می‌فروشیم و هر دو را روی یک فروشگاه آزمایشی، یکی پس از دیگری، آزمودیم.

راه‌حل در دو جمله جا می‌شود. در WooCommerce Subscriptions هر دو تیک «Allow manual renewals at checkout» و «Turn off automatic payments» را بزنید و اشتراک‌های قدیمی را یکی‌یکی روی «Manual Renewal» بگذارید؛ با تیک‌ها تمدید اشتراک تازه دستی می‌شود و صورتحساب ایمیل می‌شود، ولی پول خودکار گرفته نمی‌شود. در YITH یک بار تب تنظیمات («YITH > Subscription») را ذخیره کنید تا قانون تمدید پرداخت‌نشده کار کند.

«اشتراک ویژه» در فروشگاه ما نام چند محصول است. این مقاله افزونه‌هایی را می‌سنجد که برای هر دوره یک سفارش تمدید می‌سازند، نه افزونه‌هایی که فقط تعیین می‌کنند چه کسی چه محتوایی را ببیند.

آزمایش را روی فروشگاهی ساختیم که هر دو افزونه را دارد

فروشگاه آزمایشی یک وردپرس ۷٫۱٫۴ فارسی در Docker بود با ووکامرس 11.2.2، ووکامرس فارسی 10.0.7 (درگاه زیبال داخل آن است)، افزونه زرین‌پال 5.1.2 در حالت آزمایشی، افزونه پی‌پینگ 4.7.0 و قالب Twenty Twenty-Five. پی‌پینگ فقط برای دیدن فهرست درگاه‌ها فعال بود و پرداختی با آن انجام ندادیم. دو افزونه اشتراک همان فایل‌هایی است که ۱۸ آبان ۱۴۰۵ در فروشگاه می‌فروختیم: WooCommerce Subscriptions 9.4.1 و YITH WooCommerce Subscription 4.26.3. محصول آزمایشی در WooCommerce Subscriptions از نوع «Simple subscription» بود، نه یکی از طرح‌های سراسری (Storewide plans) خود افزونه.

برای تمدید، تاریخ پرداخت بعدی را به یک دقیقه قبل بردیم و صف کارهای زمان‌بندی‌شده را با wp action-scheduler run اجرا کردیم. خرید WooCommerce Subscriptions با تنظیم پیش‌فرض را روی صفحه تسویه حساب کلاسیک (کد کوتاه) انجام دادیم، چون صفحه بلوکی هیچ درگاهی نشان نمی‌داد. خریدهای YITH هم روی همان صفحه کلاسیک بود. بعضی خریدها با مرورگر بود و بعضی با همان درخواست‌های مرورگر از خط فرمان. SUMO Subscriptions را هم می‌فروشیم، ولی آزموده نشد.

زرین‌پال سازگاری با اشتراک را اعلام می‌کند و تمدید ماه بعد را نمی‌گیرد

در کد زرین‌پال 5.1.2 فهرست قابلیت‌های درگاه «subscriptions» و شش قابلیت دیگر مثل «subscription_cancellation» را دارد. در کل فایل افزونه، کدی که به اعلان تمدید WooCommerce Subscriptions گوش بدهد پیدا نکردیم. درگاه‌های زیبال و پی‌پینگ و انتقال مستقیم بانکی فقط «products» را اعلام می‌کنند. مقاله پیش‌پرداخت درباره نسخه 5.1.1 نوشته بود که زرین‌پال پشتیبانی از برداشت بعدی را در کدش اعلام کرده و پیاده نکرده است.

WooCommerce Subscriptions هنگام خرید همین فهرست را می‌خواند. اگر درگاه «subscriptions» را اعلام کرده باشد، افزونه اشتراک را خودکار ثبت می‌کند. سر تاریخ تمدید، وضعیت اشتراک را «On hold» می‌گذارد، سفارش تمدید می‌سازد و گرفتن پول را به درگاه می‌سپارد. برای زرین‌پال کسی این کار را برنمی‌دارد.

نتیجه‌ای که دیدیم این بود:

  • سفارش تمدید در وضعیت «در انتظار پرداخت» ماند.
  • اشتراک در «On hold» ماند و در ستون پرداخت بعدی خط تیره دیده شد.
  • در صندوق ایمیل آزمایشی هیچ ایمیلی نیامد.
  • همین آزمایش را با ووکامرس فارسی خاموش هم تکرار کردیم و نتیجه همان بود.
فهرست اشتراک‌ها در پیشخوان ووکامرس با سه اشتراک در وضعیت On Hold: دو اشتراک با پرداخت از طریق زرین‌پال و یکی با تمدید دستی

خریدار هم خبری نمی‌گیرد، مگر خودش وارد حسابش شود. آنجا وضعیت اشتراک «On hold» است و کنار سفارش تمدید دکمه «Pay» دیده می‌شود. صفحه پرداخت این سفارش هر چهار درگاه را فهرست کرد و یک تمدید را با زرین‌پال پرداختیم؛ سفارش «در حال انجام» شد و اشتراک دوباره فعال شد. این آزمایش با تنظیم پیش‌فرض و اشتراکی بود که خودکار ثبت شده بود.

صفحه اشتراک در حساب کاربری خریدار: وضعیت On Hold، پرداخت بعدی خالی، سفارش تمدید در انتظار پرداخت با دکمه Pay

WooCommerce Subscriptions سه روز پیش از تمدید یک ایمیل یادآوری زمان‌بندی می‌کند و در نصب تازه ما این گزینه روشن بود. آن را اجرا کردیم و برای اشتراک زرین‌پال نوشت: «Your subscription will automatically renew». یادآورها فقط در محیط «production» می‌روند. فروشگاه آزمایشی ما اول در حالت «local» بود و برای دیدن ایمیل‌ها آن را عوض کردیم. متن ایمیل‌ها انگلیسی است و نام ماه و تاریخ فارسی‌اند، چون فایل WooCommerce Subscriptions بسته زبان فارسی ندارد.

با تنظیم پیش‌فرض و این چهار درگاه، تسویه حساب بلوکی اشتراک هیچ درگاهی ندارد

با تنظیمات پیش‌فرض، WooCommerce Subscriptions درگاه‌هایی را که «subscriptions» اعلام نکرده‌اند از سبد اشتراک برمی‌دارد. برای محصول ساده، فروشگاه آزمایشی ما چهار درگاه نشان داد: انتقال مستقیم بانکی، پی‌پینگ، زرین‌پال و زیبال. برای محصول اشتراکی فقط زرین‌پال ماند.

صفحه تسویه حساب بلوکی فروشگاه آزمایشی همان یک درگاه را هم نشان نداد. داده‌ای که افزونه زرین‌پال به تسویه حساب بلوکی می‌دهد فهرست قابلیت‌ها را ندارد؛ داده زیبال و پی‌پینگ دارد. سبد اشتراک در آن صفحه «products» و «subscriptions» می‌خواست، و صفحه نوشت «هیچ روش پرداختی در دسترس نیست».

تسویه حساب بلوکی برای یک اشتراک ماهانه ۱۰۰ هزار تومانی با نوار قرمز «هیچ روش پرداختی در دسترس نیست»

فروشگاهی که زرین‌پال ندارد و فقط زیبال، پی‌پینگ یا انتقال بانکی دارد، بدتر است. وقتی زرین‌پال را خاموش کردیم، فهرست درگاه‌های سبد اشتراکی خالی بود و سبد محصول ساده همان سه درگاه را داشت. طبق کد افزونه، تیک اول بخش بعد این درگاه‌ها را برمی‌گرداند؛ این حالت را بدون زرین‌پال اجرا نکردیم.

با دو تیک تمدید دستی می‌شود و بعد از صورتحساب کاری زمان‌بندی نمی‌شود

کارت «Renewals» در تنظیمات WooCommerce Subscriptions چند تیک دارد و دو تایش به اینجا مربوط است. «Allow manual renewals at checkout» به مشتری اجازه می‌دهد با درگاهی بخرد که تمدید خودکار ندارد، و توضیحش می‌گوید این اشتراک‌ها تا وقتی مشترک وارد حسابش شود و تمدید را بپردازد «On hold» می‌مانند. «Turn off automatic payments» وقتی اولی روشن باشد پیدا می‌شود و توضیحش می‌گوید اشتراک‌های موجود تغییر نمی‌کنند.

با تیک اول، سبد اشتراک و تسویه حساب بلوکی هر چهار درگاه را نشان دادند؛ با هر دو تیک هم همین بود. اشتراک تازه‌ای که با هر دو تیک و با زرین‌پال خریدیم «دستی» ثبت شد. تمدیدش سفارش «در انتظار پرداخت» ساخت، اشتراک «On hold» شد و ایمیل «Invoice for renewal order» با پیوند «Pay Now» به خریدار رسید. این صورتحساب را در آزمایش نپرداختیم.

اشتراک‌هایی که پیش از این تیک‌ها ساخته شده‌اند خودکار می‌مانند؛ توضیح تیک دوم هم همین را می‌گوید. برای هر اشتراک قدیمی، صفحه ویرایش اشتراک را باز کنید، «Payment method» را روی «Manual Renewal» بگذارید و «بروزرسانی» را بزنید. اشتراکی که این‌طور عوض کردیم «دستی» ثبت شد.

این مسیر هزینه‌ای هم دارد. بعد از ایمیل صورتحساب، در صف کارهای زمان‌بندی‌شده کاری برای آن اشتراک نماند: یادآور دوم و لغو خودکار نداشت. فهرست «On hold» در پیشخوان کار فروشنده می‌شود.

در YITH درگاه‌ها در سبد می‌مانند و سفارش تمدید بی‌صدا می‌ماند

YITH به‌طور پیش‌فرض تمدید دستی را مجاز می‌داند. در فروشگاه آزمایشی ما هر چهار درگاه هم در سبد اشتراک بودند و هم در تسویه حساب بلوکی. YITH در فهرست درگاه‌هایی که تمدید خودکار دارند دوازده درگاه را نام می‌برد و هیچ‌کدام ایرانی نیست.

سر تاریخ تمدید با زرین‌پال، سفارش تمدید ساخته شد و «در انتظار پرداخت» ماند. اشتراک «فعال» ماند و ایمیلی نرفت. خریدار در حسابش کنار این سفارش «Pay» می‌بیند. با زیبال پرداختش کردیم، سفارش «در حال انجام» شد، تاریخ پرداخت بعدی به ماه بعد رفت و ایمیل «Subscription payment received» آمد.

اگر کسی پرداخت نکند، صفحه تنظیمات YITH («YITH > Subscription») می‌گوید بعد از ۴۸ ساعت اشتراک «Suspended» شود و ۲۰ روز بعد لغو شود. در نصب تازه این مقادیر روی صفحه دیده می‌شوند ولی در دیتابیس ذخیره نیستند. تا وقتی تب را ذخیره نکرده بودیم، سفارش پرداخت‌نشده اشتراک را تغییر نداد و اشتراک فعال ماند.

تنظیم Yith برای پرداخت‌نشدن تمدید: بعد از ۴۸ ساعت وضعیت Suspended، به مدت ۲۰ روز، پیش از لغو

بعد از یک بار «Save Options» با همین مقادیر، افزونه تعلیق را برای ۴۸ ساعت بعد و لغو را برای ۲۰ روز (۴۸۰ ساعت) بعد از آن زمان‌بندی کرد. ما نه ۴۸ ساعت صبر کردیم و نه ۲۰ روز: هر مرحله را همان لحظه اجرا کردیم، اشتراک تعلیق شد و بعد لغو شد. چهار ایمیل در صندوق آزمایشی آمد، یکی درباره تعلیق و سه ایمیل درباره لغو.

پرداخت خودکار واقعی مجوز بانکی می‌خواهد

پولی که بدون حضور خریدار گرفته شود «پرداخت مستقیم» یا «دایرکت دبیت» است. مستندات وندار را ۱۸ آبان خواندیم: کسب‌وکار اطلاعات مشتری را به وندار می‌دهد، مشتری در صفحه بانک مجوز را تأیید می‌کند، و این مجوز سقف تعداد برداشت در ماه، سقف مبلغ هر برداشت و تاریخ انقضا دارد. هر مشتری برای هر کسب‌وکار در هر بانک یک قرارداد فعال می‌تواند داشته باشد. فهرست وضعیت بانک‌ها در سایت وندار همان روز ۳۷ بانک را نشان داد که ۱۶ بانک از آن‌ها پرداخت مستقیم داشتند؛ صادرات، رفاه، مسکن، پاسارگاد، شهر و آینده در آن ۱۶ نبودند.

پیمان در صفحه خودش می‌نویسد بیش از ۱۴۰ کسب‌وکار و ۱۳ بانک دارد و برای شروع فرم درخواست دمو گذاشته است. جیبیت در صفحه تعرفه‌اش دایرکت دبیت را با کارمزد ۲ درصد برای هر تراکنش، حداقل ۲۰ هزار و حداکثر ۷۵ هزار ریال، فهرست کرده است؛ ۱۰ درصد مالیات بر ارزش افزوده هم به کارمزد اضافه می‌شود (۱۸ آبان). مقاله توضیحی زیبال نمی‌گوید آن را به فروشنده می‌فروشد. جست‌وجوی ما نشانی‌ای از مستندات زرین‌پال با عنوان «پرداخت مستقیم» نشان داد که ۱۸ آبان فقط صفحه اول مستندات را باز کرد؛ شرط‌هایش را نخواندیم و از پشتیبانی زرین‌پال بپرسید.

افزونه‌ای برای ووکامرس که این مجوز بانکی ایرانی را نگه دارد و ماه بعد برداشت کند پیدا نکردیم. در wordpress.org با نام‌هایی مثل وندار و پیمان و «direct debit» جست‌وجو کردیم؛ نتیجه‌های «direct debit» درگاه‌های خارجی مثل GoCardless و Mollie بودند. در جست‌وجوی وب فارسی هم چیزی پیدا نشد؛ افزونه وندار در wordpress.org یک درگاه معمولی است که آخرین بار ۱۴۰۲ به‌روز شده. پس تا آنجا که پیدا کردیم این کار سفارشی‌سازی است: درگاهی که مجوز را ذخیره کند و به اعلان تمدید افزونه اشتراک گوش بدهد. نام این اعلان‌ها را در کد دو افزونه دیدیم:

CODE
وردپرس نیاز
WooCommerce Subscriptions: woocommerce_scheduled_subscription_payment_GATEWAY_ID
YITH: ywsbs_pay_renew_order_with_GATEWAY_ID

به جای GATEWAY_ID شناسه خود درگاه می‌نشیند، مثلاً «WC_ZPal» برای زرین‌پال. اگر چنین درگاهی را برای فروشگاه‌تان می‌خواهید، خدمات پشتیبانی فنی وردپرس را ببینید یا درخواست را مستقیم ثبت کنید.

کدام را بردارید

WooCommerce Subscriptions 9.4.1YITH 4.26.3
درگاه‌ها در سبد اشتراک، تنظیم پیش‌فرضفقط زرین‌پال؛ در تسویه حساب بلوکی هیچ‌کدامهر چهار درگاه
سفارش تمدیددر انتظار پرداختدر انتظار پرداخت
وضعیت اشتراک بعد از ساخت سفارش تمدیدOn holdفعال
ایمیل به خریدار هنگام ساخت سفارش تمدیدبا زرین‌پال و تنظیم پیش‌فرض: هیچ. با تمدید دستی: صورتحساب با «Pay Now»هیچ
اگر کسی پرداخت نکندOn hold می‌ماند و کاری زمان‌بندی نمی‌شودبعد از ذخیره تنظیم: تعلیق بعد از ۴۸ ساعت و لغو ۲۰ روز بعد (ما مرحله‌ها را همان لحظه اجرا کردیم)

برای فروشگاهی که با زرین‌پال می‌فروشد، WooCommerce Subscriptions را با دو تیک و ایمیل صورتحسابش می‌پسندیم: خریدار صورتحساب می‌گیرد و فروشنده در پیشخوان وضعیت «On hold» را می‌بیند. این ایمیل انگلیسی است. YITH برای کسی مناسب است که بدون تغییر تنظیم درگاه‌ها را در سبد می‌خواهد و مهلت و لغو خودکار هم می‌خواهد، به شرط اینکه تب تنظیماتش را یک بار ذخیره کند و بداند که در آزمایش ما سفارش تمدیدش ایمیلی نفرستاد. برای گرفتن خودکار پول هر ماه با این درگاه‌ها، راهی که پیدا کردیم مجوز بانکی و کد سفارشی است.

برای دیدن وضع فروشگاه خودتان با WooCommerce Subscriptions، فهرست اشتراک‌ها را باز کنید. در فروشگاه آزمایشی ما پیوند «در انتظار بررسی» (همان On hold) اشتراک‌هایی را که در این وضعیت بودند جدا می‌کرد. اشتراکی که با زرین‌پال در این وضعیت است ممکن است تمدید پرداخت‌نشده داشته باشد. آزموده نشد: SUMO Subscriptions، یک برداشت واقعی با مجوز بانکی، و درگاه‌هایی که روی فروشگاه آزمایشی نبودند.

پرسش‌های متداول

آیا افزونه اشتراک ووکامرس با زرین‌پال تمدید را خودکار می‌گیرد؟

در آزمایش ما با WooCommerce Subscriptions 9.4.1 و زرین‌پال 5.1.2 نه. سفارش تمدید «در انتظار پرداخت» ماند و اشتراک به On hold رفت. با YITH 4.26.3 هم سفارش تمدید ساخته شد و پولی گرفته نشد.

چرا در تسویه حساب اشتراک می‌نویسد هیچ روش پرداختی در دسترس نیست؟

در آزمایش ما با تنظیم پیش‌فرض WooCommerce Subscriptions، سبد اشتراک فقط درگاه‌هایی را نگه می‌داشت که «subscriptions» را اعلام کرده‌اند. زرین‌پال 5.1.2 آن را اعلام می‌کند ولی در تسویه حساب بلوکی دیده نشد. با تیک «Allow manual renewals at checkout» هر چهار درگاه آمدند.

تمدید دستی را در WooCommerce Subscriptions چطور روشن کنم؟

در «ووکامرس > پیکربندی > Subscriptions» و کارت «Renewals» هر دو تیک «Allow manual renewals at checkout» و «Turn off automatic payments» را بزنید. تیک دوم فقط اشتراک‌های تازه را دستی می‌کند؛ اشتراک قدیمی را در صفحه ویرایش خودش روی «Manual Renewal» بگذارید.

اگر خریدار سفارش تمدید YITH را نپردازد چه می‌شود؟

در آزمایش ما تا وقتی تب تنظیمات YITH ذخیره نشده بود، اشتراک فعال ماند. بعد از یک بار «Save Options» با مقادیر پیش‌فرض صفحه، افزونه تعلیق را برای ۴۸ ساعت بعد و لغو را برای ۲۰ روز بعد از آن زمان‌بندی کرد؛ ما مرحله‌ها را همان لحظه اجرا کردیم.

برای ووکامرس افزونه‌ای هست که هر ماه خودکار از حساب بانکی برداشت کند؟

ما ۱۸ آبان ۱۴۰۵ در wordpress.org و جست‌وجوی وب فارسی افزونه‌ای که مجوز بانکی ایرانی را نگه دارد و برداشت کند پیدا نکردیم؛ نتیجه‌های «direct debit» درگاه‌های خارجی بودند. پرداخت مستقیم با مجوزی گرفته می‌شود که مشتری در بانک تأیید می‌کند؛ تا آنجا که پیدا کردیم، برای ووکامرس باید برایش کد نوشت.

تصویر سمانه جعفری
سمانه جعفری
پیشنهاد میکنیم این مقالات را هم بخوانید

دیدگاه یا پرسش خود را بنویسید