راهنمای کامل اتصال فروشگاه اینترنتی به حسابداری
فروشگاه اینترنتی برای خیلی از کسبوکارها دیگر یک «کانال جانبی» نیست؛ گاهی بیشتر فروش از همانجا میآید. ولی در بیشتر فروشگاهها هنوز یک نفر هر روز سفارشهای سایت را باز میکند و یکییکی در نرمافزار حسابداری فاکتور میزند، موجودی انبار را دستی کم میکند و آخر هفته با گزارش درگاه پرداخت تطبیق میدهد. این کار وقت میگیرد، خطا دارد و همیشه چند روز از واقعیت عقب است. این صفحه توضیح میدهد اتصال فروشگاه اینترنتی به حسابداری کاسبار دقیقاً چه کار میکند، چطور راهاندازی میشود، در دفاتر چه ثبتی میزند و چه کارهایی را انجام نمیدهد.
چرا سایت و حسابداری باید به هم وصل باشند
وقتی سایت و حسابداری جدا از هم کار میکنند، سه مشکل همیشگی پیش میآید. اول، ورود دوبارهی اطلاعات: هر سفارش یک بار در سایت ثبت شده و یک بار دیگر باید در حسابداری تایپ شود؛ نام مشتری، کالاها، تخفیف، هزینهی ارسال و مبلغ پرداختی. هر بار تایپ دوباره یعنی احتمال یک رقم اشتباه. دوم، موجودی دوگانه: کالایی که در مغازه فروخته شده هنوز در سایت موجود نشان داده میشود و مشتری اینترنتی چیزی را میخرد که دیگر در انبار نیست. سوم، سفارشهای جامانده: سفارشی که در شلوغی روز فاکتور نشده، در گزارش فروش، سود و حساب مشتری دیده نمیشود و ماه بعد کسی نمیداند پولش کجا رفته است.
اتصال فروشگاه اینترنتی به حسابداری این سه مشکل را از ریشه حل میکند: سفارش پرداختشده بدون دخالت کسی فاکتور میشود، موجودی یک منبع دارد و هر سفارشی که به هر دلیل ثبت نشود، در یک فهرست جدا با دلیلش منتظر میماند.
اتصال فروشگاه اینترنتی به حسابداری کاسبار یعنی چه
در کاسبار برای هر سایت یک «اتصال» میسازید. اتصال دو طرف دارد:
- از سایت به حسابداری: سایت هر سفارش را برای کاسبار میفرستد. سفارشی که پرداخت شده باشد، یک فاکتور فروش صادرشده میشود؛ همان فاکتوری که اگر خودتان دستی میزدید ثبت میشد. کالا از انبار کم میشود، پول در حساب بانک یا درگاهی که انتخاب کردهاید دریافت میخورد و سند حسابداری ثبت میشود. اگر سفارش بعداً در سایت لغو یا مرجوع شود، فاکتورش باطل میشود و موجودی برمیگردد.
- از حسابداری به سایت (فقط ووکامرس): موجودی هر کالا در کاسبار، بعد از هر تغییر، روی همان محصول در ووکامرس نوشته میشود. فروش حضوری با صندوق فروشگاهی، فاکتور خرید، رسید و حوالهی انبار و انبارگردانی همه روی عدد موجودی سایت اثر میگذارند.
فاکتورهایی که از سایت میآیند با بقیهی فاکتورهای فروش فرقی ندارند: در فهرست فاکتورها، گزارش فروش، سود و زیان، دفتر مشتری و گزارش موجودی دیده میشوند و شرحشان میگوید از کدام سایت و کدام شمارهی سفارش آمدهاند.
در دفاتر چه ثبت میشود
فرض کنید مشتری در سایت دو عدد هدفون سفارش داده و با درگاه پرداخت، روی هم ۱۱٬۰۰۰٬۰۰۰ ریال پرداخته است و قیمتهای سایت شامل مالیات بر ارزش افزوده است. با فرض نرخ مالیات ده درصد برای آن کالا، کاسبار مالیات را از داخل مبلغ جدا میکند و سه ثبت میزند:
| حساب | بدهکار | بستانکار |
|---|---|---|
| حسابهای دریافتنی (مشتری) | ۱۱٬۰۰۰٬۰۰۰ | |
| فروش کالا | ۱۰٬۰۰۰٬۰۰۰ | |
| مالیات بر ارزش افزوده فروش | ۱٬۰۰۰٬۰۰۰ |
| حساب | بدهکار | بستانکار |
|---|---|---|
| بانک (حساب درگاه) | ۱۱٬۰۰۰٬۰۰۰ | |
| حسابهای دریافتنی (مشتری) | ۱۱٬۰۰۰٬۰۰۰ |
| حساب | بدهکار | بستانکار |
|---|---|---|
| بهای تمامشدهی کالای فروشرفته | بهای دو عدد | |
| موجودی کالا | بهای دو عدد |
نتیجه این است که ماندهی مشتری صفر میماند، پول در حساب درگاه دیده میشود، فروش و مالیات فروش درست ثبت شدهاند و سود ناخالص همان سفارش هم در گزارشها معلوم است. اگر برای اتصال حساب دریافت تعیین نکنید، ثبت دوم انجام نمیشود و فاکتور نسیه میماند؛ این برای وقتی است که پول سایت را جای دیگری (مثلاً با تسویهی دورهای درگاه) ثبت میکنید.
نرخ مالیات در این مثال فقط برای ساده کردن حساب است. کاسبار نرخ هر کالا را از تنظیمات مالیات همان کالا و همان تاریخ میخواند؛ نرخها را با مشاور مالیاتی خود تنظیم کنید.
وصل کردن ووکامرس، گام به گام
ووکامرس (WooCommerce) پرکاربردترین افزونهی فروشگاهی وردپرس است و خودش امکانی به نام «وبهوک» دارد: هر بار که سفارشی ساخته یا تغییر میکند، اطلاعات آن را به نشانیای که تعیین کردهاید میفرستد. برای همین هیچ افزونهای لازم نیست نصب کنید.
- ۱در کاسبار از منوی «فروش» به «اتصال سایت فروشگاهی» بروید و «اتصال تازه» را بزنید. نوع سایت را «ووکامرس» بگذارید، نشانی سایت را بنویسید و حساب دریافت پول، انبار و کالای هزینهی ارسال را انتخاب کنید.
- ۲بعد از ساختن اتصال، کارت آن دو چیز نشان میدهد: نشانی دریافت سفارش و کلید مخفی. هر دو دکمهی کپی دارند.
- ۳در پیشخوان وردپرس به «ووکامرس ← پیکربندی ← پیشرفته ← وبهوکها» بروید و «افزودن وبهوک» را بزنید.
- ۴نام را «کاسبار» بگذارید، وضعیت را «فعال»، موضوع را «سفارش بهروزرسانی شد»، نشانی تحویل را نشانی دریافت سفارش کاسبار و «راز» را کلید مخفی. نسخهی API را WP REST API Integration v3 انتخاب کنید و ذخیره کنید.
- ۵یک سفارش آزمایشی بگذارید و پرداختش کنید (یا وضعیتش را دستی «در حال انجام» کنید). در کاسبار، صفحهی «سفارشهای سایت» باید آن را با فاکتورش نشان دهد.
ووکامرس هنگام ذخیرهی وبهوک یک پیام آزمایشی میفرستد تا ببیند نشانی کار میکند؛ کاسبار به آن جواب میدهد و چیزی ثبت نمیکند. اگر علاوه بر «سفارش بهروزرسانی شد»، وبهوک «سفارش ایجاد شد» را هم بسازید، مشکلی پیش نمیآید: هر سفارش فقط یک بار فاکتور میشود.
وضعیت سفارش در ووکامرس و کاری که کاسبار میکند
- در حال انجام / تکمیلشده (processing / completed)
- سفارش پرداخت شده است: فاکتور فروش صادر میشود، دریافت وجه ثبت و کالا از انبار کم میشود.
- در انتظار پرداخت / در انتظار بررسی (pending / on-hold)
- سفارش فقط نگه داشته میشود و در فهرست «در انتظار پرداخت» دیده میشود؛ هنوز چیزی در حسابداری ثبت نمیشود.
- لغوشده / مسترد شده / ناموفق (cancelled / refunded / failed)
- اگر فاکتوری برایش ثبت شده بود، باطل میشود و کالا به انبار برمیگردد؛ اگر نه، سفارش فقط بسته میشود.
پرداخت با «انتقال بانکی» یا کارتبهکارت معمولاً سفارش را در «در انتظار بررسی» نگه میدارد؛ هر وقت پول را تأیید کردید و وضعیت را «در حال انجام» کردید، فاکتور ثبت میشود. «پرداخت در محل» فرق دارد: ووکامرس این سفارشها را همان اول «در حال انجام» میکند، در حالی که پولی نرسیده است؛ برای همین کاسبار فاکتور را ثبت میکند و کالا را از انبار کم میکند ولی دریافت وجه را ثبت نمیکند و مشتری بدهکار میماند تا وقتی پول را گرفتید، دریافت را خودتان ثبت کنید.
وصل کردن سایتهایی که ووکامرس نیستند
اگر سایتتان با لاراول، جنگو، ASP.NET، نود یا هر فناوری دیگری ساخته شده، باز هم میتوانید آن را وصل کنید. کافی است برنامهنویس سایت بعد از پرداخت موفق (و هنگام لغو) سفارش را با روش POST و قالب JSON به نشانی دریافت سفارش بفرستد. نوع اتصال را در کاسبار «سایت دیگر» بگذارید. قالب سفارش اینهاست:
- id و در صورت تمایل number: شناسهی سفارش در سایت (هر سفارش شناسهی یکتای خودش را دارد).
- status: یکی از paid (پرداختشده)، pending (در انتظار) یا cancelled (لغو).
- currency: IRR برای ریال یا IRT برای تومان؛ date: تاریخ و ساعت سفارش.
- customer: name، mobile، و در صورت تمایل address و postalCode.
- lines: برای هر ردیف sku، name، quantity، price (قیمت یک عدد) و discount (تخفیف کل ردیف).
- shipping: هزینهی ارسال؛ total: مبلغی که مشتری پرداخته؛ payment: نام روش پرداخت.
برای اینکه کسی نتواند به نام سایت شما سفارش جعلی بفرستد، هر درخواست باید امضا شود: سرآیند X-Kasbar-Signature امضای HMAC-SHA256 همان متن درخواست با کلید مخفی اتصال، به صورت hex است. در PHP این یعنی hash_hmac با الگوریتم sha256 روی متن JSON. نمونهی کامل JSON و کد PHP در «راهنمای اتصال» روی همان کارت اتصال هست و برنامهنویس میتواند آن را کپی کند. درخواستی که امضای درست نداشته باشد رد میشود.
مشتریها از کجا میآیند
کاسبار مشتری هر سفارش را با شمارهی موبایل پیدا میکند. شماره به هر شکلی که در سایت نوشته شده باشد (با ۹۸+، با صفر، با رقم فارسی یا با فاصله) یکسان خوانده میشود. اگر شخصی با همان موبایل در کاسبار باشد، فاکتور به نام او ثبت میشود؛ اگر نه، مشتری تازهای با نام، موبایل، ایمیل و نشانی سفارش ساخته میشود. سفارشی که موبایل معتبر ندارد به یک مشتری عمومی به نام «مشتری فروشگاه اینترنتی» همان اتصال میرود تا فهرست اشخاص با نامهای تکراری شلوغ نشود.
به این ترتیب مشتریای که هم از مغازه خرید میکند و هم از سایت، یک حساب دارد و همهی خریدهایش در یک دفتر دیده میشود؛ برای باشگاه مشتریان، پیامک و پیگیری فروش هم همین فهرست را دارید.
کد کالا، SKU و بارکد
کالاهای سفارش با SKU (شناسهی محصول) پیدا میشوند: کد کالا در کاسبار یا یکی از بارکدهای آن باید همان SKU محصول در سایت باشد. این مهمترین شرط درست کار کردن اتصال است. اگر محصولات سایت را با امکان «آوردن محصولات سایت» به کاسبار آوردهاید، SKU هر محصول خودش کد کالا شده است. در غیر این صورت یا در کاسبار کد کالاها را با SKU یکی کنید، یا در سایت SKU هر محصول را همان کد کالای کاسبار بگذارید.
برای محصولات چندحالته (مثلاً تیشرت در چند رنگ و اندازه) هر حالت SKU جدای خودش را دارد؛ در کاسبار هم برای هر حالت یک کالا با همان کد تعریف کنید تا موجودی هر رنگ و اندازه جدا نگه داشته شود.
تومان، ریال و مالیات بر ارزش افزوده
بیشتر فروشگاههای ایرانی قیمت را به تومان نشان میدهند ولی دفاتر به ریال است. کاسبار واحد پول سفارش را میخواند: IRT تومان است و در ده ضرب میشود، IRR ریال است. اگر افزونهی ارز سایتتان کد دیگری میفرستد، در تنظیمات اتصال «قیمتهای سایت به» را مشخصاً تومان یا ریال بگذارید.
دربارهی مالیات، دو حالت هست. در بیشتر فروشگاهها قیمتی که مشتری میبیند همان مبلغی است که میپردازد؛ برای این حالت گزینهی «قیمتهای سایت با مالیات بر ارزش افزوده است» روشن میماند و کاسبار مالیات هر کالا را از داخل قیمتش جدا میکند، طوری که جمع فاکتور با مبلغ پرداختی یکی شود. اگر سایت قیمت بدون مالیات نشان میدهد و مالیات را جدا اضافه میکند، این گزینه را خاموش کنید تا مالیات روی قیمت اضافه شود. اگر به هر دلیل مبلغ پرداختی با جمع فاکتور فرق کند، این تفاوت کنار همان سفارش در فهرست نوشته میشود تا ببینید و تنظیمات را درست کنید.
هزینهی ارسال، تخفیف و کوپن
هزینهی ارسال و هزینههای دیگر سفارش (مثل هزینهی بستهبندی) با یک کالای خدماتی که در اتصال انتخاب کردهاید، به صورت یک ردیف جدا در فاکتور میآیند و عنوانشان (مثلاً «پست پیشتاز») در شرح ردیف نوشته میشود. تخفیف کوپنهای ووکامرس روی همان ردیف کالا به عنوان تخفیف ثبت میشود، پس هم قیمت اصلی و هم تخفیف در فاکتور دیده میشود. اگر سفارشی هزینه داشته باشد ولی کالای ارسال انتخاب نشده باشد، سفارش برای بررسی نگه داشته میشود تا هیچ مبلغی بیصدا جا نماند.
سفارشهایی که نیاز به بررسی دارند
هر سفارشی که به هر دلیل نتواند ثبت شود، در صفحهی «سفارشهای سایت» در برگهی «نیاز به بررسی» میماند و دلیلش به فارسی کنارش نوشته میشود. دلیلهای رایج اینهاست:
- کالایی با آن SKU در کاسبار نیست (نام و SKU کالا نوشته میشود).
- موجودی کالا در انبار کافی نیست و فروش بیش از موجودی مجاز نیست.
- سفارش هزینهی ارسال دارد ولی کالای هزینهی ارسال انتخاب نشده است.
- دوره یا سال مالی تاریخ سفارش بسته است.
- واحد پول سفارش ریال یا تومان نیست.
بعد از درست کردن مشکل (مثلاً تعریف کالا، اصلاح کد، ثبت خرید یا انتخاب کالای ارسال) دکمهی «دوباره ثبت کن» را بزنید. سفارشی را که نباید در حسابداری بیاید (مثلاً سفارش آزمایشی) با «کنار بگذار» ببندید. به سایت همیشه گفته میشود که سفارش رسیده است، پس سایت آن را بیپایان دوباره نمیفرستد و وبهوک غیرفعال نمیشود؛ کار بررسی در کاسبار انجام میشود.
همگامسازی موجودی با ووکامرس
طرف دوم اتصال، موجودی است. برای ووکامرس میتوانید کاری کنید که عدد موجودی هر محصول در سایت همیشه همان عدد کاسبار باشد. برای این کار ووکامرس یک جفت کلید REST میخواهد:
- ۱در وردپرس به «ووکامرس ← پیکربندی ← پیشرفته ← REST API» بروید و «افزودن کلید» را بزنید. یک توضیح بنویسید، کاربر مدیر را انتخاب کنید و دسترسی را «خواندن/نوشتن» بگذارید.
- ۲ووکامرس دو کلید میسازد: Consumer key که با ck_ شروع میشود و Consumer secret که با cs_ شروع میشود.
- ۳در کاسبار «تنظیمات» همان اتصال را باز کنید، «موجودی کاسبار روی سایت هم اعمال شود» را روشن کنید، دو کلید را بنویسید و ذخیره کنید. نشانی سایت باید با https شروع شود.
- ۴«ارسال موجودی الان» را بزنید؛ نتیجه میگوید چند کالا بهروز شد و چند کالا در سایت پیدا نشد.
از آن به بعد کاسبار هر دو دقیقه بررسی میکند موجودی کدام کالاها تغییر کرده و فقط همانها را به سایت میفرستد. موجودی از انبار انتخابشده در اتصال (یا انبار پیشفرض) خوانده میشود، به عدد صحیح پایین گرد میشود و موجودی منفی صفر فرستاده میشود. محصولات ساده و حالتهای محصولات چندحالته هر دو پشتیبانی میشوند. کالایی که SKU آن در سایت نیست «پیدا نشد» شمرده میشود و روزی یک بار دوباره جستجو میشود؛ اگر بعداً آن محصول را در سایت ساختید، خودش پیدا میشود.
اگر ووکامرس کلیدها را نپذیرد (مثلاً کلید حذف شده یا فقط دسترسی خواندن دارد) یا سایت در دسترس نباشد، دلیلش روی کارت اتصال نوشته میشود و با گذاشتن کلید تازه پاک میشود.
امنیت و دسترسی
- هر سفارش با امضای کلید مخفی همان اتصال بررسی میشود؛ سفارش بدون امضای درست پذیرفته نمیشود.
- کلید مخفی و کلیدهای REST ووکامرس رمزشده نگه داشته میشوند و کلیدهای ووکامرس هرگز دوباره نمایش داده نمیشوند. اگر کلیدی لو رفت، «کلید تازه» بسازید و در سایت جایگزین کنید.
- سفارشها با دسترسی کسی ثبت میشوند که اتصال را ساخته است؛ بهتر است مالک یا مدیر مالی اتصال را بسازد.
- دیدن و ساختن اتصال و کلیدها فقط برای کسانی است که مجوز مدیریت اتصال را دارند؛ حسابدار و فروشندهها فهرست سفارشها را میبینند و میتوانند سفارش را دوباره ثبت کنند.
- درخواستهای کاسبار به سایت فقط به نشانیهای عمومی https فرستاده میشود.
کلید مخفی و کلیدهای REST را در پیام، چت یا ایمیل برای کسی نفرستید؛ حتی برای پشتیبانی. آنها را فقط در تنظیمات ووکامرس و صفحهی اتصال کاسبار بنویسید.
چه کارهایی را این اتصال انجام نمیدهد
برای اینکه انتظار درستی داشته باشید، اینها را بدانید:
- قیمت کالاها بین سایت و کاسبار جابهجا نمیشود؛ قیمت هر فاکتور همان قیمتی است که مشتری در سفارش پرداخته.
- محصول تازه در سایت ساخته نمیشود و کالای تازه هم خودکار در کاسبار ساخته نمیشود.
- ارسال موجودی فعلاً فقط برای ووکامرس است؛ سایتهای دیگر سفارش میفرستند ولی موجودی به آنها برنمیگردد.
- سفارشهای قدیمیتر از زمان اتصال خودکار نمیآیند؛ اتصال از سفارشهایی کار میکند که بعد از آن ساخته یا تغییر داده میشوند.
- نسخهی ویندوز (آفلاین) کاسبار به سایت وصل نمیشود؛ اتصال فقط در نسخهی آنلاین است.
یک روز کاری با اتصال
صبح، سه سفارشی که شب گذشته در سایت پرداخت شدهاند، از قبل در کاسبار فاکتور شدهاند؛ مسئول انبار فاکتورها را چاپ میکند و بستهها را آماده میکند. ظهر، آخرین عدد یک کالا در مغازه با صندوق فروشگاهی فروخته میشود و دو دقیقه بعد آن محصول در سایت ناموجود است. عصر، مشتریای سفارشش را در سایت لغو میکند؛ فاکتورش در کاسبار باطل میشود و کالا به موجودی برمیگردد. شب، حسابدار فقط برگهی «نیاز به بررسی» را نگاه میکند: یک سفارش با کالای تازهای آمده که هنوز در کاسبار تعریف نشده؛ کالا را تعریف میکند و «دوباره ثبت کن» را میزند. گزارش فروش، سود، موجودی و حساب درگاه بدون هیچ ورود دستی بهروز است.
چکلیست راهاندازی
- ۱تنظیمات فروش، انبار و صندوق و بانک کاسبار را انجام دهید و حساب درگاه را تعریف کنید.
- ۲کد کالاها را با SKU محصولات سایت یکی کنید (یا محصولات را با «آوردن محصولات سایت» بیاورید).
- ۳یک کالای خدماتی «هزینه ارسال» بسازید.
- ۴اتصال را بسازید و نشانی و کلید را در وبهوک ووکامرس یا کد سایت بگذارید.
- ۵یک سفارش آزمایشی بدهید، فاکتورش را در کاسبار ببینید و اگر سفارش آزمایشی بوده، فاکتور را باطل کنید.
- ۶برای ووکامرس، کلید REST بسازید و ارسال موجودی را روشن کنید.
اگر جایی از راه گیر کردید، از «پشتیبانی آنلاین» داخل برنامه بپرسید «چطور سایتم را وصل کنم؟»؛ قدمبهقدم همراهتان میکند. آموزش کامل همین کار هم در بخش آموزشها با عنوان «اتصال سایت فروشگاهی به حسابداری» هست.
