DEV Community

Cover image for تسجيل الدخول بـ ChatGPT للمطورين: تدفق OAuth، استهلاك الخطة، وتأثيره على فاتورة API
Yusuf Khalidd
Yusuf Khalidd

Posted on Originally published at apidog.com

تسجيل الدخول بـ ChatGPT للمطورين: تدفق OAuth، استهلاك الخطة، وتأثيره على فاتورة API

تسجيل الدخول باستخدام ChatGPT هو نظام تسجيل دخول من OpenAI مبني على OAuth 2.0 وOpenID Connect، ومتاح لمستخدمي ChatGPT حول العالم. يمنح تطبيقك معرّف حساب ثابتًا، إلى جانب الاسم والبريد الإلكتروني وصورة الملف الشخصي. منذ DevDay في 29 سبتمبر 2026، يستطيع مستخدمو Plus وPro أيضًا السماح للتطبيقات المشاركة بتنفيذ طلبات ذكاء اصطناعي ضمن خطة ChatGPT الخاصة بهم بدلًا من استخدام مفتاح API الخاص بتطبيقك، وفق حد أسبوعي يضبطه المستخدم لكل تطبيق. لا يحصل تطبيقك مطلقًا على محادثات المستخدم أو ذكرياته أو مفتاح OpenAI API الخاص به.

جرّب Apidog اليوم

يغطي هذا الدليل تدفق تسجيل الدخول، واستخدام خطة المستخدم، ومتى تستخدم خطة ChatGPT بدل مفتاح API، وكيف تختبر تدفقات النجاح والفشل في Apidog. وللسياق، راجع ملخص DevDay 2026. وإذا لم يكن الفرق بين الهوية والتفويض واضحًا، ابدأ بـ OAuth مقابل OpenID.

تسجيل الدخول باستخدام ChatGPT بنظرة سريعة

البند ما توثقه OpenAI
نطاقات الهوية openid profile email
نطاقات استخدام الخطة لتدفق المصدر المفتوح offline_access resource.invoke chatgpt.tokens.use.direct، مع resource=https://api.openai.com/v1
ما يتلقاه تطبيقك رمز تعريف (ID token)، ومع استخدام الخطة: رمز وصول (access token) ورمز تحديث (refresh token)
أهلية استخدام الخطة مستخدمو Plus وPro في التطبيقات المشاركة
مكان احتساب الاستخدام استخدام خطة ChatGPT Work وCodex
التحكم لكل تطبيق حد أسبوعي كنسبة من إجمالي الاستخدام الأسبوعي؛ الأرصدة بعد تجاوز الحد معطلة افتراضيًا
صلاحية رموز استخدام الخطة رمز الوصول ساعة واحدة؛ رمز التحديث 30 يومًا ويُستبدل عند كل تحديث
وصول المطورين التطبيقات التجارية: تجربة محدودة عبر نموذج اهتمام. تطبيقات المصدر المفتوح: خدمة ذاتية

المصادر: وثائق تسجيل الدخول باستخدام ChatGPT، ومرجع الرمز، ومقالة OpenAI حول استخدام خطة ChatGPT في تطبيقات ومواقع أخرى.

ما يتلقاه تطبيقك وما لا يتلقاه

ابدأ بالهوية فقط ما لم تكن تحتاج فعلًا إلى تشغيل طلبات Responses API ضمن خطة المستخدم.

عند طلب النطاقات التالية:

openid profile email
Enter fullscreen mode Exit fullscreen mode

يتلقى عميلك رمز تعريف id_token. وفق دليل الموقع الإلكتروني:

  • يمنح profile مطالبات متاحة مثل الاسم وصورة الملف الشخصي.
  • يمنح email البريد الإلكتروني وحالة تأكيده.
  • لا تمنح نطاقات الهوية وصولًا إلى محادثات ChatGPT أو موارد OpenAI API.

اربط الحسابات باستخدام sub

لا تستخدم البريد الإلكتروني كمفتاح ربط للحساب. اربط المستخدم المحلي باستخدام:

issuer + client_id + sub
Enter fullscreen mode Exit fullscreen mode

توضح OpenAI أن تطابق البريد الإلكتروني وحده لا يثبت ملكية الحساب. إذا كان لديك مستخدم حالي بنفس البريد الإلكتروني، اطلب منه تأكيد ربط الحساب بدلًا من دمج الحسابات تلقائيًا.

اطلب استخدام الخطة كمنح منفصل

استخدام الخطة ليس جزءًا من تسجيل الدخول الأساسي. عند موافقة المستخدم على النطاقات الإضافية، قد يتضمن رد الرمز access_token لتنفيذ طلبات Responses API المؤهلة.

إذا كان تطبيقك يحتاج الهوية فقط:

  • اطلب openid profile email.
  • تعامل مع id_token فقط.
  • لا تعتمد على وجود access_token.

كيف يعمل تدفق OAuth

تدفق الويب هو رمز التفويض مع PKCE مع OIDC.

حمّل بيانات الاكتشاف من:

https://auth.openai.com/.well-known/openid-configuration
Enter fullscreen mode Exit fullscreen mode

وتسرد الوثائق نقاط النهاية الإنتاجية التالية:

Issuer:                 https://auth.openai.com
Authorization endpoint: https://auth.openai.com/api/accounts/authorize
Token endpoint:         https://auth.openai.com/api/accounts/oauth/token
JWKS URI:               https://auth.openai.com/.well-known/jwks.json
Enter fullscreen mode Exit fullscreen mode

خطوات التنفيذ

  1. أنشئ في الواجهة الخلفية قيمًا جديدة لكل محاولة تسجيل دخول:

    • state
    • nonce
    • code_verifier
    • code_challenge باستخدام S256
  2. أعد توجيه المتصفح إلى نقطة التفويض مع:

    • client_id
    • redirect_uri المسجل حرفيًا
    • النطاقات المطلوبة
    • state
    • nonce
    • code_challenge
    • code_challenge_method=S256
  3. بعد موافقة المستخدم، تستقبل دالة رد الاتصال code وstate.

  4. قبل تبادل الرمز:

    • تحقق من state.
    • بدّل code مقابل الرموز في Token endpoint باستخدام code_verifier.
  5. تحقّق من id_token في الواجهة الخلفية:

    • التوقيع باستخدام JWKS.
    • iss.
    • aud.
    • تاريخ الانتهاء exp.
    • قيمة nonce.
  6. ابحث عن الحساب المحلي باستخدام sub أو أنشئه أو اطلب تأكيد الربط، ثم أصدر جلسة تطبيقك الخاصة.

العملاء العموميون لا يرسلون سر عميل. أما العميل السري الذي يستخدم client_secret_basic فيرسل السر ضمن رأس HTTP Basic فقط.

تدفق أدوات المصدر المفتوح

تسجل أدوات المصدر المفتوح بشكل مختلف. يبدأ دليل تسجيل الدخول مفتوح المصدر باستخدام:

client_id=dynamic_agent_client
Enter fullscreen mode Exit fullscreen mode

ويستخدم أيضًا:

  • agent_name_hint: اسم تطبيقك.
  • ext_agent_host_id: معرّف ثابت لكل مضيف وكيل خارجي.
  • عنوان رد محلي من نوع 127.0.0.1.

تعيد دالة رد الاتصال معرّف عميل صادرًا، مثل:

oaiapp_...
Enter fullscreen mode Exit fullscreen mode

احفظ هذا المعرف وأعد استخدامه. لا يتضمن هذا التدفق سر عميل.

كيف يعمل استخدام الخطة للمستخدم

وثّق هذه النقاط للمستخدمين داخل واجهة تطبيقك وصفحات الدعم:

  • الطلبات المؤهلة تُحتسب ضمن الخطة: تستخدم استهلاك ChatGPT Work وCodex في خطة Plus أو Pro.
  • لكل تطبيق حد أسبوعي: يحدده المستخدم كنسبة من إجمالي استخدامه الأسبوعي. تعرض الوثائق مثالًا يتراوح بين 10% و100%.
  • الحد ليس رصيدًا محجوزًا: يمكن لاستخدام المستخدم في تطبيقات أو خدمات أخرى أن يستنفد الخطة أولًا.
  • الأرصدة اختيارية: الاستمرار باستخدام الأرصدة بعد تجاوز الحد معطّل افتراضيًا، ويتطلب أن يضبط المستخدم حد التطبيق على 100%.
  • Plus لها نافذة استخدام مشتركة لمدة خمس ساعات: وفق صفحة الحسابات والجلسات، تنطبق هذه النافذة على التطبيقات التي تستخدم الخطة. لا ينطبق ذلك على Pro.
  • قطع الاتصال يوقف الاستخدام المستقبلي: لا يعكس الاستخدام الذي تم احتسابه بالفعل، ولا ترسل OpenAI إشعارًا مباشرًا إلى تطبيقك. ستكتشف الحالة عند فشل طلب أو تحديث رمز.

يمكن للمستخدم إدارة هذه الإعدادات في:

chatgpt.com/settings/usage
Enter fullscreen mode Exit fullscreen mode

وتطلب إرشادات واجهة المستخدم من OpenAI توفير رابط واضح باسم إدارة الاستخدام.

من يشارك عند الإطلاق، وكيف تحصل على معرف العميل

يسرد ملخص DevDay من OpenAI ستة عشر شريكًا لاستخدام الخطة، منهم Devin من Cognition وNotion وVercel وT3 وOpenClaw وDactyl. وتذكر The New Stack Amp وWarp وKilo Code وOpenCode، مع الإشارة إلى Lovable باعتباره قادمًا قريبًا. إذا كنت تستخدم OpenClaw، فهو موجود في القائمتين.

ونقلت The New Stack عن سام ألتمان قوله: “الآن لم تعد مضطرًا لتغطية تكاليف الرموز الخاصة بهم لتشغيلهم”.

يعتمد مسار المشاركة على نوع تطبيقك:

  • التطبيقات التجارية أو المستضافة: تسجيل الدخول تجربة محدودة. يمكنك طلب معرف عميل عبر نموذج اهتمام OpenAI، سواء كنت تحتاج الهوية فقط أو استخدام الخطة أيضًا.
  • أدوات المصدر المفتوح والمستضافة محليًا: استخدام الخطة متاح للشركاء مفتوحي المصدر عبر تدفق الخدمة الذاتية.

ما الذي يتغير في فاتورة API الخاصة بك

عند استخدام مفتاح API الخاص بك، تدفع مقابل كل رمز وتستعيد التكلفة عبر تسعير منتجك. عند استخدام خطة ChatGPT الخاصة بالمستخدم، تنتقل تكلفة النموذج إلى اشتراك المستخدم.

لكن هذا لا يلغي الحاجة إلى مفتاح API خاص بتطبيقك. استخدم المسارين وفق نوع المستخدم والطلب.

مفتاح API الخاص بك خطة ChatGPT للمستخدم
من يدفع أنت، لكل رمز خطة المستخدم، والأرصدة فقط إذا وافق المستخدم
من يمكنه استخدامه جميع المستخدمين مستخدمو Plus وPro الذين يمنحون chatgpt.tokens.use.direct
الحدود فئة حد السعر الخاصة بك استخدام الخطة الأسبوعي، حد كل تطبيق، ونافذة Plus لخمس ساعات
شكل الطلب واجهة Responses API الكاملة يتطلب store: false وstream: true؛ لا يوجد temperature أو max_output_tokens أو File Search أو Code Interpreter
الفشل المعتاد 429 عند تجاوز فئتك 429 subscription_sharing_usage_limit_exceeded، أو الرمز نفسه في response.failed أثناء التدفق
الحل البديل تصممه أنت لا يوجد تبديل تلقائي للفوترة من OpenAI
ما تعرضه للمستخدم استخدامك وتسعيرك “باستخدام خطة ChatGPT” ورابط إدارة الاستخدام والخطط المدعومة

تأتي هذه القيود من صفحة قيود المعاينة: الميزات التي تعتمد على حالة محادثة مخزنة أو أدوات مستضافة لا تعمل حاليًا ضمن خطة المستخدم.

نمط تنفيذ عملي: المسار الهجين

استخدم خطة المستخدم في الحالات التالية:

  • العمل التفاعلي داخل التطبيق.
  • مستخدم Plus أو Pro وافق على استخدام الخطة.
  • الطلب متوافق مع قيود التدفق والتخزين.

واستخدم مفتاح API الخاص بك في الحالات التالية:

  • المستخدمون غير المؤهلين.
  • المهام الخلفية.
  • CI.
  • الوكلاء المجدولون.
  • الطلبات التي تحتاج ميزات غير مدعومة ضمن استخدام الخطة.

عند وصول المستخدم إلى الحد، لا تبدّل الفوترة تلقائيًا. اعرض رابط إدارة الاستخدام، ويمكنك عرض أرصدتك الخاصة كخيار ثانوي. راجع مقارنة مفتاح API مقابل OAuth لفهم المفاضلة العامة، وOAuth لوكلاء الذكاء الاصطناعي لتنفيذ العمل نيابة عن المستخدم بأمان.

كيفية اختبار تدفق تسجيل الدخول ومسارات الفشل في Apidog

لا ينفذ Apidog تسجيل دخول المستخدمين باستخدام ChatGPT بدلًا عنك، لكنه يساعدك على اختبار إعداد OAuth، واستدعاءات Token endpoint، وحالات الخطأ. نزّل Apidog وأنشئ بيئة اختبار منفصلة.

1. خزّن إعدادات العميل كمتغيرات بيئة

أضف المتغيرات التالية:

SIWC_CLIENT_ID
SIWC_REDIRECT_URI
SIWC_CLIENT_SECRET
ACCESS_TOKEN
Enter fullscreen mode Exit fullscreen mode

اجعل SIWC_CLIENT_SECRET قيمة حساسة للعميل السري، ثم استخدم المتغيرات في الطلبات بهذه الصيغة:

{{SIWC_CLIENT_ID}}
Enter fullscreen mode Exit fullscreen mode

بهذا لا تُحفظ الأسرار داخل الطلبات المشتركة أو المصدرة.

2. شغّل تدفق رمز التفويض مع PKCE

في تبويب Auth في Apidog:

  1. اختر OAuth 2.0.
  2. اختر Authorization Code.
  3. فعّل PKCE.
  4. أدخل نقاط النهاية الخاصة بـ OpenAI.
  5. اضبط النطاق المبدئي على:
   openid profile email
Enter fullscreen mode Exit fullscreen mode
  1. استخدم عنوان رد الاتصال المسجل للعميل.

راجع دليل اختبار OAuth 2.0 في Apidog لشرح الحقول.

3. اختبر رد تبادل الرموز

احفظ تبادل الرموز كطلب POST مستقل إلى Token endpoint. أرسل الرمز ومتحقق PKCE وعنوان إعادة التوجيه ومعرف العميل.

أضف اختبارًا لاحقًا للتحقق من وجود id_token ومطالباته الأساسية:

const body = pm.response.json();

pm.test("token exchange returned an ID token", () => {
  pm.expect(pm.response.code).to.eql(200);
  pm.expect(body.id_token).to.be.a("string");
});

const decode = require("atob");
const part = body.id_token
  .split(".")[1]
  .replace(/-/g, "+")
  .replace(/_/g, "/");

const claims = JSON.parse(
  decode(part + "=".repeat((4 - (part.length % 4)) % 4))
);

pm.test("ID token claims match this client", () => {
  pm.expect(claims.iss).to.eql("https://auth.openai.com");
  pm.expect(claims.aud).to.include(pm.environment.get("SIWC_CLIENT_ID"));
  pm.expect(claims.sub).to.be.a("string").and.not.empty;
  pm.expect(claims.exp * 1000).to.be.above(Date.now());
});
Enter fullscreen mode Exit fullscreen mode

استخدم هذا الاختبار للتحقق من البنية والمطالبات الأساسية فقط. يظل التحقق من التوقيع وnonce مسؤولية الواجهة الخلفية لتطبيقك.

لا تفشل الاختبار إذا لم تظهر name أوemail أوpicture، لأنها مطالبات اختيارية عند توفرها.

إذا كنت تختبر استخدام الخطة، تأكد أيضًا من احتواء body.scope على:

chatgpt.tokens.use.direct
Enter fullscreen mode Exit fullscreen mode

4. حاكي مسارات الفشل

اختبار حساب Plus حقيقي وحده لا يغطي الحالات الحرجة. أنشئ هذه الاستجابات من خادم Apidog الوهمي واختبر سلوك تطبيقك:

  • رفض استخدام الخطة: رد رمز لا يحتوي نطاقه scope على chatgpt.tokens.use.direct.

    يجب أن يبقى المستخدم مسجلًا للدخول، مع عرض خيار تمكين استخدام الخطة أو الانتقال إلى مسار فوترة بديل.

  • الوصول إلى الحد الأقصى: استجابة 429 مع:

  error.code = subscription_sharing_usage_limit_exceeded
Enter fullscreen mode Exit fullscreen mode

اختبر أيضًا ظهور الرمز نفسه ضمن حدث تدفق response.failed. يجب أن يوقف تطبيقك طلبات استخدام الخطة لهذه الجلسة.

  • المستخدم غير مؤهل: استجابة:
  403 subscription_sharing_user_not_eligible
Enter fullscreen mode Exit fullscreen mode

لا تعِد المحاولة ولا تبدأ OAuth تلقائيًا من جديد.

  • المستخدم غير متصل: تحديث رمز يعيد:
  invalid_grant
Enter fullscreen mode Exit fullscreen mode

أو طلب يعيد:

  401 subscription_sharing_invalid_user
Enter fullscreen mode Exit fullscreen mode

امسح الرموز المخزنة واطلب من المستخدم تسجيل الدخول مرة أخرى.

اربط هذه الحالات في سيناريو اختبار وشغّله ضمن CI باستخدام CLI الخاص بـ Apidog. راجع صفحة الأخطاء والاسترداد للحصول على القائمة الكاملة.

5. تحقق من الاستدعاء المباشر

باستخدام رمز خطة حقيقي، أرسل طلب التدفق الموثق. في Apidog، عيّن التفويض إلى:

Bearer {{ACCESS_TOKEN}}
Enter fullscreen mode Exit fullscreen mode

يجب أن ينتهي التدفق بحدث:

response.completed
Enter fullscreen mode Exit fullscreen mode

وهو إشارة النجاح النهائية.

curl --no-buffer https://api.openai.com/v1/responses \
  -H "Authorization: Bearer ${ACCESS_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-6.1-sol",
    "input": [{"role": "user", "content": "Say exactly: Hello, world!"}],
    "store": false,
    "stream": true
  }'
Enter fullscreen mode Exit fullscreen mode

الأسئلة الشائعة

هل يمكن للمستخدمين المجانيين تسجيل الدخول باستخدام ChatGPT؟

نعم، تسجيل الدخول متاح لمستخدمي ChatGPT عالميًا. لكن استخدام خطة ChatGPT داخل تطبيق آخر يتطلب اشتراك Plus أو Pro.

هل يحصل تطبيقي على مفتاح OpenAI API الخاص بالمستخدم؟

لا. يحصل تطبيقك على id_token، ومع استخدام الخطة قد يحصل على رمز وصول OAuth لطلبات Responses API المؤهلة.

ماذا يحدث عند وصول المستخدم إلى حده الأقصى؟

تفشل الطلبات باستخدام:

subscription_sharing_usage_limit_exceeded
Enter fullscreen mode Exit fullscreen mode

قد يظهر ذلك كاستجابة HTTP 429 أو كحدث response.failed بعد بدء التدفق. أوقف طلبات استخدام الخطة مؤقتًا واعرض رابط إدارة الاستخدام.

هل يمكن لمستخدم Plus تشغيل GPT-6.1 Sol عبر تطبيق شريك؟

يستخدم مثال الوثائق gpt-6.1-sol مع رمز الخطة، لكن عليك سرد النماذج المتاحة للحساب باستخدام هذا الرمز قبل عرض نموذج محدد في واجهتك. راجع أيضًا هل GPT-6.1 Sol مجاني.

الخطوة التالية

إذا كنت تدير تطبيقًا تجاريًا، انضم إلى قائمة الانتظار الآن. أثناء انتظار معرف العميل، نفّذ واختبر مسارات تجاوز الحد وقطع الاتصال باستخدام المحاكيات.

تعامل مع استخدام خطة ChatGPT كخيار بجانب فواتير API الخاصة بك، لا كبديل كامل عنها. احفظ تأكيدات تبادل الرموز وسيناريوهات الفشل في Apidog، بحيث يكون المتغير الجديد الوحيد عند وصول معرف العميل هو الرمز الحقيقي.

Top comments (0)