المطورون قريبًا

حزم SDK ومكتبات العملاء

حزم SDK رسمية بلغات PHP و Node.js و Python جاهزة ومختبرة، لكنها لم تُنشر بعد. الواجهة البرمجية HTTPS و JSON بسيطان، فأي عميل HTTP يعمل اليوم.

تصف هذه الصفحة إمكانية غير متاحة بعد. ننشرها لتخطط مسبقًا، وقد تتغير تفاصيلها قبل الإطلاق. كل ما هو موسوم بـ "متاح" في هذا التوثيق يعمل اليوم.

اليوم: أي عميل HTTP

لا تحتاج إلى حزمة SDK: JSON في الطلب والرد عبر HTTPS، وترويسة واحدة. في كل صفحة أمثلة جاهزة للنسخ بـ cURL و PHP و Node.js و Python.

curl -X POST https://fatoora.tw.sa/api/v1/invoices \
  -H "Authorization: Bearer wbk_test_xxxxxxxxxxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -d '{
  "issue": false,
  "issue_date": "2026-11-03",
  "customer": {
    "name": "Example Trading Co.",
    "vat_number": "300000000000003",
    "address_line1": "King Fahd Rd",
    "city": "Riyadh",
    "postal_code": "12345",
    "country": "SA"
  },
  "items": [
    { "description": "Consulting", "quantity": 2, "unit_price": 500, "vat_rate": 15 }
  ]
}'
<?php
$response = $client->post('invoices', [
    'json' => [
        'issue'      => false,          // a draft: no legal number, nothing sent to ZATCA
        'issue_date' => '2026-11-03',
        'customer'   => [
            'name'          => 'Example Trading Co.',
            'vat_number'    => '300000000000003',
            'address_line1' => 'King Fahd Rd',
            'city'          => 'Riyadh',
            'postal_code'   => '12345',
            'country'       => 'SA',
        ],
        'items' => [
            ['description' => 'Consulting', 'quantity' => 2, 'unit_price' => 500, 'vat_rate' => 15],
        ],
    ],
    'http_errors' => false,
]);

$body = json_decode((string) $response->getBody(), true);
if ($body['ok']) {
    echo $body['data']['invoice']['number']; // DRAFT-… until it is issued
} else {
    echo $body['error']['code'];
}
const res = await fetch("https://fatoora.tw.sa/api/v1/invoices", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.WONDERFATOORA_API_KEY}`,
    "Content-Type": "application/json",
    Accept: "application/json",
  },
  body: JSON.stringify({
    issue: false, // a draft: no legal number, nothing sent to ZATCA
    issue_date: "2026-11-03",
    customer: {
      name: "Example Trading Co.",
      vat_number: "300000000000003",
      address_line1: "King Fahd Rd",
      city: "Riyadh",
      postal_code: "12345",
      country: "SA",
    },
    items: [{ description: "Consulting", quantity: 2, unit_price: 500, vat_rate: 15 }],
  }),
});

const body = await res.json();
if (!body.ok) throw new Error(`${body.error.code}: ${body.error.message}`);
console.log(body.data.invoice.id, body.data.invoice.number);
res = requests.post(
    "https://fatoora.tw.sa/api/v1/invoices",
    headers={
        "Authorization": f"Bearer {os.environ['WONDERFATOORA_API_KEY']}",
        "Accept": "application/json",
    },
    json={
        "issue": False,  # a draft: no legal number, nothing sent to ZATCA
        "issue_date": "2026-11-03",
        "customer": {
            "name": "Example Trading Co.",
            "vat_number": "300000000000003",
            "address_line1": "King Fahd Rd",
            "city": "Riyadh",
            "postal_code": "12345",
            "country": "SA",
        },
        "items": [
            {"description": "Consulting", "quantity": 2, "unit_price": 500, "vat_rate": 15}
        ],
    },
    timeout=30,
)
body = res.json()
print(res.status_code, body["data"]["invoice"]["number"] if body["ok"] else body["error"])

حزم SDK الرسمية

قريبًا كُتبت الحزم واختُبرت لكنها غير متاحة بعد: فهي غير منشورة على Packagist أو npm أو PyPI، ولا يوجد ما يُثبَّت اليوم. قد تتغير أسماء الحزم وتفاصيلها قبل الإطلاق.
اللغة اسم الحزمة المخطط المتطلبات
PHP wonderfatoora/wonderfatoora-php PHP 8.1 أو أحدث مع cURL، دون اعتماديات أخرى. مع تكامل اختياري لـ Laravel: مزوّد خدمة وواجهة Facade ووسيط للتحقق من Webhooks.
Node.js @wonderfatoora/sdk Node.js 18 أو أحدث، دون اعتماديات، مع أنواع TypeScript.
Python wonderfatoora Python 3.9 أو أحدث، بالمكتبة القياسية فقط، مع تعريفات الأنواع.

ما تقدمه

  • دالة لكل عملية في الواجهة البرمجية مع ردود محددة الأنواع، تُولَّد من مستند OpenAPI وتُحسَّن يدويًا.
  • ترويسة Idempotency-Key تُضاف تلقائيًا إلى كل عملية كتابة تقبلها، أو مفتاحك أنت إن مررته.
  • إعادة المحاولة بعد 429 و 503 مع انتظار Retry-After، للطلبات الآمنة إعادتها فقط.
  • أخطاء مصنفة تحمل code و message و details ومعرّف الطلب.
  • ترقيم بالمؤشر عبر مُكرِّر، وتنزيل ملفات PDF و XML كبايتات.
  • التحقق من توقيع Webhooks بمقارنة ثابتة الزمن وضمن نافذة زمنية، مع قبول السرّين أثناء التدوير.
  • إصدارات تتبع إصدار مستند OpenAPI للواجهة.

Laravel

راجع الربط مع Laravel لصنف خدمة وإعدادات ومهمة في الطابور يمكنك استخدامها اليوم.

مستند OpenAPI 3.1 منشور على /developers/openapi.json: يمكنك اليوم توليد عميل بلغتك بأي مولّد OpenAPI قياسي.

جاهز للبدء؟

الوصول إلى الواجهة البرمجية ضمن باقات: الأعمال والمؤسسات. أنشئ مفتاحًا من الإعدادات ← مفاتيح API وأرسل أول طلب خلال دقائق.