پرداخت در محل ووکامرس: کارمزد پست، وضعیت سفارش و فعال‌سازی فقط برای چند شهر

بسته مقوایی با برچسب سفارش ووکامرس: پرداخت ثبت نشده، وضعیت در حال انجام
محصولات زیر برای شماست...
جدیدترین مقالات
دسترسی سریع
فهرست محتوا

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

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

نتیجه‌های آزمایش از یک فروشگاه آزمایشی در Docker آمده است: وردپرس 7.1.2 با پیشخوان فارسی، ووکامرس 11.1.2، ووکامرس فارسی 10.0.5 و قالب Twenty Twenty-Five. استان و مبلغ را در تسویه حساب بلوکی دیدیم و شهر را در هر دو، بلوکی و کلاسیک. کارمزد را از نرخنامه شرکت ملی پست خواندیم و زمان واریز را از صفحه تیپاکس و تاپین. تحویل واقعی بسته با یک شرکت حمل را امتحان نکردیم.

پرداخت در محل با پس‌کرایه یکی نیست

در پس‌کرایه فقط هزینه ارسال در مقصد پرداخت می‌شود و در پرداخت در محل (COD) پول کالا. تاپین در COD هزینه ارسال را هم از گیرنده می‌گیرد و تفاوت را در صفحه خودش این‌طور نوشته است: «در روش پرداخت پس کرایه، تنها هزینه ارسال در محل از مشتری دریافت خواهد شد؛ اما در روش پرداخت COD، هزینه کالا و هزینه ارسال هر دو در زمان تحویل و توسط سفیر دریافت می‌شود.»

تیپاکس پس‌کرایه را از COD جدا می‌داند و می‌نویسد استفاده هم‌زمان از هر دو ممکن است. اگر هزینه ارسال را خودتان بدهید، تاپین آن حالت را «ارسال رایگان» می‌نامد و گیرنده فقط ارزش مرسوله را به سفیر می‌دهد.

کارمزد پست در جدول آمده است و تیپاکس ۲۴ تا ۷۲ ساعت بعد از تحویل پول را می‌دهد

نرخنامه ۱۴۰۵ شرکت ملی پست (نسخه‌ای که تاپین روی سایت خودش گذاشته) برای «تحویل در مقابل دریافت بها (COD)» سقف کارمزد را می‌گذارد. ما صفحه ۵ را به تصویر تبدیل کردیم، جدول را از روی تصویر خواندیم و ریال را به تومان برگرداندیم.

بهای کالاسقف کارمزد COD
تا ۱ میلیون تومان۱ درصد بهای کالا
بیش از ۱ تا ۵ میلیون۱۵ هزار تومان
بیش از ۵ تا ۱۰ میلیون۲۰ هزار تومان
بیش از ۱۰ تا ۲۰ میلیون۳۰ هزار تومان
بیش از ۲۰ تا ۵۰ میلیون۳۵ هزار تومان
بیش از ۵۰ میلیون۴۵ هزار تومان

برای کالای ۸۰۰ هزار تومانی فروشگاه آزمایشی ما، سقف کارمزد ۸ هزار تومان است. در همان نرخنامه، «سرویس پس‌کرایه» (کرایه در مقصد) سقف ۸ هزار تومان برای هر مرسوله دارد.

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

تیپاکس در خلاصه صفحه‌اش می‌نویسد پول را با کسر کارمزد برای مشتری پرتکرار ۲۴ ساعت و برای مشتری عادی ۷۲ ساعت بعد از تحویل بسته در پلاک مقصد واریز می‌کند. در توضیح تفصیلی همان صفحه، ۲۴ ساعت کاری از رسیدن بسته به نمایندگی مقصد شمرده می‌شود و ۷۲ ساعت کاری از «اختتام قرارداد» توسط شعبه مقصد؛ صفحه این اصطلاح را معنا نمی‌کند. روش ۲۴ ساعته ویژه مشتری پرتکرار است و بعد از عقد قرارداد و تأیید اعتبار فعال می‌شود.

اگر توزیع بیش از ۵ روز کاری بعد از رسیدن به نمایندگی طول بکشد، تیپاکس موظف است وجه کالا را بپردازد. صفحه تیپاکس کارمزد را نمی‌نویسد. سفارش COD از راه e-Tipax، تیپاکس‌یار یا API ثبت می‌شود، و از راه اپلیکیشن مای‌تیپاکس ثبت نمی‌شود.

اگر گیرنده بسته را نگیرد، فرستنده باید آن را پس بگیرد و هزینه رفت و برگشت را بپردازد. این را ماده ۳ شرایط تیپاکس می‌گوید، و ماده ۶ می‌گوید بسته حداکثر ۱۰ روز نزد تیپاکس می‌ماند.

سفارش پرداخت در محل کالای فیزیکی «در حال انجام» می‌شود، پول رسیده باشد یا نه

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

سفارش ۲۷ در پیشخوان فروشگاه آزمایشی: روش پرداخت در محل، وضعیت در حال انجام، تاریخ پرداخت ندارد
سفارشوضعیتموجودی
کفش، تنظیم پیش‌فرضدر حال انجاماز ۱۰ جفت به ۹ جفت
کتاب الکترونیکی (مجازی و دانلودی)در انتظار بررسیمدیریت موجودی ندارد
کفش، فیلتر روی «در انتظار بررسی»در انتظار بررسیاز ۹ جفت به ۸ جفت
کفش، فیلتر روی «در انتظار پرداخت»در انتظار پرداختتغییر نکرد

ووکامرس وضعیت را بر اساس کالای دانلودی انتخاب می‌کند: سفارشی که کالای دانلودی دارد «در انتظار بررسی» می‌شود و بقیه «در حال انجام».

وضعیت «در انتظار پرداخت» را برای پرداخت در محل نگذارید. برای دیدن دلیلش، زمان ساخت و آخرین تغییر چهار سفارش آزمایشی را سه ساعت عقب بردیم و تابع wc_cancel_unpaid_orders را، که کار لغو سفارش‌های پرداخت‌نشده است، صدا زدیم. سفارش «در انتظار پرداخت» «لغو شده» شد؛ نگهداری موجودی در فروشگاه آزمایشی ما ۶۰ دقیقه بود. این تابع فقط وقتی سفارشی را لغو می‌کند که مدیریت موجودی روشن باشد. سه سفارش دیگر، یکی «در حال انجام» و دو تا «در انتظار بررسی»، دست نخوردند.

اگر می‌خواهید سفارش‌های پرداخت در محل از بقیه جدا دیده شوند، این فیلتر وضعیت همه آن‌ها را «در انتظار بررسی» می‌کند. آن را در functions.php قالب فرزند بگذارید و پیش از ویرایش از سایت بکاپ بگیرید:

PHP
وردپرس نیاز
add_filter( 'woocommerce_cod_process_payment_order_status', function () {
	return 'on-hold';
} );

در آزمایش ما، سفارش با این فیلتر «در انتظار بررسی» شد و موجودی کفش یک عدد کم شد.

محدودیت استان کد نمی‌خواهد: پرداخت در محل به روش حمل و منطقه حمل و نقل بسته است

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

تنظیمات پرداخت در محل در ووکامرس فارسی: فیلد فعال کردن روش‌های حمل و نقل با روش پیک تهران

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

برای هر استان یک منطقه حمل و نقل بسازید (آموزش تنظیم حمل و نقل ووکامرس منطقه‌ها را توضیح داده است)، روش حمل منطقه تهران را «پیک تهران» بنامید و همان را برای پرداخت در محل انتخاب کنید. ووکامرس منطقه را با کشور، استان یا قاره و، اگر بخواهید، با کدپستی تعریف می‌کند (مستندات منطقه‌های حمل و نقل). ما فقط استان را آزمایش کردیم. در آزمایش ما، خریدار تهرانی پرداخت در محل را دید و خریدار اصفهانی ندید. در تسویه حساب بلوکی، با عوض کردن استان در همان صفحه و بدون بارگذاری دوباره، فهرست عوض شد.

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

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

اگر افزونه حمل و نقل ووکامرس (نگارش 4.4.8) را نصب می‌کنید، منطقه‌هایی را که با استان ساخته‌اید دوباره بسازید. این افزونه به استان‌ها شناسه عددی می‌دهد و ووکامرس دیگر کد THR را نمی‌شناسد. شناسه‌ها از پایگاه داده همان سایت می‌آیند؛ در فروشگاه آزمایشی ما تهران 274 و اصفهان 139 بود. در درخواست‌های تسویه حساب بلوکی، خریدار تهرانی با منطقه قدیمی نرخ «سایر استان‌ها»، یعنی ۱۵۰ هزار تومان، را دید. بعد از ساختن منطقه با شناسه 274 محدودیت دوباره جواب داد.

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

هسته ووکامرس برای پرداخت در محل تنظیمی برای شهر یا مبلغ ندارد (پرونده پرداخت در محل در نسخه 11.1.2). راهش فیلتر woocommerce_available_payment_gateways است.

نسخه‌های اول ما فقط سبد خرید را می‌خواندند. صفحه پرداخت یک سفارش در انتظار پرداخت از اصفهان، و صفحه پرداخت یک سفارش بالای سقف، هر دو همچنان پرداخت در محل را نشان دادند. خریدار بعد از یک پرداخت آنلاین ناموفق از همین صفحه دوباره پرداخت می‌کند. هسته هم این صفحه را جدا حساب می‌کند، و قطعه‌کد باید همین را بکند. بخش اول کد، شهر و مبلغ را از سبد یا از سفارش صفحه پرداخت برمی‌دارد:

PHP
وردپرس نیاز
function wpn_cod_context() {
	if ( is_wc_endpoint_url( 'order-pay' ) ) {
		$order = wc_get_order( absint( get_query_var( 'order-pay' ) ) );
		if ( ! $order ) {
			return null;
		}
		return array( $order->needs_shipping_address() ? $order->get_shipping_city() : null, (float) $order->get_total() );
	}
	if ( WC()->cart && WC()->customer ) {
		return array( WC()->cart->needs_shipping() ? WC()->customer->get_shipping_city() : null, (float) WC()->cart->get_total( 'edit' ) );
	}
	return null;
}

بخش دوم خود فیلتر است. دو خط اولش را، شهرهای مجاز و سقف مبلغ، عوض کنید:

PHP
وردپرس نیاز
add_filter( 'woocommerce_available_payment_gateways', function ( $gateways ) {
	$cities = array( 'تهران', 'کرج', 'بندر عباس' ); // شهرهای مجاز؛ آرایه خالی یعنی همه
	$max    = 5000000;                               // سقف جمع سفارش با هزینه ارسال، به واحد پول فروشگاه؛ صفر یعنی بدون سقف
	$ctx    = isset( $gateways['cod'] ) ? wpn_cod_context() : null;
	if ( ! $ctx ) {
		return $gateways;
	}
	list( $city, $total ) = $ctx;
	if ( is_string( $city ) && ctype_digit( $city ) ) { // افزونه حمل و نقل ووکامرس شناسه می‌فرستد
		$term = get_term( (int) $city, 'state_city' );
		$city = $term instanceof WP_Term ? $term->name : '';
	}
	$clean   = function ( $text ) {
		$text = str_replace( array( "\u{200C}", ' ' ), '', $text );
		return strtr( $text, array( "\u{064A}" => "\u{06CC}", "\u{0643}" => "\u{06A9}" ) );
	};
	$too_far = $cities && null !== $city && ! in_array( $clean( $city ), array_map( $clean, $cities ), true );
	if ( $too_far || ( $max && $total > $max ) ) {
		unset( $gateways['cod'] );
	}
	return $gateways;
} );

هر دو بخش را پشت سر هم در functions.php قالب فرزند بگذارید و پیش از آن از سایت بکاپ بگیرید: اشتباه در این پرونده می‌تواند سایت را از دسترس بیندازد.

سقف با جمع سفارش، همراه هزینه ارسال، مقایسه می‌شود: کفش در فروشگاه آزمایشی ما جفتی ۸۰۰ هزار تومان است و پیک تهران ۸۰ هزار، پس ۶ جفت ۴ میلیون و ۸۸۰ هزار تومان می‌شود؛ کالایی ۴ میلیون و ۹۵۰ هزار تومانی با همان پیک ۵ میلیون و ۳۰ هزار تومان می‌شود و پرداخت در محل را از دست می‌دهد. عدد سقف به واحد پول فروشگاه است؛ اگر فروشگاه ریالی است، آن را ده برابر کنید.

اگر می‌خواهید کسی دیگر این قاعده را روی فروشگاهتان بگذارد، درخواست را از فرم پشتیبانی وردپرس نیاز ثبت کنید.

نتیجه همین کد در فروشگاه آزمایشی (صفحه پرداخت را برای سفارش‌هایی باز کردیم که همان لحظه ساخته بودیم):

ورودیپرداخت در محل
شهر «تهران»، با فاصله آخر یا با نیم‌فاصله وسطهست
«کرج» با کاف فارسی یا با کاف عربیهست
«بندر عباس»هست
«اصفهان»، «شهر تهران» یا شهر خالینیست
سبد ۶ جفتی، ۴ میلیون و ۸۸۰ هزار تومانهست
سبد ۷ جفتی، ۵ میلیون و ۶۸۰ هزار توماننیست
صفحه پرداخت سفارش اصفهانی یا سفارش ۵ میلیون و ۶۸۰ هزار تومانینیست
سبد مجازی ۳۰۰ هزار تومانی با نشانی اصفهانهست

«شهر تهران» تهران حساب نمی‌شود. اگر خریدارانتان این‌طور می‌نویسند، آن را هم به فهرست شهرها بدهید. کد در شهر خریدار و در فهرست شما فاصله و نیم‌فاصله را حذف می‌کند و یای و کاف عربی را به یای و کاف فارسی برمی‌گرداند.

در تسویه حساب بلوکی، فهرست پرداخت بعد از ترک فیلد شهر تازه شد. در تسویه حساب کلاسیک، اسکریپت ووکامرس تا وقتی فیلد متنی الزامی نشانی خالی است فهرست را تازه نمی‌کند؛ در آزمایش ما، با فیلدهای خالی، عوض کردن شهر هیچ درخواستی نفرستاد. ووکامرس فارسی در تسویه حساب کلاسیک شهر را فهرست کشویی می‌کند که با استان پر می‌شود. استان تهران شهرهایی مثل «آبعلی» را هم دارد، پس منطقه «استان تهران» نمی‌تواند آن را از شهر تهران جدا کند. قطعه‌کد جدا کرد.

افزونه حمل و نقل ووکامرس در تسویه حساب کلاسیک شهر را هم با شناسه می‌فرستد (در فروشگاه آزمایشی ما تهران 284 و آبعلی 278؛ این شناسه شهر است، نه شناسه استان)، و خط ctype_digit در قطعه‌کد برای همین است. سفارش ذخیره‌شده نام شهر را دارد. در تسویه حساب بلوکی شهر فیلد متنی ماند و فهرست شهرهای افزونه نیامد.

بدون قطعه‌کد: افزونه‌ای که استان و مبلغ را از صفحه تنظیمات محدود می‌کند

فروشگاه ما افزونه Conditional Shipping and Payments را می‌فروشد. در نگارش 3.1.5، برای محدود کردن یک روش پرداخت می‌شود از این شرط‌ها استفاده کرد: استان و کشور، کدپستی، جمع سفارش، روش حمل، دسته‌بندی و نقش کاربر. شرط «شهر» ندارد؛ واژه city در هیچ پرونده افزونه نیست.

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

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

تفاوت پس‌کرایه و پرداخت در محل چیست؟

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

چطور پرداخت در محل ووکامرس را فقط برای چند شهر فعال کنیم؟

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

چرا سفارش پرداخت در محل در ووکامرس «در حال انجام» می‌شود؟

ووکامرس سفارش کالای فیزیکی را با پرداخت در محل «در حال انجام» ثبت می‌کند و موجودی را کم می‌کند، هرچند پولی نیامده است؛ سفارشی که کالای دانلودی دارد «در انتظار بررسی» می‌شود. مستندات ووکامرس می‌گوید پیش از «تکمیل شده» کردن سفارش باید مطمئن شوید پول گرفته شده است.

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

طبق خلاصه صفحه تیپاکس، پول با کسر کارمزد برای مشتری پرتکرار ۲۴ ساعت و برای مشتری عادی ۷۲ ساعت بعد از تحویل بسته در پلاک مقصد واریز می‌شود. در توضیح تفصیلی، ۲۴ ساعت کاری از رسیدن بسته به نمایندگی مقصد و ۷۲ ساعت کاری از «اختتام قرارداد» شمرده می‌شود. کارمزد در آن صفحه نیامده است.

سقف کارمزد COD پست در ۱۴۰۵ چقدر است؟

طبق نرخنامه ۱۴۰۵ شرکت ملی پست (نسخه تاپین)، سقف کارمزد برای کالای تا ۱ میلیون تومان، ۱ درصد بهای کالا است و از آن بالاتر پله‌ای است: ۱۵ هزار تومان تا ۵ میلیون، ۲۰ هزار تا ۱۰ میلیون، ۳۰ هزار تا ۲۰ میلیون، ۳۵ هزار تا ۵۰ میلیون و ۴۵ هزار تومان برای بالاتر.

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

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