# سجل التغييرات

## سبتمبر 2026

### 10 سبتمبر

**يرسل نموذج HTML الآن حاوية موقَّعة.** بدل حقول الفاتورة المنفصلة — `data` (أي base64url لكائن JSON) و`signature` (أي HMAC-SHA256 للسلسلة `data`). وتغيّرت نقطة النهاية من `invoices/createFromForm` إلى `invoices/form`. النماذج القديمة لم تعد تعمل ويجب إعادة بنائها: انظر [توقيع نموذج HTML](./creating-invoices/html-forms/form-signature.md).

### 8 سبتمبر

**الحقول الرقمية في جسم الـ webhook صارت أرقامًا.** ستة حقول كانت تُرسل كسلاسل نصية صارت تُرسل أرقامًا: `project.commissionRate` و`invoice.commissionFiatUSD` و`invoice.amountFiatUSD` و`invoice.amountFiat` و`invoice.calcAmountFiat` و`payment.amount`. ولم تتغير مجموعة الحقول ولا أسماؤها ولا ترتيبها.

ضع في حسبانك: تُحذف الأصفار الأخيرة، فالمبلغ 10.00 يصل بالشكل 10. والمبالغ الأدنى من 0.0001 تصل بالترميز الأسي، مثلًا 1.0e-6 — تحليل JSON القياسي يعيد الرقم الصحيح؛ ولا ينكسر إلا التحليل اليدوي للسلاسل النصية.

الإشعارات المبنية قبل الإطلاق وغير المسلَّمة بعد تصل بالصيغة القديمة. وعلى جهة الاستقبال قبول الشكلين حتى يفرغ الطابور — ولا يستغرق ذلك أكثر من يومين.

### 6 سبتمبر

**الحقول الرقمية في استجابات API صارت أرقامًا.** يشمل ذلك `invoices/list` و`payments/list` و`invoices/create`.

| الحقل               | قبل              | بعد    |
| ------------------- | ---------------- | ------ |
| `commissionFiatUSD` | `"0.10"`         | `0.1`  |
| `amountFiatUSD`     | `"10.00"`        | `10`   |
| `amountFiat`        | `"1000.00"`      | `1000` |
| `views`             | `"0"`            | `0`    |
| `payment.amount`    | `"10.500000000"` | `10.5` |

**المفتاح المقيَّد بمشروع صار يطبّق القيد في كل الطرق.** كانت بعض الطرق تتجاهل المشروع سابقًا. الآن هو مرشِّح في طرق القوائم، ويرفض الخادم طلب فاتورة أو محفظة من مشروع آخر بالرد `Restricted project`. والطريقة التي لا تستطيع احترام قيد المشروع مغلقة أمام مفتاح كهذا. التفاصيل في قسم «نطاق المفتاح».

**قائمة الدفعات صارت تعيد الدفعات غير المرتبطة.** كانت `payments/list` تعيد سابقًا الدفعات المربوطة بفاتورة فقط. الآن تشمل النتائج كل الدفعات عبر محافظك؛ وغير المرتبطة منها لا تحمل كائن `invoice`. وهذه بالضبط هي الدفعات اللازمة للربط اليدوي عبر `invoices/bindPayment`.

**إلغاء الفاتورة صار يميّز أسباب الرفض.** سابقًا كانت الفاتورة الغائبة والشروط غير المستوفاة تعيدان كلتاهما ردًا عامًا `Invoice not found`. الآن يعني `Invoice not found` فقط أن الفاتورة غير موجودة، بينما تعيد الشروط غير المستوفاة `Invoice cannot be canceled`.

**المعرّفات المشوهة صارت تُرفض.** تتحقق `invoices/list` من `invoiceId` و`invoiceUid` و`projectId`؛ و`payments/list` — من `walletId` و`invoiceId`. والقيمة غير الملائمة تعيد `Parameter is filled in incorrectly` مع اسم الحقل. سابقًا كان معطى كهذا يُسقط بصمت وتعود النتائج من دون ترشيح.

**حدود الفترة صارت تشمل اليوم المسمى كاملًا.** يُفسَّر `startDate` و`endDate` من `00:00:00` إلى `23:59:59`. سابقًا كان يوم النهاية يُقتطع كليًا، وكان استعلام يوم واحد يعيد فقط السجلات المنشأة عند منتصف الليل بالضبط. يشمل ذلك `invoices/list` و`payments/list` و`statistics/invoices` و`statistics/payments`.

**أُضيف حقل المشروع إلى سجل الرصيد.** كل عملية في الطريقة `billing/history` تحمل الآن حقل `projectId`. وللعمليات على مستوى الحساب — الإيداعات والمكافآت — يكون `null`.

### 4 سبتمبر

**الوصف والبيانات الخدمية صارا يعودان بشكلهما الأصلي.** كان الحقلان `description` و`serviceData` يُخزَّنان مرمَّزين، وكانت علامة الاقتباس تصل في استجابات API بالشكل `&quot;` وعلامة أصغر من بالشكل `<`. الآن يعود بالضبط ما أرسله التاجر. وعند العرض في HTML هرّب القيمة من جهتك.

**نماذج HTML صارت تقبل POST فقط.** إنشاء فاتورة باتباع رابط بمعطيات في شريط العنوان لم يعد يعمل — تُقرأ المعطيات من جسم الطلب فقط. فإذا كنت تستخدم روابط، فاستبدل بها نموذجًا بالسمة `method="post"`.

### 3 سبتمبر

**إشعارات الـ webhook صارت موقَّعة.** أُضيفت الترويستان `X-Timestamp` و`X-Signature`؛ ويُحسب التوقيع بخوارزمية HMAC-SHA256 على المفتاح السري للـ Webhook. والتحقق من التوقيع يتيح لك تمييز الإشعار الأصلي من المزوَّر. الآلية والأمثلة في قسم «التحقق من توقيع الـ Webhook».

التغيير متوافق مع السابق: إذا لم تضف التحقق، يستمر معالجك في العمل كما كان.
