> ## Documentation Index
> Fetch the complete documentation index at: https://docs.oneclickdz.com/llms.txt
> Use this file to discover all available pages before exploring further.

# قائمة خطط الهاتف المحمول

> الحصول على جميع خطط شحن الهاتف المحمول المتاحة للمشغّلين الجزائريين

<div dir="rtl">
  ## نظرة عامة

  يُرجع قائمة شاملة بجميع خطط شحن الهاتف المحمول المتاحة لمشغّلي Mobilis وDjezzy وOoredoo.

  <Note>
    الخطط مستقرة ونادرًا ما تتغير. **آمن لتخزينها مؤقتًا** في قاعدة بياناتك مع أسعارك الخاصة.
  </Note>

  ## أنواع الخطط

  <Tabs>
    <Tab title="الخطط الديناميكية">
      **خطط بمبالغ متغيرة** حيث تحدد المبلغ ضمن نطاق معين.
      **أمثلة:** Prépayé، Postpayé (Facture)، الدولي **الحقول المطلوبة:** - `plan_code` - `MSSIDN` (رقم الهاتف) - `amount` (بين `min_amount` و`max_amount`)
    </Tab>

    <Tab title="الخطط الثابتة">
      **خطط بمبالغ ثابتة** يتم تفعيلها مباشرة. **أمثلة:** "Pixx 500"،
      "Special 2000"، "Data Pack 1GB" **الحقول المطلوبة:** - `plan_code` - `MSSIDN`
      (رقم الهاتف) - المبلغ محدد مسبقًا (الحقل `amount` في الاستجابة)
    </Tab>

    <Tab title="خطط GetMenu">
      **خطط خاصة** تسترد جميع العروض المتاحة لرقم معين.
      **الرموز:** `GETMENU_Mobilis`، `GETMENU_Ooredoo`، `GETMENU_Djezzy` تُرجع العروض المتاحة للمستخدم بناءً على اشتراكه.
    </Tab>
  </Tabs>

  ## الاستجابة

  <ResponseField name="success" type="boolean" required>
    يشير إلى نجاح الطلب
  </ResponseField>

  <ResponseField name="data" type="object" required>
    <Expandable title="properties">
      <ResponseField name="dynamicPlans" type="array" required>
        مصفوفة من الخطط بمبالغ متغيرة حيث تحدد المبلغ ضمن نطاق

        <Expandable title="Dynamic plan object">
          <ResponseField name="code" type="string">
            رمز خطة فريد لطلبات API
          </ResponseField>

          <ResponseField name="name" type="string">
            اسم خطة سهل الاستخدام للعرض
          </ResponseField>

          <ResponseField name="operator" type="string">
            المشغّل: Mobilis، Djezzy، Ooredoo (أو GMobilis، GDjezzy، GOoredoo للجملة)
          </ResponseField>

          <ResponseField name="cost" type="number">
            مضاعف التكلفة الخاص بك (مثلًا: 0.96 = تدفع 960 دينار مقابل شحن 1000 دينار). موجود فقط لخطط التجزئة.
          </ResponseField>

          <ResponseField name="isEnabled" type="boolean">
            ما إذا كانت الخطة متاحة حاليًا
          </ResponseField>

          <ResponseField name="min_amount" type="number">
            الحد الأدنى لمبلغ الشحن بالدينار الجزائري
          </ResponseField>

          <ResponseField name="max_amount" type="number">
            الحد الأقصى لمبلغ الشحن بالدينار الجزائري
          </ResponseField>
        </Expandable>
      </ResponseField>

      <ResponseField name="fixedPlans" type="array" required>
        مصفوفة من الخطط بمبالغ ثابتة يتم تفعيلها مباشرة

        <Expandable title="Fixed plan object">
          <ResponseField name="code" type="string">
            رمز خطة فريد لطلبات API
          </ResponseField>

          <ResponseField name="name" type="string">
            اسم خطة سهل الاستخدام للعرض
          </ResponseField>

          <ResponseField name="operator" type="string">
            المشغّل
          </ResponseField>

          <ResponseField name="cost" type="number">
            مضاعف التكلفة الخاص بك
          </ResponseField>

          <ResponseField name="isEnabled" type="boolean">
            ما إذا كانت الخطة متاحة حاليًا
          </ResponseField>

          <ResponseField name="amount" type="number">
            مبلغ الشحن الثابت بالدينار الجزائري
          </ResponseField>
        </Expandable>
      </ResponseField>
    </Expandable>
  </ResponseField>

  <ResponseField name="meta" type="object" required>
    <Expandable title="properties">
      <ResponseField name="timestamp" type="string">
        طابع زمني للاستجابة بتنسيق ISO 8601
      </ResponseField>
    </Expandable>
  </ResponseField>

  ## الأمثلة

  <CodeGroup>
    ```bash cURL theme={null}
    curl https://api.oneclickdz.com/v3/mobile/plans \
      -H "X-Access-Token: YOUR_API_KEY"
    ```

    ```javascript Node.js theme={null}
    const response = await fetch("https://api.oneclickdz.com/v3/mobile/plans", {
      headers: { "X-Access-Token": "YOUR_API_KEY" },
    });
    const { data } = await response.json();
    console.log(data.dynamicPlans, data.fixedPlans);
    ```

    ```python Python theme={null}
    import requests

    response = requests.get(
        'https://api.oneclickdz.com/v3/mobile/plans',
        headers={'X-Access-Token': 'YOUR_API_KEY'}
    )
    data = response.json()['data']
    dynamic_plans = data['dynamicPlans']
    fixed_plans = data['fixedPlans']
    ```

    ```php PHP theme={null}
    <?php
    $ch = curl_init('https://api.oneclickdz.com/v3/mobile/plans');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, ['X-Access-Token: YOUR_API_KEY']);
    $response = json_decode(curl_exec($ch), true);
    $dynamicPlans = $response['data']['dynamicPlans'];
    $fixedPlans = $response['data']['fixedPlans'];
    ?>
    ```
  </CodeGroup>

  ### مثال على الاستجابة

  ```json theme={null}
  {
    "success": true,
    "data": {
      "dynamicPlans": [
        {
          "code": "PREPAID_DJEZZY",
          "name": "📱 PREPAID | عادي",
          "operator": "Djezzy",
          "cost": 0.9925,
          "isEnabled": true,
          "min_amount": 100,
          "max_amount": 10000
        },
        {
          "code": "PREPAID_MOBILIS",
          "name": "📱 PREPAID | عادي",
          "operator": "Mobilis",
          "cost": 0.96,
          "isEnabled": true,
          "min_amount": 40,
          "max_amount": 3999
        }
      ],
      "fixedPlans": [
        {
          "code": "MIX50_DJEZZY",
          "name": "📱🌐 Auto | MIX 50",
          "operator": "Djezzy",
          "isEnabled": true,
          "cost": 0.9925,
          "amount": 50
        },
        {
          "code": "MIX1000_OOREDOO",
          "name": "📱🌐 AUTO | MIX 1000",
          "operator": "Ooredoo",
          "isEnabled": true,
          "cost": 0.99,
          "amount": 1000
        }
      ]
    },
    "meta": {
      "timestamp": "2025-10-29T00:35:59.220Z"
    }
  }
  ```

  ## شرح خصائص الخطط

  <AccordionGroup>
    <Accordion title="فهم التكلفة (cost)">
      الحقل `cost` هو مضاعف سعر الجملة الخاص بك:

      * `0.98` = تدفع 98% من القيمة الاسمية
      * لشحن 1000 دينار: تكلفتك = 1000 × 0.98 = 980 دينار
      * هامش ربحك: 1000 - 980 = 20 دينار (2%)

      **مهم:** احذف `cost` من الاستجابات للمستخدمين النهائيين. طبّق هامش الربح الخاص بك.
    </Accordion>

    {" "}

    <Accordion title="نطاقات المبالغ">
      **الخطط الديناميكية** لها `min_amount` و`max_amount`: - يمكن للمستخدمين اختيار أي
      مبلغ ضمن هذا النطاق - النطاق الشائع: 50 - 5000 دينار - بعض المشغّلين يسمحون
      بحتى 10,000 دينار **الخطط الثابتة** لها `amount` واحد: - لا يلزم اختيار مبلغ

      * تفعيل الخدمة مباشرة - شائع للعروض الخاصة وحزم البيانات
    </Accordion>

    <Accordion title="توفر الخطة">
      الحقل `isEnabled` يشير إلى:

      * `true`: الخطة متاحة للاستخدام
      * `false`: معطّلة مؤقتًا (صيانة، مشكلات المشغّل)

      تحقق دائمًا من هذا الحقل قبل السماح للمستخدمين باختيار خطة.
    </Accordion>
  </AccordionGroup>

  ## استراتيجية التكامل

  <Steps>
    <Step title="التحميل الأولي">
      استدعِ هذا endpoint مرة واحدة عند بدء تشغيل تطبيقك أو أثناء الإعداد
    </Step>

    <Step title="تخزين الخطط">
      احفظ الخطط في قاعدة بياناتك مع أسعارك الخاصة

      ```sql theme={null}
      CREATE TABLE mobile_plans (
        code VARCHAR PRIMARY KEY,
        name VARCHAR,
        operator VARCHAR,
        our_cost DECIMAL,
        sell_price DECIMAL,
        min_amount INT,
        max_amount INT,
        amount INT,
        is_enabled BOOLEAN,
        updated_at TIMESTAMP
      );
      ```
    </Step>

    <Step title="تطبيق هامش الربح">
      احسب سعر البيع الخاص بك:

      ```javascript theme={null}
      const ourCost = faceValue * plan.cost;
      const markup = 0.05; // 5% profit
      const sellPrice = ourCost * (1 + markup);
      ```
    </Step>

    <Step title="خدمة المستخدمين">
      اعرض الخطط مع أسعارك للمستخدمين النهائيين

      ```javascript theme={null}
      {
        code: plan.code,
        name: plan.name,
        operator: plan.operator,
        price: sellPrice,
        minAmount: plan.min_amount,
        maxAmount: plan.max_amount
      }
      ```
    </Step>

    <Step title="المزامنة الدورية">
      زامن الخطط يوميًا أو عند إشعار بالتغييرات

      ```javascript theme={null}
      // Daily sync at midnight
      cron.schedule('0 0 * * *', syncPlans);
      ```
    </Step>
  </Steps>

  ## تصفية الخطط

  <CodeGroup>
    ```javascript By Operator theme={null}
    const mobilisPlans = [
      ...data.dynamicPlans.filter((p) => p.operator === "Mobilis"),
      ...data.fixedPlans.filter((p) => p.operator === "Mobilis")
    ];
    const djezzyPlans = [
      ...data.dynamicPlans.filter((p) => p.operator === "Djezzy"),
      ...data.fixedPlans.filter((p) => p.operator === "Djezzy")
    ];
    ```

    ```javascript By Type theme={null}
    const dynamicPlans = data.dynamicPlans;
    const fixedPlans = data.fixedPlans;
    const allPlans = [...data.dynamicPlans, ...data.fixedPlans];
    ```

    ```javascript Enabled Only theme={null}
    const availableDynamic = data.dynamicPlans.filter((p) => p.isEnabled);
    const availableFixed = data.fixedPlans.filter((p) => p.isEnabled);
    ```
  </CodeGroup>

  ## أفضل الممارسات

  <CardGroup cols={2}>
    <Card title="تخزين الخطط مؤقتًا" icon="database">
      خزّن الخطط في قاعدة بياناتك لتقليل استدعاءات API وتحسين الأداء
    </Card>

    <Card title="إخفاء التكلفة" icon="eye-slash">
      لا تكشف أبدًا عن `cost` الجملة للمستخدمين النهائيين. اعرض فقط أسعار التجزئة الخاصة بك
    </Card>

    <Card title="التحقق من isEnabled" icon="circle-check">
      تحقق دائمًا من `isEnabled` قبل عرض الخطط للمستخدمين
    </Card>

    <Card title="المزامنة المنتظمة" icon="arrows-rotate">
      نفّذ مزامنة يومية أو مستمعًا لـ webhook لتحديثات الخطط
    </Card>
  </CardGroup>

  ## Endpoints ذات الصلة

  <CardGroup cols={2}>
    <Card title="إرسال الشحن" icon="paper-plane" href="/ar/api-reference/mobile/send-topup">
      إرسال شحن هاتف محمول باستخدام رمز الخطة
    </Card>

    <Card title="التحقق من الحالة" icon="magnifying-glass" href="/ar/api-reference/mobile/check-by-ref">
      تتبع حالة الشحن
    </Card>
  </CardGroup>
</div>
