دليل سريع للبدء باستخدام JavaScript

يمكنكم إنشاء تطبيق ويب بلغة JavaScript يرسل طلبات إلى Reseller API.

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

يستخدم هذا الدليل الإرشادي السريع مكتبات عملاء واجهة برمجة التطبيقات المقترَحة في Google Workspace للتعامل مع بعض تفاصيل عملية المصادقة والتفويض.

الأهداف

  • إعداد البيئة
  • إعداد النموذج
  • تشغيل النموذج

المتطلبات الأساسية

  • نطاق مورّد Google
  • اتفاقية شريك Google Workspace منفّذة بالكامل

إعداد البيئة

لإكمال هذا الدليل الإرشادي السريع، يجب إعداد البيئة.

تفعيل واجهة برمجة التطبيقات

قبل استخدام Google APIs، يجب تفعيلها في مشروع على Google Cloud. يمكنكم تفعيل واجهة برمجة تطبيق واحدة أو أكثر في مشروع واحد على Google Cloud.

إعداد شاشة طلب الموافقة المتعلّقة ببروتوكول OAuth

إذا كنتم تستخدمون مشروعًا جديدًا على السحابة الإلكترونية على Google Cloud لإكمال هذا الدليل الإرشادي السريع، يجب إعداد شاشة طلب الموافقة المتعلّقة ببروتوكول OAuth. إذا سبق لكم إكمال هذه الخطوة لمشروعكم على Cloud، انتقِلوا إلى القسم التالي.

  1. في Google API Console، انتقِلوا إلى "القائمة" menu > منصة Google للمصادقة > العلامة التجارية.

    الانتقال إلى العلامة التجارية

  2. إذا سبق لكم إعداد منصة Google للمصادقة، يمكنكم إعداد إعدادات شاشة طلب الموافقة المتعلّقة ببروتوكول OAuth التالية في العلامة التجارية والجمهور والوصول إلى البيانات. إذا ظهرت لكم رس0الة لم يتم إعداد منصة Google للمصادقة بعد، انقروا على البدء:
    1. ضمن معلومات التطبيق، أدخِلوا اسمًا للتطبيق في اسم التطبيق.
    2. في البريد الإلكتروني لدعم المستخدمين، اختاروا عنوان بريد إلكتروني للدعم يمكن للمستخدمين التواصل معكم من خلاله إذا كانت لديهم أسئلة حول موافقتهم.
    3. انقروا على التالي.
    4. ضمن الجمهور ، اختاروا داخلي.
    5. انقروا على التالي.
    6. ضمن معلومات الاتصال، أدخِلوا عنوان بريد إلكتروني يمكنكم تلقّي إشعارات من خلاله بشأن أي تغييرات تطرأ على مشروعكم.
    7. انقروا على التالي.
    8. ضمن إنهاء، راجِعوا "سياسة بيانات المستخدمين في خدمات Google API"، وإذا كنتم موافقين عليها، اختاروا أوافق على "سياسة بيانات المستخدمين في خدمات Google API".
    9. انقروا على متابعة.
    10. انقروا على إنشاء.
  3. يمكنكم في الوقت الحالي تخطّي إضافة النطاقات. في المستقبل، عند إنشاء تطبيق لاستخدامه خارج مؤسسة Google Workspace، يجب تغيير نوع المستخدم إلى خارجي. بعد ذلك، أضيفوا نطاقات التفويض التي يتطلبها تطبيقكم. لمزيد من المعلومات، يُرجى الاطّلاع على دليل إعداد موافقة OAuth الكامل .

تفويض بيانات اعتماد لتطبيق ويب

لمصادقة المستخدِمين النهائيين والوصول إلى بيانات المستخدِمين في تطبيقكم، يجب إنشاء معرّف عميل واحد أو أكثر لبروتوكول OAuth 2.0. يُستخدم معرّف العميل لتعريف تطبيق واحد على خوادم OAuth من Google. إذا كان تطبيقكم يعمل على منصات متعددة، يجب إنشاء معرّف عميل منفصل لكل منصة.
  1. في Google API Console، انتقِلوا إلى "القائمة" > منصة Google للمصادقة > العملاء.

    الانتقال إلى العملاء

  2. انقروا على إنشاء عميل.
  3. انقروا على نوع التطبيق > تطبيق ويب.
  4. في حقل الاسم ، اكتبوا اسمًا لبيانات الاعتماد. لا يظهر هذا الاسم إلا في Google API Console.
  5. أضيفوا معرّفات الموارد المنتظمة (URI) المفوَّضة المرتبطة بتطبيقكم:
    • تطبيقات من جهة العميل (JavaScript): ضمن مصادر JavaScript المفوَّضة، انقروا على إضافة معرّف الموارد المنتظم (URI). بعد ذلك، أدخِلوا معرّف URI لاستخدامه في طلبات المتصفح. يحدّد هذا المعرّف النطاقات التي يمكن لتطبيقكم إرسال طلبات واجهة برمجة التطبيقات منها إلى خادم OAuth 2.0.
    • تطبيقات من جهة الخادم (Java وPython والمزيد): ضمن معرّفات الموارد المنتظمة (URI) المفوَّضة لإعادة التوجيه، انقروا على إضافة معرّف الموارد المنتظم (URI). بعد ذلك، أدخِلوا معرّف URI لنقطة نهاية يمكن لخادم OAuth 2.0 إرسال الردود إليه.
  6. انقروا على إنشاء.

    تظهر بيانات الاعتماد التي تم إنشاؤها حديثًا ضمن معرّفات عميل OAuth 2.0.

    سجِّلوا معرّف العميل. لا تُستخدم أسرار العميل لتطبيقات الويب.

دوِّنوا بيانات الاعتماد هذه لأنكم ستحتاجون إليها لاحقًا في هذا الدليل الإرشادي السريع.

إنشاء مفتاح واجهة برمجة تطبيقات

  1. في Google Cloud Console، انتقِلوا إلى "القائمة" > واجهات برمجة التطبيقات والخدمات > بيانات الاعتماد.

    الانتقال إلى بيانات الاعتماد

  2. انقروا على إنشاء بيانات اعتماد > مفتاح واجهة برمجة تطبيقات.
  3. يظهر مفتاح واجهة برمجة التطبيقات الجديد.
    • انقروا على "نسخ" لنسخ مفتاح واجهة برمجة التطبيقات لاستخدامه في رمز تطبيقكم. يمكنكم أيضًا العثور على مفتاح واجهة برمجة التطبيقات في قسم "مفاتيح واجهة برمجة التطبيقات" ضمن بيانات اعتماد مشروعكم.
    • لمنع الاستخدام غير المفوَّض، ننصحكم بتقييد الأماكن وواجهات برمجة التطبيقات التي يمكن استخدام مفتاح واجهة برمجة التطبيقات لها. لمزيد من التفاصيل، يُرجى الاطّلاع على مقالة إضافة قيود على واجهة برمجة التطبيقات.

إعداد النموذج

  1. في دليل العمل، أنشئوا ملفًا باسم index.html.
  2. في الملف index.html، الصقوا رمزًا نموذجيًا:

    adminSDK/reseller/index.html
    <!DOCTYPE html>
    <html>
      <head>
        <title>Google Workspace Reseller API Quickstart</title>
        <meta charset="utf-8" />
      </head>
      <body>
        <p>Google WOrkspace Reseller API Quickstart</p>
    
        <!--Add buttons to initiate auth sequence and sign out-->
        <button id="authorize_button" onclick="handleAuthClick()">Authorize</button>
        <button id="signout_button" onclick="handleSignoutClick()">Sign Out</button>
    
        <pre id="content" style="white-space: pre-wrap;"></pre>
    
        <script type="text/javascript">
          /* exported gapiLoaded */
          /* exported gisLoaded */
          /* exported handleAuthClick */
          /* exported handleSignoutClick */
    
          // TODO(developer): Set to client ID and API key from the Developer Console
          const CLIENT_ID = '<YOUR_CLIENT_ID>';
          const API_KEY = '<YOUR_API_KEY>';
    
          // Discovery doc URL for APIs used by the quickstart
          const DISCOVERY_DOC = 'https://www.googleapis.com/discovery/v1/apis/reseller/v1/rest';
    
          // Authorization scopes required by the API; multiple scopes can be
          // included, separated by spaces.
          const SCOPES = 'https://www.googleapis.com/auth/apps.order';
    
          let tokenClient;
          let gapiInited = false;
          let gisInited = false;
    
          document.getElementById('authorize_button').style.visibility = 'hidden';
          document.getElementById('signout_button').style.visibility = 'hidden';
    
          /**
           * Callback after api.js is loaded.
           */
          function gapiLoaded() {
            gapi.load('client', initializeGapiClient);
          }
    
          /**
           * Callback after the API client is loaded. Loads the
           * discovery doc to initialize the API.
           */
          async function initializeGapiClient() {
            await gapi.client.init({
              apiKey: API_KEY,
              discoveryDocs: [DISCOVERY_DOC],
            });
            gapiInited = true;
            maybeEnableButtons();
          }
    
          /**
           * Callback after Google Identity Services are loaded.
           */
          function gisLoaded() {
            tokenClient = google.accounts.oauth2.initTokenClient({
              client_id: CLIENT_ID,
              scope: SCOPES,
              callback: '', // defined later
            });
            gisInited = true;
            maybeEnableButtons();
          }
    
          /**
           * Enables user interaction after all libraries are loaded.
           */
          function maybeEnableButtons() {
            if (gapiInited && gisInited) {
              document.getElementById('authorize_button').style.visibility = 'visible';
            }
          }
    
          /**
           *  Sign in the user upon button click.
           */
          function handleAuthClick() {
            tokenClient.callback = async (resp) => {
              if (resp.error !== undefined) {
                throw (resp);
              }
              document.getElementById('signout_button').style.visibility = 'visible';
              document.getElementById('authorize_button').innerText = 'Refresh';
              await listSubscriptions();
            };
    
            if (gapi.client.getToken() === null) {
              // Prompt the user to select a Google Account and ask for consent to share their data
              // when establishing a new session.
              tokenClient.requestAccessToken({prompt: 'consent'});
            } else {
              // Skip display of account chooser and consent dialog for an existing session.
              tokenClient.requestAccessToken({prompt: ''});
            }
          }
    
          /**
           *  Sign out the user upon button click.
           */
          function handleSignoutClick() {
            const token = gapi.client.getToken();
            if (token !== null) {
              google.accounts.oauth2.revoke(token.access_token);
              gapi.client.setToken('');
              document.getElementById('content').innerText = '';
              document.getElementById('authorize_button').innerText = 'Authorize';
              document.getElementById('signout_button').style.visibility = 'hidden';
            }
          }
    
          /**
           * Print first ten subscriptions.
           */
          async function listSubscriptions() {
            let response;
            try {
              response = await gapi.client.reseller.subscriptions.list({
                'maxResults': 10,
              });
            } catch (err) {
              document.getElementById('content').innerText = err.message;
              return;
            }
    
            const subscriptions = response.result.subscriptions;
            if (!subscriptions || subscriptions.length == 0) {
              document.getElementById('content').innerText = 'No subscriptions found.';
              return;
            }
            // Flatten to string to display
            const output = subscriptions.reduce(
                (str, subscription) => {
                  const customer = subscription.customerId;
                  const sku = subscription.skuId;
                  const plan = subscription.plan.planName;
                  return `${str}${customer} (${sku},${plan})\n`;
                },
                'Subscriptions:\n');
            document.getElementById('content').innerText = output;
          }
        </script>
        <script async defer src="https://apis.google.com/js/api.js" onload="gapiLoaded()"></script>
        <script async defer src="https://accounts.google.com/gsi/client" onload="gisLoaded()"></script>
      </body>
    </html>

    غيِّروا القيم في السلسلة على الشكل التالي:

تشغيل النموذج

  1. في دليل العمل، ثبِّتوا حزمة http-server:

    npm install http-server
    
  2. في دليل العمل، ابدأوا خادم ويب:

    npx http-server -p 8000
    
  1. في المتصفح، انتقِلوا إلى http://localhost:8000.
  2. يظهر طلب تفويض الوصول:
    1. إذا لم يسبق لكم تسجيل الدخول إلى حساب Google، سجِّلوا الدخول عند المطالبة بذلك. إذا كنتم مسجِّلين الدخول إلى حسابات متعددة، اختاروا حسابًا واحدًا لاستخدامه في التفويض.
    2. انقروا على حسنًا.

يتم تشغيل تطبيق JavaScript ويستدعي Reseller API.

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