=== احرازینو برای ووکامرس ===
Contributors: ehrazino
Tags: woocommerce, iran, checkout, address, verification
Requires at least: 6.4
Tested up to: 6.7
Requires PHP: 7.4
Stable tag: 1.11.0
License: GPLv2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

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

== Description ==

= ۱. تکمیل خودکار نشانی =

مشتری کد پستی را می‌زند و نشانی‌اش پر می‌شود. نشانی غلط یعنی مرسولهٔ
برگشتی، و هزینهٔ هر مرسولهٔ برگشتی از هزینهٔ صدها استعلام بیشتر است.

نتیجه‌ها یک هفته کش می‌شوند، پس کد پستی تکراری دوباره هزینه نمی‌برد.

= ۲. تطابق موبایل با کد ملی (شاهکار) =

بررسی می‌شود که شمارهٔ موبایل واقعاً به همان کد ملی تعلق دارد. برای
فروشگاه‌هایی که پرداخت‌در‌محل دارند و از سفارش جعلی ضرر می‌کنند.

**شما انتخاب می‌کنید که در صورت عدم تطابق چه شود:**

* **فقط ثبت روی سفارش** (پیش‌فرض): سفارش ثبت می‌شود و نتیجه کنار آن
  می‌نشیند. مناسب فروشگاهی که نمی‌خواهد هیچ سفارشی را از دست بدهد.
* **جلوگیری از ثبت سفارش**: مشتری با کد ملیِ ناهمخوان اصلاً به صفحهٔ
  پرداخت نمی‌رسد.

در هر دو حالت، **درستیِ خودِ کد ملی** (رقم کنترلی) همان لحظه و بدون
هیچ هزینه‌ای بررسی می‌شود. کد ملیِ ساختگی مثل ۱۲۳۴۵۶۷۸۹۲ همان‌جا رد
می‌شود و استعلامی برایش خرج نمی‌شود.

**زمان احراز را هم شما انتخاب می‌کنید:**

* **پیش از پرداخت** (پیش‌فرض): فیلد کد ملی در صفحهٔ تسویه، با دو حالت بالا.
* **پس از پرداخت**: صفحهٔ تسویه هیچ فیلد اضافه‌ای ندارد و نرخ تکمیل خرید
  دست نمی‌خورد. سفارش پرداخت‌شده در وضعیت «در انتظار احراز هویت» می‌ماند
  و مشتری کد ملی‌اش را در صفحهٔ «سفارش دریافت شد»، از لینک ایمیل یا از
  «حساب کاربری من» وارد می‌کند. اگر با موبایل سفارش بخواند، سفارش خودکار
  «در حال انجام» می‌شود. اگر سه بار نخواند، سفارش نگه داشته می‌ماند و به
  شما ایمیل می‌شود تا پیش از ارسال با مشتری تماس بگیرید.

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

= اگر سرویس قطع باشد چه می‌شود؟ =

سفارش **ثبت می‌شود** و برچسب «نامعلوم، بررسی دستی» می‌گیرد.

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

== Installation ==

1. افزونه را نصب و فعال کنید.
2. در [پنل کسب‌وکار احرازینو](https://ehrazino.com/dashboard/api/keys/) یک کلید API بسازید.
3. ووکامرس ← تنظیمات ← احرازینو: کلید را وارد و قابلیت‌های دلخواه را روشن کنید.

همهٔ قابلیت‌ها پیش‌فرض **خاموش**اند. افزونه تا وقتی خودتان نگویید،
هیچ فراخوانی نمی‌زند و هیچ هزینه‌ای نمی‌سازد.

= پیش از روشن‌کردن، در آزمایشگاه امتحان کنید =

پنل احرازینو یک [آزمایشگاه](https://ehrazino.com/dashboard/api/lab/)
دارد که ورودی را رایگان می‌سنجد و قطعه‌کد آماده می‌دهد.

== Frequently Asked Questions ==

= کلید API من کجا ذخیره می‌شود؟ =

در `wp_options` سرور خودتان. هیچ‌وقت به مرورگر بازدیدکننده نمی‌رود و در
هیچ فایل جاوااسکریپتی نیست. با حذف افزونه، کلید هم پاک می‌شود.

= هزینه چطور حساب می‌شود؟ =

هر استعلام از موجودی پنل شما کم می‌شود و قیمتش پیش از فراخوان قطعی
است. مصرف را در [گزارش مصرف](https://ehrazino.com/dashboard/api/reports/)
روز‌به‌روز می‌بینید.

= آیا یک ربات می‌تواند موجودی من را خرج کند؟ =

مسیر تکمیل نشانی از صفحهٔ پرداخت صدا زده می‌شود و برای مهمان‌ها هم باز
است، پس سه لایه جلویش گذاشته‌ایم:

1. **سقف هر بازدیدکننده در ساعت** (پیش‌فرض ۲۰).
2. **سقف کل فروشگاه در ساعت** (پیش‌فرض ۲۰۰)، که کران بالای هزینهٔ شما
   را می‌بندد، هرچقدر هم ترافیک زیاد شود.
3. **کش هفتگی**: کد پستی تکراری دوباره هزینه نمی‌برد.

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

= کد ملی مشتری‌ها کجا می‌رود؟ =

در متای سفارش می‌ماند (برای فاکتور رسمی)، ولی سه جا **نمی‌آید**: در
یادداشت سفارش ماسک می‌شود، در لاگ نوشته نمی‌شود، و از پاسخ REST API
ووکامرس حذف می‌شود، چون پیشوند زیرخط فقط از رابط کاربری پنهان می‌کند
و نه از REST.

= دکمهٔ «دریافت خودکار نشانی» هیچ کاری نمی‌کند، چه کنم؟ =

اول در **ووکامرس › تنظیمات › احرازینو** دکمهٔ «آزمون اتصال» را بزنید.
نتیجه‌اش صریح می‌گوید مشکل کجاست و این آزمون هزینه‌ای ندارد.

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

1. `/?wc-ajax=ehrazino_lookup_postcode`
2. `/?rest_route=/ehrazino/v1/postcode`
3. `/wp-admin/admin-ajax.php`

اگر به‌جای ۴۰۴، خطای **۵۰۲ یا ۵۰۴** می‌گیرید، معنایش فرق می‌کند:
وردپرس بالا آمده و درخواست وسط کار قطع شده. تنها کار کندِ این مسیر،
تماس سرور شما با احرازینو است، پس تقریباً همیشه یعنی سرور فروشگاه به
ما نمی‌رسد. «آزمون اتصال» در تنظیمات، همین را صریح می‌گوید.

بعضی میزبان‌ها برای «سخت‌کردن وردپرس» کل `/wp-admin/` را می‌بندند و
آن مسیر از مرورگر ۴۰۴ می‌دهد. وقتی با حساب مدیر وارد باشید، افزونه
همین را زیر همان پیام به شما می‌گوید؛ مشتری آن را نمی‌بیند. متن را
برای میزبان وب خود بفرستید.

= احراز پس از پرداخت دقیقاً چه می‌کند؟ =

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

1. موجودی انبار مثل همیشه کم می‌شود و سفارش «پرداخت‌شده» حساب می‌شود.
2. ایمیل «سفارش تازه» برای شما می‌رود، و برای مشتری ایمیل «یک قدم تا ارسال
   سفارش» با لینک وارد کردن کد ملی. این ایمیل در «ووکامرس ← تنظیمات ←
   ایمیل‌ها» قابل ویرایش یا خاموش‌کردن است.
3. تطابق کد ملی با موبایل سفارش، سفارش را آزاد می‌کند و ایمیل «در حال
   انجام» برای مشتری می‌رود.
4. مشتری تا سه بار فرصت دارد. کد ملیِ بدشکل نه تلاش حساب می‌شود و نه هزینه
   دارد.

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

اگر شمارهٔ تلفن سفارش موبایل نباشد (مثلاً تلفن ثابت)، تطبیق ممکن نیست؛
سفارش نگه داشته می‌ماند و به شما ایمیل می‌شود. شماره‌هایی که با +۹۸ یا
۰۰۹۸ ذخیره شده‌اند، درست خوانده می‌شوند.

در این حالت فیلد تلفن صفحهٔ تسویه اجباری است و فقط شمارهٔ موبایل پذیرفته
می‌شود، چون احراز با همان شماره انجام می‌شود.

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

فایل‌های دانلودی تا تأیید تحویل نمی‌شوند. از صفحهٔ سفارش می‌توانید
درخواست احراز را دوباره برای مشتری بفرستید، یا با تغییر دستی وضعیت به
«در حال انجام»، سفارش را بدون احراز آزاد کنید. اگر افزونه غیرفعال شود،
سفارش‌های منتظر به «در انتظار بررسی» می‌روند تا از فهرست‌ها گم نشوند.

= با افزونهٔ ورود پیامکی (دیجیتس، ورودک و مانند آن‌ها) کار می‌کند؟ =

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

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

= افزونه را چطور به‌روز کنم؟ =

از نسخهٔ ۱٫۸٫۰ به بعد، مثل هر افزونهٔ دیگری: نسخهٔ تازه در «پیشخوان ←
به‌روزرسانی‌ها» می‌آید و با یک کلیک نصب می‌شود؛ می‌توانید به‌روزرسانی خودکار
را هم در صفحهٔ افزونه‌ها روشن کنید. نسخه‌های پیش از ۱٫۸٫۰ این امکان را
ندارند و یک بار باید فایل تازه را از سایت احرازینو دستی بارگذاری کنید.

= با HPOS و چک‌اوت بلوکی کار می‌کند؟ =

بله، هر دو. افزونه سازگاری‌اش را رسماً اعلام می‌کند و هیچ‌جا
`get_post_meta` روی سفارش صدا نمی‌زند. از نسخهٔ ۱٫۱۱٫۰ فیلد کد ملیِ
«پیش از پرداخت» در چک‌اوت بلوکی هم هست (ووکامرس ۸٫۹ به بعد) و در بخش
«اطلاعات سفارش» می‌آید؛ برچسب و الزامی‌بودنش از همان تنظیم‌هاست. تکمیل
خودکار نشانی هنوز فقط روی چک‌اوت کلاسیک کار می‌کند. احراز «پس از
پرداخت» در هر دو کامل کار می‌کند.

= مشتری می‌تواند کد ملی‌اش را در حساب کاربری ثبت یا ویرایش کند؟ =

بله، از نسخهٔ ۱٫۱۱٫۰. در تنظیمات «کد ملی در جزئیات حساب مشتری» را روشن
کنید تا فیلد کد ملی در «حساب کاربری من ← جزئیات حساب» بیاید. کد ملی فقط
وقتی ذخیره می‌شود که با شمارهٔ موبایل حساب بخواند؛ پس از آن، خریدهای
بعدی با همان شماره بدون پرسیدن دوبارهٔ کد ملی انجام می‌شود. هر ثبت یا
تغییر یک استعلام است و پس از سه بار عدم تطابق، فیلد برای آن حساب بسته
می‌شود.

== Changelog ==

= 1.11.0 =
* فیلد کد ملی در چک‌اوت بلوکی ووکامرس (ووکامرس ۸٫۹ به بعد). تا امروز در صفحهٔ پرداخت بلوکی نه فیلد نمایش داده می‌شد و نه شاهکارِ «پیش از پرداخت» اجرا می‌شد.
* گزینهٔ تازهٔ «کد ملی در جزئیات حساب مشتری»: مشتری کد ملی‌اش را در «حساب کاربری من» ثبت و ویرایش می‌کند و فقط کد ملیِ هم‌خوان با موبایل حساب ذخیره می‌شود. پیش‌فرض خاموش.
* در چک‌اوت بلوکی، مشتری‌ای که کد ملی‌اش رد شده بود و آن را اصلاح کرد، دوباره سنجیده می‌شود و پشت همان خطا نمی‌ماند.
* موبایل با پیش‌شمارهٔ کشور (+98 یا 0098) در استعلام سفارش درست خوانده می‌شود.

= 1.10.2 =
* ستون «احراز» در فهرست کاربران و بخش «احرازینو» در صفحهٔ کاربر، مثل ۱٫۱۰٫۰ همیشه نمایش داده می‌شوند. تغییر نسخهٔ ۱٫۱۰٫۱ (پنهان‌شدن با شاهکارِ خاموش) برگردانده شد.

= 1.10.0 =
* ستون «احراز» در فهرست «کاربران» وردپرس: تأیید شده (با موبایل پوشیده و تاریخ)، منتظر کد ملی، یا احراز نشده. کد ملی نشان داده نمی‌شود.
* بخش «احرازینو» در صفحهٔ هر کاربر، با گزینهٔ «پاک‌کردن احراز این حساب»: برای حساب مشکوک، موبایل عوض‌شده، یا آزمایش دوبارهٔ ثبت‌نام با همان شماره.

= 1.9.1 =
* پس از به‌روزرسانی، وردپرس دیگر روی همان نسخهٔ نصب‌شده نمی‌گوید «این نگارش موجود است، هم‌اکنون به‌روز نمایید». ردیفی که پیش از به‌روزرسانی ذخیره شده بود، حالا پاک می‌شود.

= 1.9.0 =
* قابلیت «تأیید نام صاحب کارت» حذف شد. کلیدش از تنظیمات و جعبه‌اش از صفحهٔ سفارش برداشته شد. نتیجه‌هایی که پیش‌تر روی سفارش‌ها ثبت شده بود، در یادداشت‌های همان سفارش‌ها می‌ماند.

= 1.8.2 =
* نسخهٔ تازه زودتر و مطمئن‌تر در «پیشخوان ← به‌روزرسانی‌ها» دیده می‌شود: «بررسی دوباره» همان لحظه سایت احرازینو را می‌پرسد، و نسخهٔ تازه بی‌انتظار برای بررسی دوازده‌ساعتهٔ وردپرس نشان داده می‌شود.

= 1.8.1 =
* دکمهٔ «ذخیره تغییرات» در تنظیمات احرازینو دیگر پیام مرورگر «صفحه را ترک می‌کنید؟ تغییرات ذخیره نمی‌شوند» را نشان نمی‌دهد. هشدار ووکامرس فقط دکمهٔ ذخیرهٔ خودش را می‌شناخت؛ حالا دکمهٔ نوار پایین و ذخیره با Enter هم شناخته می‌شوند.

= 1.8.0 =
* به‌روزرسانی از داخل وردپرس. از این نسخه، هر نسخهٔ تازهٔ افزونه در «پیشخوان ← به‌روزرسانی‌ها» و صفحهٔ افزونه‌ها مثل هر افزونهٔ دیگری نشان داده می‌شود، با دکمهٔ به‌روزرسانی یک‌کلیکی و امکان به‌روزرسانی خودکار.
* اعلان «نسخهٔ تازه منتشر شد» در پیشخوان، با خلاصهٔ تغییرات، برای مدیرانی که اجازهٔ به‌روزرسانی افزونه دارند. برای هر نسخه یک بار بسته می‌شود.
* بسته فقط از دامنهٔ احرازینو دانلود می‌شود. در این بررسی نه نشانی سایت شما فرستاده می‌شود و نه کلید API.

= 1.7.0 =
* احراز هنگام ساخت حساب (اختیاری، پیش‌فرض خاموش). مشتری همان لحظهٔ ثبت‌نام احراز می‌شود و دیگر در هیچ خریدی با همان موبایل کد ملی نمی‌خواهد.
* با افزونهٔ ورود پیامکی (مثل دیجیتس یا ورودک): آن افزونه موبایل را با کد پیامکی تأیید می‌کند و همین که حساب ساخته شد، مشتری یک بار به «حساب کاربری من» برده می‌شود تا کد ملی‌اش را بدهد؛ شاهکار با همان موبایلِ تأییدشده پرسیده می‌شود.
* بدون افزونهٔ پیامکی: فیلد موبایل و کد ملی به فرم ثبت‌نام ووکامرس اضافه می‌شود و شاهکار پیش از ساخت حساب پرسیده می‌شود؛ عدم تطابق، ثبت‌نام را رد می‌کند.
* هر استعلام ثبت‌نام زیر همان سقف ساعتیِ هر IP و سقف سراسری است. سه تلاش ناموفق، و ساخت حساب در صفحهٔ پرداخت دست نمی‌خورد.

= 1.6.0 =
* مشتری عضو فقط یک بار احراز می‌شود: کسی که با حساب کاربری خرید می‌کند و یک بار با یک شمارهٔ موبایل تأیید شده، در خریدهای بعدی با همان شماره دوباره کد ملی وارد نمی‌کند و استعلامی هم زده نمی‌شود (هزینه‌ای ندارد). در حالت «پیش از پرداخت» کد ملی خودش در فیلد پر می‌شود؛ در حالت «پس از پرداخت» سفارش اصلاً نگه داشته نمی‌شود. با عوض‌شدن موبایل، احراز دوباره لازم است.
* این یادآوری برای خرید مهمان نیست، چون بدون حساب کاربری هر کسی می‌توانست شمارهٔ مشتری تأییدشدهٔ دیگری را بنویسد. کلید «به خاطر سپردن احراز مشتری» در تنظیمات است و پیش‌فرض روشن.

= 1.5.1 =
* در حالت «پس از پرداخت»، فیلد تلفن صفحهٔ تسویه اجباری شد و فقط شمارهٔ موبایل پذیرفته می‌شود؛ در چک‌اوت کلاسیک و بلوکی، پیش از پرداخت. تا این نسخه، چک‌اوت بلوکی تلفن را «اختیاری» نشان می‌داد و سفارشِ بی موبایل پرداخت می‌شد ولی قابل احراز نبود.
* سفارشی که بی موبایلِ قابل‌استفاده نگه داشته شود، همان لحظه به مدیر ایمیل می‌شود و ایمیل «یک قدم تا ارسال سفارش» برای مشتری‌اش نمی‌رود.
* اگر تلفن صورتحساب خالی باشد، تلفن نشانی حمل‌ونقل استفاده می‌شود.
* در صفحهٔ سفارش، برای سفارشِ بی موبایل توضیح درست می‌آید: با مشتری تماس بگیرید، یا موبایل درست را در تلفن صورتحساب بنویسید تا مشتری از لینک ایمیل خودش تأیید کند.

= 1.5.0 =
* احراز هویت پس از پرداخت. در تنظیمات، «زمان احراز هویت» را روی «پس از پرداخت» بگذارید تا صفحهٔ تسویه هیچ فیلد اضافه‌ای نداشته باشد. سفارش پرداخت‌شده در وضعیت تازهٔ «در انتظار احراز هویت» می‌ماند تا مشتری کد ملی‌اش را وارد کند. با تطابق، خودکار «در حال انجام» می‌شود.
* مشتری کد ملی را در صفحهٔ «سفارش دریافت شد»، از لینک ایمیل تازهٔ «یک قدم تا ارسال سفارش»، یا از «حساب کاربری من» وارد می‌کند. لینک ایمیل بدون ورود به حساب کار می‌کند. تا سه بار فرصت دارد و پس از آن، سفارش برای تماس فروشگاه نگه داشته می‌شود و به مدیر ایمیل می‌رود.
* اگر تلفن سفارش موبایل نباشد، سفارش نگه داشته می‌ماند و به مدیر ایمیل می‌رود. شماره‌های با پیش‌شمارهٔ +۹۸ درست خوانده می‌شوند.
* پس از تأیید، سفارش به همان وضعیتی می‌رود که بدون احراز می‌رفت («در حال انجام» یا «تکمیل‌شده»).
* موجودی انبار، ایمیل «سفارش تازه» برای مدیر و ایمیل «در حال انجام» برای مشتری، در این حالت هم مثل همیشه کار می‌کنند. فایل‌های دانلودی تا تأیید تحویل نمی‌شوند.
* در صفحهٔ سفارش، گزینهٔ «ارسال دوبارهٔ درخواست احراز هویت به مشتری» اضافه شد. ستون «احراز» برای سفارش‌های منتظر، وضعیت انتظار را نشان می‌دهد.
* پیش‌فرض همان «پیش از پرداخت» است و رفتار فروشگاه‌های فعلی تغییری نمی‌کند.

= 1.4.6 =
* وقتی سرور فروشگاه نتواند به احرازینو برسد، دیگر صفحهٔ پرداخت را قفل نمی‌کند. تا این نسخه، اگر بسته‌ها بی‌پاسخ رها می‌شدند، درخواست تا کشته‌شدنش توسط میزبان باز می‌ماند و مرورگر خطای ۵۰۲ می‌گرفت. حالا سقف جداگانه‌ای روی برقراری اتصال هست و در پنج ثانیه معلوم می‌شود.
* مهلت استعلام در صفحهٔ پرداخت از ۱۲ به ۸ ثانیه کم شد. مشتری نباید پای یک دکمه این‌قدر بماند.
* تماسی که هیچ‌وقت برنگردد هم از این پس یک شکست شمرده می‌شود. پیش از این، اگر میزبان درخواست را می‌کشت، هیچ کدی از افزونه اجرا نمی‌شد و همان بدترین نوع قطعی برای حالت پیش‌فرضِ خودکار نامرئی بود؛ یعنی هر مشتری دوباره همان انتظار را می‌کشید.
* خطای ۵xx دیگر با «مسیر بسته است» قاطی نمی‌شود. این خطا یعنی وردپرس بالا آمده و درخواست وسط کار قطع شده، پس مسیرهای دیگر امتحان نمی‌شوند و پیام مخصوص مدیر، علت درست را می‌گوید.

= 1.4.5 =
* افزونه دیگر چیزی بیشتر از آنچه هر مسیر لازم دارد نمی‌فرستد. تا نسخهٔ قبل، فیلد `action` و سرآیند `X-WP-Nonce` روی هر سه مسیر می‌رفت، در حالی که اولی را فقط مسیر قدیمی می‌خواهد و دومی را فقط مسیر REST. روی هاست‌های «سخت‌شده»، همین دو چیزِ اضافه می‌تواند درخواست را به قاعده‌های فایروال بیندازد.
* nonce کهنه (که روی فروشگاه‌های دارای کش صفحه عادی است) دیگر با «مسیر بسته است» قاطی نمی‌شود. پیامش صریح است: صفحه را تازه‌سازی کنید. پیش از این، پاسخش یک بدنهٔ دوحرفی بود که افزونه آن را «نرسیدیم» می‌خواند و بیهوده هر سه مسیر را امتحان می‌کرد.
* هر مسیری که به وردپرس نرسد، با نشانی و کد وضعیتش در کنسول مرورگر ثبت می‌شود. برای وقتی لازم است که فروشگاه‌دار صفحهٔ پرداخت را در حالت مهمان آزمایش می‌کند و پیام مخصوص مدیر را نمی‌بیند. هیچ دادهٔ مشتری در کنسول نمی‌آید.

= 1.4.4 =
* ادامهٔ همان رفع ۱.۴.۳، با یک مسیر سوم. روی فروشگاهی که گزارش داد، میزبانی **هم** `/wp-admin/admin-ajax.php` و **هم** `/wp-json/…` را با خطای ۴۰۴ رد می‌کرد. ولی در همان صفحه، نشانی‌های `?wc-ajax=` خودِ ووکامرس درست کار می‌کردند.
* افزونه حالا اول از همان مسیر ووکامرس استفاده می‌کند، بعد از شکل `?rest_route=` و در آخر از مسیر قدیمی. دو مسیر اول پارامتری روی ریشهٔ خودِ سایت‌اند، یعنی تا وقتی سایت بالا باشد در دسترس‌اند.
* پاسخِ ۲۰۰ با بدنهٔ خالی هم «نرسید» شمرده می‌شود و سراغ مسیر بعدی می‌رود. پیش از این چنین پاسخی «نشانی پیدا نشد» خوانده می‌شد و زنجیره همان‌جا می‌ایستاد.

= 1.4.3 =
* رفع علت اصلیِ «افزونه جواب نمی‌دهد» روی بعضی میزبانی‌ها: تکمیل نشانی تنها از مسیر `/wp-admin/admin-ajax.php` کار می‌کرد، و میزبان‌هایی که برای «سخت‌کردن وردپرس» کل `/wp-admin/` را روی بازدیدکنندهٔ بیرونی می‌بندند، آن را با خطای ۴۰۴ رد می‌کردند. درخواست اصلاً به وردپرس نمی‌رسید، پس نه افزونه خبردار می‌شد و نه چیزی در گزارش خطا می‌نشست.
* از این نسخه افزونه اول مسیر `/wp-json/` را امتحان می‌کند و اگر بسته بود، سراغ مسیر قبلی می‌رود. هر دو مسیر همان nonce و همان سقف مصرف را دارند.
* اگر هر دو مسیر بسته باشند، **مدیر فروشگاه** زیر همان پیام می‌بیند که مشکل از میزبانی است و کدام مسیرها باید باز شوند. مشتری همان پیام قبلی را می‌بیند.

= 1.4.2 =
* دکمهٔ تازهٔ **«آزمون اتصال»** در تنظیمات افزونه. یک درخواست آزمایشی می‌فرستد و صریح می‌گوید مشکل کجاست: کلید پذیرفته نشد، IP فروشگاه در فهرست مجاز نیست، دسترسی سرویس باز نشده، یا سرور فروشگاه اصلاً به ما نمی‌رسد. هر پیام می‌گوید کار بعدی چیست. این آزمون هزینه‌ای ندارد و از موجودی کم نمی‌کند.
* وقتی تکمیل نشانی نتیجه نمی‌دهد، **مدیر فروشگاه** زیر همان پیام یک خط تشخیص می‌بیند که می‌گوید سرویس رکوردی نداشت یا پاسخ خوانده نشد. مشتری همان پیام قبلی را می‌بیند و این خط را نمی‌بیند.
* تا پیش از این، این دو حالت یک پیام یکسان می‌دادند و مدیر فروشگاه هیچ راهی برای تشخیصشان نداشت.

= 1.4.1 =
* رفع یک ایراد ریشه‌ای در **تکمیل خودکار نشانی**: این قابلیت از ابتدا کار نمی‌کرد و برای هر کد پستیِ درست هم «نشانی پیدا نشد» می‌داد. افزونه انتظار داشت پاسخ سرویس یک متن ساده باشد، در حالی که پاسخ واقعی چند بخش جدا دارد (استان، شهر، خیابان، پلاک، طبقه). حالا نشانی از همان بخش‌ها ساخته می‌شود.
* فیلد **استان** هم خودکار پر می‌شود. پیش از این استعلام می‌شد، هزینه‌اش پرداخت می‌شد و دور ریخته می‌شد؛ مشتری باز هم باید استان را از فهرست انتخاب می‌کرد.
* پلاک و طبقه، اگر سرویس برگرداند، به نشانی اضافه می‌شوند.
* در گزارش خطا، «سرویس پاسخ نداد» از «پاسخ آمد ولی خوانده نشد» جدا شد. تا امروز هر دو یک پیام می‌دادند و همین، پیداکردن همین ایراد را طولانی کرد.

= 1.4.0 =
* رفع مهم‌ترین ایراد گزارش‌شده: **کد ملی نامعتبر دیگر به صفحهٔ پرداخت نمی‌رسد.** تا پیش از این، درستی کد ملی فقط *پس از* ثبت سفارش بررسی می‌شد و نتیجه به‌صورت یادداشت روی سفارش می‌نشست؛ یعنی مشتری با کد ملی ساختگی بی‌مانع تا پرداخت می‌رفت. حالا رقم کنترلی کد ملی همان لحظهٔ ثبت سفارش و بدون هیچ هزینه‌ای بررسی می‌شود.
* گزینهٔ تازه «رفتار هنگام عدم تطابق»: یا فقط روی سفارش ثبت شود (مثل قبل)، یا جلوی ثبت سفارش گرفته شود. پیش‌فرض تغییر نکرده است.
* گزینهٔ تازه «اگر استعلام ممکن نبود»: در قطعی سرویس، سفارش ثبت شود یا نه. پیش‌فرض همان «ثبت شود» است.
* از این پس **جا، عرض، برچسب و راهنمای فیلد کد ملی از تنظیمات تغییر می‌کند** و دیگر لازم نیست فایل افزونه دست‌کاری شود.
* اصلاح **«تأیید نام صاحب کارت»**: نام خانوادگیِ تنها، «سید» روی کارت، ترتیب معکوس و نام میانیِ اضافه، دیگر «عدم تطابق» ثبت نمی‌شوند. این حالت‌ها «تطابق نسبی» می‌گیرند تا شما تصمیم بگیرید.
* شمارهٔ موبایلِ نامناسب (مثل تلفن ثابت) پیش از فراخوان تشخیص داده می‌شود و استعلامِ قطعاً شکست‌خورده خرج نمی‌شود.
* نتیجهٔ استعلام در صفحهٔ سفارش رنگی شده و کد ملیِ بدشکل صریحاً علامت می‌خورد.
* در حالت «جلوگیری»، استعلام هر سفارش یک بار انجام می‌شود و نه دو بار.

= 1.3.1 =
* اصلاح دکمهٔ «رفتن به پنل احرازینو» که در نسخهٔ ۱.۳.۰ به نشانی اشتباه می‌رفت و صفحهٔ «پیدا نشد» می‌داد. حالا مستقیم به صفحهٔ کلیدهای پنل شما می‌رود.
* همان لینک، حالا یک دکمهٔ کامل است و در تب تازه باز می‌شود تا تغییرات ذخیره‌نشدهٔ فرم از دست نرود.

= 1.3.0 =
* بازطراحی صفحهٔ تنظیمات: قابلیت‌ها در سه کارتِ جدا، کلیدهای خاموش/روشن به‌جای تیک، و نواری که تا تغییری ذخیره نشده باشد به شما می‌گوید.
* نشانگر وضعیت در بالای صفحه: می‌گوید کلید ثبت شده، ثبت نشده، یا سرویس موقتاً پاسخ نمی‌دهد.
* دکمهٔ «بازنشانی» ویرایش‌های ذخیره‌نشده را برمی‌گرداند.
* کلید ذخیره‌شده مثل قبل هیچ‌وقت در صفحه نمی‌آید؛ فقط چند نویسهٔ اولش دیده می‌شود و برای تعویض، کلید تازه را وارد می‌کنید.

= 1.2.0 =
* قطعیِ سرویس دیگر فروشگاه را کند نمی‌کند. اگر استعلام پیاپی پاسخ ندهد، افزونه خودکار به حالت پیش‌فرض می‌رود: تکمیل نشانی دستی می‌شود و سفارش‌ها بدون معطلی ثبت می‌شوند و برچسب «بررسی دستی» می‌گیرند. چند دقیقه بعد خودش دوباره تلاش می‌کند.
* اعلان پیشخوان هنگام حالت پیش‌فرض، تا مدیر بداند سفارش‌های این بازه بدون استعلام ثبت شده‌اند.
* مهلت استعلام شاهکار در مسیر ثبت سفارش کوتاه‌تر شد تا مشتری پای دکمهٔ پرداخت منتظر نماند.

= 1.1.0 =
* به‌روزرسانی امنیتی. نصب این نسخه توصیه می‌شود.
* اصلاح «تأیید نام صاحب کارت»: در نسخه‌های پیشین ممکن بود نتیجهٔ درست را «عدم تطابق» ثبت کند. مقایسهٔ نام حالا «ي/ی»، «ك/ک» و نیم‌فاصله را یکسان می‌بیند.
* نتیجهٔ نامشخص دیگر «مردود» ثبت نمی‌شود و برچسب «نامعلوم، بررسی دستی» می‌گیرد.
* شمارش سقف نرخ روی فروشگاه‌های پشت CDN یا پراکسی اصلاح شد.
* ستون «احراز» در فهرست سفارش‌ها روی فروشگاه‌های بدون HPOS نمایش داده می‌شود.
* بازگشت پس از «بررسی نام صاحب کارت» روی فروشگاه‌های بدون HPOS اصلاح شد.
* حذف افزونه، تنظیمات و کشِ نشانی مشتری‌ها را هم پاک می‌کند.
* هشدار پیشخوان برای فروشگاه‌هایی که از چک‌اوت بلوکی استفاده می‌کنند.
* متن خطای سرویس پیش از ثبت در یادداشت سفارش پاک‌سازی می‌شود.

= 1.0.1 =
* به‌روزرسانی امنیتی. نصب این نسخه توصیه می‌شود.
* کد ملی از خروجی REST API ووکامرس حذف شد.
* کلید API در صفحهٔ تنظیمات نمایش داده نمی‌شود.
* اعلان پیشخوان هنگام پر شدن سقف مصرف.

= 1.0.0 =
* نسخهٔ اول: تکمیل نشانی از کد پستی، تطابق موبایل با کد ملی، تأیید نام صاحب کارت.
