پرداخت در محل ووکامرس: کارمزد پست، وضعیت سفارش و فعالسازی فقط برای چند شهر
- سمانه جعفری
- مطالعه در 10 دقیقه
- مهر 14, 1405
- بدون دیدگاه
-
افزونه اسکیما پرو | Schema Pro
امتیاز 5.00 از 5۵۲۰,۰۰۰ تومان -
پکیج طراح حرفهای المنتور برای فریلنسرها و طراحان سایت تازهکار
۱,۱۷۰,۰۰۰ تومانقیمت اصلی ۱,۱۷۰,۰۰۰ تومان بود.۷۹۰,۰۰۰ تومانقیمت فعلی ۷۹۰,۰۰۰ تومان است. -
پکیج جعبه ابزار ۳۶۰ درجه آژانس المنتوری | 6 محصول + 51٪ تخفیف
۲,۳۴۰,۰۰۰ تومانقیمت اصلی ۲,۳۴۰,۰۰۰ تومان بود.۱,۰۹۹,۸۰۰ تومانقیمت فعلی ۱,۰۹۹,۸۰۰ تومان است. -
افزونه فشرده ساز تصاویر وردپرس اسماش | WPMU DEV WP Smush Pro
۶۴۰,۰۰۰ تومان
در یکی از سفارشهای آزمایشی ما، پرداخت در محل ووکامرس انتخاب شد و سفارش بدون هیچ پرداختی به وضعیت «در حال انجام» رفت. موجودی کفش هم از ۱۰ جفت به ۹ جفت رسید. ووکامرس برای پرداخت در محل سفارش را ثبت میکند و منتظر میماند پیک پول را بگیرد.
اگر میخواهید این روش فقط برای چند شهر یا تا سقف مبلغی روشن باشد، جواب کوتاه این است. ووکامرس پرداخت در محل را بر اساس «روش حمل» محدود میکند. روش حمل به منطقه حمل و نقل بسته است، پس استان بدون کد میشود؛ شهر و مبلغ را هسته نمیشناسد و قطعهکد میخواهد، به شرط آنکه قطعهکد صفحه پرداخت سفارش را هم ببیند. اگر افزونه حمل و نقل ووکامرس روی سایت هست، استانها در ووکامرس شناسه عددی میگیرند و منطقهای که پیشتر با یک استان ساختهاید دیگر با خریدار آن استان جور نمیشود. کارمزد پست و واریز تیپاکس زیر عنوانی است که با «کارمزد پست» شروع میشود، و قطعهکد شهر و مبلغ زیر عنوانی که با «شهر و مبلغ» شروع میشود.
نتیجههای آزمایش از یک فروشگاه آزمایشی در 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 قالب فرزند بگذارید و پیش از ویرایش از سایت بکاپ بگیرید:
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 است.
نسخههای اول ما فقط سبد خرید را میخواندند. صفحه پرداخت یک سفارش در انتظار پرداخت از اصفهان، و صفحه پرداخت یک سفارش بالای سقف، هر دو همچنان پرداخت در محل را نشان دادند. خریدار بعد از یک پرداخت آنلاین ناموفق از همین صفحه دوباره پرداخت میکند. هسته هم این صفحه را جدا حساب میکند، و قطعهکد باید همین را بکند. بخش اول کد، شهر و مبلغ را از سبد یا از سفارش صفحه پرداخت برمیدارد:
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;
}
بخش دوم خود فیلتر است. دو خط اولش را، شهرهای مجاز و سقف مبلغ، عوض کنید:
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 پست در ۱۴۰۵ چقدر است؟
طبق نرخنامه ۱۴۰۵ شرکت ملی پست (نسخه تاپین)، سقف کارمزد برای کالای تا ۱ میلیون تومان، ۱ درصد بهای کالا است و از آن بالاتر پلهای است: ۱۵ هزار تومان تا ۵ میلیون، ۲۰ هزار تا ۱۰ میلیون، ۳۰ هزار تا ۲۰ میلیون، ۳۵ هزار تا ۵۰ میلیون و ۴۵ هزار تومان برای بالاتر.
- سمانه جعفری
- مطالعه در 9 دقیقه
- بدون دیدگاه
- سمانه جعفری
- 9 دقیقه
- 0
- سمانه جعفری
- مطالعه در 9 دقیقه
- بدون دیدگاه
- سمانه جعفری
- 9 دقیقه
- 0
- سمانه جعفری
- مطالعه در 8 دقیقه
- بدون دیدگاه
- سمانه جعفری
- 8 دقیقه
- 0
- سمانه جعفری
- مطالعه در 44 دقیقه
- بدون دیدگاه
- سمانه جعفری
- 44 دقیقه
- 0
- امین زاهد
- مطالعه در 25 دقیقه
- بدون دیدگاه
- امین زاهد
- 25 دقیقه
- 0
- امین زاهد
- مطالعه در 20 دقیقه
- بدون دیدگاه
- امین زاهد
- 20 دقیقه
- 0
- امین زاهد
- مطالعه در 17 دقیقه
- بدون دیدگاه
- امین زاهد
- 17 دقیقه
- 0
- امین زاهد
- مطالعه در 21 دقیقه
- بدون دیدگاه
- امین زاهد
- 21 دقیقه
- 0
