إنشاء حسابات

يمكنك استخدام Merchant API لإنشاء حسابات على Merchant Center، ويمكن ربطها بحساب بامتيازات متقدّمة باستخدام accountAggregation أو accountManagement أو comparisonShopping. تتيح لك طريقة accounts.createAndConfigure إنشاء حساب وضبطه اختياريًا باستخدام مستخدمين وربطه بحسابات أخرى من خلال الخدمات.

يوضّح هذا الدليل كيفية استخدام Merchant API لإنشاء حسابات باستخدام خدمات مثل accountManagement أو comparisonShopping أو accountAggregation. عند استخدام accounts.createAndConfigure، يجب ربط الحساب الجديد بمقدّم خدمة من خلال تحديد سمة واحدة على الأقل من accountAggregation أو accountManagement أو comparisonShopping في الحقل service. يمكنك تحديد accountAggregation وcomparisonShopping في الطلب نفسه، ولكن لا يمكن دمج accountManagement مع أي من accountAggregation أو comparisonShopping. في حال تحديد accountManagement، يجب أيضًا إضافة مستخدم واحد على الأقل إلى الحساب الجديد باستخدام الحقل user أو users.

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

قبل أن تتمكّن من إنشاء حسابات باستخدام Merchant API، تأكَّد من استيفاء المتطلبات التالية حسب الخدمات التي تستخدمها:

  • إذن وصول المشرف: يجب أن يكون لديك إذن وصول المشرف إلى حساب مقدّم الخدمة عند ربط حساب جديد باستخدام accountManagement أو comparisonShopping أو accountAggregation.
  • حساب بامتيازات متقدّمة: إذا كنت تستخدم accountAggregation، يجب أن يكون حسابك لدى مقدّم الخدمة حسابًا بامتيازات متقدّمة تم إعداده لتجميع الحسابات. إذا كنت مقدّم خدمة وتحتاج إلى إعداد حساب بامتيازات متقدّمة، يمكنك التواصل مع فريق الدعم للحصول على المساعدة في عملية الإعداد.

إنشاء حساب (باستخدام إدارة الحسابات أو خدمة مقارنة الأسعار)

لإنشاء حساب جديد، اتّصِل بالرقم accounts.createAndConfigure. هذا هو الأسلوب المقترَح للشركاء الذين يساعدون التجّار في إدارة حساباتهم، لأنّه يتيح للتجّار الاحتفاظ بالتحكّم الكامل في حساباتهم وملكيّتها مع منح أذونات محدّدة للشركاء.

في نص الطلب:

  1. أدخِل تفاصيل الحساب الذي تريد إنشاءه في حقل account.
  2. في الحقل accountName، لا تستخدِم علامات الترقيم أو الأحرف اللاتينية الكبيرة أو الشرطات السفلية أو الأحرف الكبيرة أو رموز الإيموجي أو الرموز غير الأبجدية الرقمية، مثل / أو _، بشكل متكرّر وإذا كانت غير ضرورية. تجنَّب استخدام لاحقات النشاط التجاري (مثل "ذ.م.م" أو "ش.ذ.م.م") أو النصوص الترويجية أو المعلومات الشخصية أو اللغة غير الملائمة. استخدِم اسمًا قصيرًا وواضحًا واحترافيًا. لمزيد من المعلومات، اطّلِع على مقالة إضافة اسم مؤسسة.
  3. إذا كنت تستخدم accountManagement، حدِّد مستخدمًا واحدًا على الأقل في حقل user الذي سيتمكّن من الوصول إلى الحساب.
  4. في حقل service، حدِّد أي خدمات تريد تقديمها لهذا الحساب، مثل accountManagement، واضبط provider على اسم المورد الخاص بحسابك (مثلاً، providers/{YOUR_ACCOUNT_ID}). للاطّلاع على قائمة بالخدمات المتاحة، مثل productsManagement أو campaignsManagement، راجِع مقالة إدارة علاقات الحسابات.

في ما يلي مثال على طلب إنشاء حساب باسم "merchantStore" وربطه بالحساب {YOUR_ACCOUNT_ID} لإدارة الحسابات والمنتجات:

POST https://merchantapi.googleapis.com/accounts/v1/accounts:createAndConfigure
{
  "account": {
    "accountName": "merchantStore",
    "adultContent": false,
    "timeZone": {
      "id": "America/New_York"
    },
    "languageCode": "en-US"
  },
  "user": [
    {
      "userId": "test@example.com",
      "user": {
        "accessRights": ["ADMIN"]
      }
    }
  ],
  "service": [
    {
      "accountManagement": {},
      "provider": "providers/{YOUR_ACCOUNT_ID}"
    },
    {
      "productsManagement": {},
      "provider": "providers/{YOUR_ACCOUNT_ID}"
    }
  ]
}

يؤدي إجراء مكالمة ناجحة إلى إنشاء الحساب الجديد وربطه بحسابك للخدمات المحدّدة. إذا حدّدت خدمات accountManagement أو accountAggregation أو comparisonShopping أثناء عملية الإنشاء، تتم الموافقة عليها تلقائيًا وتكون حالة الربط ESTABLISHED. قد تكون روابط الخدمات الأخرى في حالة PENDING إلى أن يقبلها الحساب الذي تم إنشاؤه. يحتوي نص الاستجابة على المورد Account الذي تم إنشاؤه حديثًا.

يوضّح المثال التالي كيفية استخدام accounts.createAndConfigure لإنشاء حساب وضبط إعداداته:

جافا

import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.shopping.merchant.accounts.v1.AccessRight;
import com.google.shopping.merchant.accounts.v1.Account;
import com.google.shopping.merchant.accounts.v1.AccountManagement;
import com.google.shopping.merchant.accounts.v1.AccountsServiceClient;
import com.google.shopping.merchant.accounts.v1.AccountsServiceSettings;
import com.google.shopping.merchant.accounts.v1.CreateAndConfigureAccountRequest;
import com.google.shopping.merchant.accounts.v1.CreateAndConfigureAccountRequest.AddAccountService;
import com.google.shopping.merchant.accounts.v1.CreateAndConfigureAccountRequest.AddUser;
import com.google.shopping.merchant.accounts.v1.ProductsManagement;
import com.google.shopping.merchant.accounts.v1.User;
import com.google.type.TimeZone;
import java.util.List;
import shopping.merchant.samples.utils.Authenticator;

/**
 * This class demonstrates how to create a new Merchant Center account and configure it with various
 * services.
 */
public class CreateAndConfigureAccountSample {

  public static void createAndConfigureAccount(
      long providerId, String newAccountName, String userEmail) throws Exception {

    // Obtains OAuth token based on the user's configuration.
    GoogleCredentials credential = new Authenticator().authenticate();

    // Creates service settings using the credentials retrieved above.
    AccountsServiceSettings accountsServiceSettings =
        AccountsServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();

    // Calls the API and catches and prints any network failures/errors.
    try (AccountsServiceClient accountsServiceClient =
        AccountsServiceClient.create(accountsServiceSettings)) {

      // The account to be created.
      Account account =
          Account.newBuilder()
              .setAccountName(newAccountName)
              .setTimeZone(TimeZone.newBuilder().setId("Europe/Zurich").build())
              .setLanguageCode("en-US")
              .build();

      // The services to be added to the new account.
      // This sample shows how to configure a new account with account management and
      // product management.
      // For more information about the different services, see:
      // https://developers.google.com/merchant/api/guides/accounts/services
      AddAccountService accountManagementService =
          AddAccountService.newBuilder()
              .setProvider("accounts/" + providerId)
              .setExternalAccountId("external_account_id")
              .setAccountManagement(AccountManagement.newBuilder().build())
              .build();
      // This part is optional. You can also omit this and link the account later.
      AddAccountService productsManagementService =
          AddAccountService.newBuilder()
              .setProvider("accounts/" + providerId)
              .setExternalAccountId("external_account_id")
              .setProductsManagement(ProductsManagement.newBuilder().build())
              .build();

      // For sub-account creation, use the AccountAggregation service. For an example on how to do
      // this, see the `CreateSubAccount` sample.

      // The user to be added to the new account.
      // This part is optional.
      AddUser user =
          AddUser.newBuilder()
              .setUserId(userEmail)
              .setUser(User.newBuilder().addAccessRights(AccessRight.STANDARD).build())
              .build();

      CreateAndConfigureAccountRequest request =
          CreateAndConfigureAccountRequest.newBuilder()
              .setAccount(account)
              .addAllService(List.of(accountManagementService, productsManagementService))
              .addUser(user)
              .build();

      System.out.println("Sending Create and Configure Account request:");
      Account response = accountsServiceClient.createAndConfigureAccount(request);

      System.out.println("Created Account below");
      System.out.println(response);
    } catch (Exception e) {
      System.out.println(e);
    }
  }

  public static void main(String[] args) throws Exception {
    // This is the provider ID of the e-commerce platform.
    long providerId = 123L;
    // This is the name of the new account to be created.
    String newAccountName = "MyNewShop";
    // This is the email of a user to be added to the new account.
    String userEmail = "test-user@gmail.com";
    createAndConfigureAccount(providerId, newAccountName, userEmail);
  }
}

بعد إنشاء هذا النوع من الحسابات، عليك إعداده من خلال تنفيذ خطوات مثل قبول بنود الخدمة وإعداد معلومات النشاط التجاري وإثبات ملكية الموقع الإلكتروني.

إيقاف عملية إثبات ملكية عنوان البريد الإلكتروني أثناء إنشاء الحساب

عند إنشاء حساب باستخدام accounts.createAndConfigure، يمكنك اختياريًا إيقاف إرسال رسائل التأكيد الإلكترونية للمستخدمين الجدد الذين تمت إضافتهم باستخدام الحقل user من خلال ضبط verificationMailSettings.verificationMailMode على SUPPRESS_VERIFICATION_MAIL في الطلب الخاص بهذا المستخدم. يكون ذلك مفيدًا إذا كنت تنوي إثبات ملكية المستخدمين نيابةً عن التاجر فور إنشاء الحساب باستخدام طريقة users.verifySelf. يكون الإعداد التلقائي verificationMailMode هو SEND_VERIFICATION_MAIL، ويتم إرسال رسائل التأكيد الإلكترونية إلى المستخدمين الجدد الذين تتم إضافتهم أثناء إنشاء الحساب.

POST https://merchantapi.googleapis.com/accounts/v1/accounts:createAndConfigure
{
  "account": {
    "accountName": "merchantStore",
    "adultContent": false,
    "timeZone": {
      "id": "America/New_York"
    },
    "languageCode": "en-US"
  },
  "user": [
    {
      "userId": "test@example.com",
      "user": {
        "accessRights": ["ADMIN"]
      },
      "verificationMailSettings": {
        "verificationMailMode": "SUPPRESS_VERIFICATION_MAIL"
      }
    }
  ],
  "service": [
    {
      "accountManagement": {},
      "provider": "providers/{YOUR_ACCOUNT_ID}"
    }
  ]
}

إذا ضبطت verificationMailMode على SUPPRESS_VERIFICATION_MAIL، عليك استدعاء users.verifySelf لكل مستخدم تمت إضافته أثناء عملية الإنشاء لإكمال عملية إثبات الملكية. يجب أن تتم مصادقة هذا الطلب على أنّه صادر عن المستخدم الذي يتم إثبات هويته (المستخدم المحدّد في userId)، مثلاً باستخدام رمز مميّز من OAuth صادر عن المستخدم.

تحديد اسم مستعار أثناء إنشاء الحساب

يمكنك تحديد اسم مستعار لحساب في سياق مقدّم خدمة في CreateAndConfigureAccountRequest باستخدام الحقل setAlias. يمكن استخدام الاسم المستعار لتحديد الحساب في نظامك. إذا كنت مقدّم خدمة، يمكنك استخدام الاسم المستعار لاسترداد الحساب باستخدام GET /accounts/v1/accounts/{provider}~{alias}. يجب أن يكون الاسم المستعار فريدًا لمقدّم خدمة معيّن، ويجب تحديد خدمة من مقدّم الخدمة نفسه في الحقل service من الطلب. لمزيد من المعلومات حول متطلبات الاسم المستعار، يُرجى الاطّلاع على إدارة علاقات الحساب.

POST https://merchantapi.googleapis.com/accounts/v1/accounts:createAndConfigure
{
  "account": {
    "accountName": "merchantStore",
    "adultContent": false,
    "timeZone": {
      "id": "America/New_York"
    },
    "languageCode": "en-US"
  },
  "service": [
    {
      "accountManagement": {},
      "provider": "providers/{YOUR_ACCOUNT_ID}"
    }
  ],
  "setAlias": [
    {
      "provider": "providers/{YOUR_ACCOUNT_ID}",
      "accountIdAlias": "my-merchant-alias"
    }
  ]
}

إذا كنت شريكًا تنشئ حسابًا نيابةً عن تاجر، ننصحك باتّباع الخطوات التالية:

  1. إنشاء حساب: اتّصِل بالدالة accounts.createAndConfigure باستخدام بيانات اعتماد الشريك لإنشاء حساب جديد.
    • اضبط service لتضمين accountManagement الذي يربط بمعرّف موفّر الخدمة.
    • أضِف التاجر كمستخدم باستخدام الحقل user، واضبط قيمة verificationMailSettings.verificationMailMode على SUPPRESS_VERIFICATION_MAIL.
  2. إثبات هوية المستخدم: باستخدام بيانات الاعتماد المقدَّمة من التاجر (على سبيل المثال، باستخدام رمز OAuth المميز)، يمكنك طلب users.verifySelf لتغيير حالة المستخدم من PENDING إلى VERIFIED.
  3. ضبط بلد النشاط التجاري: باستخدام بيانات اعتماد التاجر، اضبط بلد النشاط التجاري من خلال تعديل address.regionCode باستخدام accounts.updateBusinessInfo. يجب إكمال هذه الخطوة قبل قبول بنود الخدمة .
  4. قبول بنود الخدمة : باستخدام بيانات اعتماد التاجر، اقبل بنود الخدمة .

تتيح هذه العملية للتجّار إكمال عملية الإعداد بسلاسة ضمن منصتك بدون تلقّي رسائل إلكترونية تتضمّن دعوات من Google.

إنشاء حساب عميل (باستخدام تجميع الحسابات)

حسابات العملاء هي حسابات منفصلة على Merchant Center مرتبطة بحسابك بامتيازات متقدّمة باستخدام خدمة accountAggregation، ما يتيح إدارة مركزية مع الحفاظ على إعدادات ومواقع إلكترونية وخلاصات بيانات منفصلة. يمكنك استخدام واجهة Merchant Accounts الفرعية لإنشاء حسابات عملاء جديدة.

لإنشاء حسابات عملاء، يجب أولاً أن يكون لديك إعداد حساب بامتيازات متقدّمة. يجب أن تكون مشرف حساب لتحويل حسابك على Merchant Center إلى حساب بامتيازات متقدّمة، ويجب ألا يتضمّن حسابك أي مشاكل معلّقة.

لإنشاء حساب عميل جديد، اتّصِل بالدالة accounts.createAndConfigure. في نص الطلب:

  1. أدخِل تفاصيل الحساب الذي تريد إنشاءه في حقل account.
  2. في حقل accountName، لا تستخدِم علامات الترقيم أو الأحرف الكبيرة أو الشرطات السفلية أو الرموز غير الأبجدية الرقمية (مثل "/" أو "_") بشكل متكرّر وإذا كانت غير ضرورية. تجنَّب استخدام لاحقات خاصة بالنشاط التجاري (مثل "ذ.م.م" أو "ش.ذ.م.م") أو النصوص الترويجية أو المعلومات الشخصية أو اللغة غير اللائقة. استخدِم اسمًا قصيرًا وواضحًا واحترافيًا. لمزيد من المعلومات، اطّلِع على مقالة إضافة اسم مؤسسة.
  3. يمكنك اختياريًا تحديد أي مستخدمين معتمَدين جدد في الحقل user. يتم أيضًا اكتساب إذن وصول المستخدم إلى الحساب من الحساب المتقدّم الرئيسي.
  4. في حقل service، حدِّد accountAggregation واضبط provider على اسم المورد الخاص بحسابك بامتيازات متقدّمة (على سبيل المثال، providers/{ADVANCED_ACCOUNT_ID}). يؤدي ذلك إلى تحديد حسابك بامتيازات متقدّمة على أنّه حساب التجميع للحساب الجديد.

في ما يلي مثال على طلب إنشاء حساب عميل باسم "merchantStore" مرتبط بحساب بامتيازات متقدّمة {ADVANCED_ACCOUNT_ID}:

POST https://merchantapi.googleapis.com/accounts/v1/accounts:createAndConfigure
{
  "account": {
    "accountName": "merchantStore",
    "adultContent": false,
    "timeZone": {
      "id": "America/New_York"
    },
    "languageCode": "en-US"
  },
  "service": [
    {
      "accountAggregation": {},
      "provider": "providers/{ADVANCED_ACCOUNT_ID}"
    }
  ]
}

يؤدي إجراء مكالمة ناجحة إلى إنشاء حساب عميل جديد وربطه بحسابك بامتيازات متقدّمة المحدّد. سيتضمّن نص الاستجابة المورد Account الذي تم إنشاؤه حديثًا.

توضّح الأمثلة التالية كيفية استخدام accounts.createAndConfigure لإنشاء حساب عميل جديد.

جافا

import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.shopping.merchant.accounts.v1.Account;
import com.google.shopping.merchant.accounts.v1.AccountAggregation;
import com.google.shopping.merchant.accounts.v1.AccountsServiceClient;
import com.google.shopping.merchant.accounts.v1.AccountsServiceSettings;
import com.google.shopping.merchant.accounts.v1.CreateAndConfigureAccountRequest;
import com.google.shopping.merchant.accounts.v1.CreateAndConfigureAccountRequest.AddAccountService;
import com.google.type.TimeZone;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;

/** This class demonstrates how to create a sub-account under an advanced account. */
public class CreateSubAccountSample {

  private static String getParent(String accountId) {
    return String.format("accounts/%s", accountId);
  }

  public static Account createSubAccount(Config config) throws Exception {

    // Obtains OAuth token based on the user's configuration.
    GoogleCredentials credential = new Authenticator().authenticate();

    // Creates service settings using the credentials retrieved above.
    AccountsServiceSettings accountsServiceSettings =
        AccountsServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();

    // Creates parent/provider to identify the advanced account into which to insert the subaccount.
    String parent = getParent(config.getAccountId().toString());

    // Calls the API and catches and prints any network failures/errors.
    try (AccountsServiceClient accountsServiceClient =
        AccountsServiceClient.create(accountsServiceSettings)) {

      CreateAndConfigureAccountRequest request =
          CreateAndConfigureAccountRequest.newBuilder()
              .setAccount(
                  Account.newBuilder()
                      .setAccountName("Demo Business")
                      .setAdultContent(false)
                      .setTimeZone(TimeZone.newBuilder().setId("America/New_York").build())
                      .setLanguageCode("en-US")
                      .build())
              .addService(
                  AddAccountService.newBuilder()
                      .setProvider(parent)
                      .setAccountAggregation(AccountAggregation.getDefaultInstance())
                      .build())
              .build();

      System.out.println("Sending Create SubAccount request");
      Account response = accountsServiceClient.createAndConfigureAccount(request);
      System.out.println("Inserted Account Name below");
      // Format: `accounts/{account}`
      System.out.println(response.getName());
      return response;
    }
  }

  public static void main(String[] args) throws Exception {
    Config config = Config.load();

    createSubAccount(config);
  }
}

PHP

use Google\ApiCore\ApiException;
use Google\Shopping\Merchant\Accounts\V1\Account;
use Google\Shopping\Merchant\Accounts\V1\AccountAggregation;
use Google\Shopping\Merchant\Accounts\V1\Client\AccountsServiceClient;
use Google\Shopping\Merchant\Accounts\V1\CreateAndConfigureAccountRequest;
use Google\Shopping\Merchant\Accounts\V1\CreateAndConfigureAccountRequest\AddAccountService;
use Google\Type\TimeZone;

/**
 * This class demonstrates how to create a sub-account under an MCA account.
 */
class CreateSubAccount
{

    private static function getParent(string $accountId): string
    {
        return sprintf("accounts/%s", $accountId);
    }


    public static function createSubAccount(array $config): void
    {
        // Gets the OAuth credentials to make the request.
        $credentials = Authentication::useServiceAccountOrTokenFile();

        // Creates options config containing credentials for the client to use.
        $options = ['credentials' => $credentials];

        // Creates a client.
        $accountsServiceClient = new AccountsServiceClient($options);

        // Creates parent/provider to identify the MCA account into which to insert the subaccount.
        $parent = self::getParent($config['accountId']);

        // Calls the API and catches and prints any network failures/errors.
        try {
            $request = new CreateAndConfigureAccountRequest([
                'account' => (new Account([
                    'account_name' => 'Demo Business',
                    'adult_content' => false,
                    'time_zone' => (new TimeZone(['id' => 'America/New_York'])),
                    'language_code' => 'en-US',
                ])),
                'service' => [
                    (new AddAccountService([
                        'provider' => $parent,
                        'account_aggregation' => new AccountAggregation,
                    ])),
                ],
            ]);

            print "Sending Create SubAccount request\n";
            $response = $accountsServiceClient->createAndConfigureAccount($request);
            print "Inserted Account Name below\n";
            // Format: `accounts/{account}
            print $response->getName() . PHP_EOL;
        } catch (ApiException $e) {
            print $e->getMessage();
        }
    }
    public function callSample(): void
    {
        $config = Config::generateConfig();
        self::createSubAccount($config);
    }
}

$sample = new CreateSubAccount();
$sample->callSample();

Python

from examples.authentication import configuration
from examples.authentication import generate_user_credentials
from google.shopping.merchant_accounts_v1 import Account
from google.shopping.merchant_accounts_v1 import AccountAggregation
from google.shopping.merchant_accounts_v1 import AccountsServiceClient
from google.shopping.merchant_accounts_v1 import CreateAndConfigureAccountRequest

_ACCOUNT = configuration.Configuration().read_merchant_info()


def get_parent(account_id):
  return f"accounts/{account_id}"


def create_sub_account():
  """Creates a sub-account under an advanced account."""

  # Get OAuth credentials.
  credentials = generate_user_credentials.main()

  # Create a client.
  client = AccountsServiceClient(credentials=credentials)

  # Get the parent advanced account ID.
  parent = get_parent(_ACCOUNT)

  # Create the request.
  request = CreateAndConfigureAccountRequest(
      account=Account(
          account_name="Demo Business",
          adult_content=False,
          time_zone={"id": "America/New_York"},
          language_code="en-US",
      ),
      service=[
          CreateAndConfigureAccountRequest.AddAccountService(
              provider=parent,
              account_aggregation=AccountAggregation(),
          )
      ],
  )

  # Make the request and print the response.
  try:
    print("Sending Create SubAccount request")
    response = client.create_and_configure_account(request=request)
    print("Inserted Account Name below")
    print(response.name)
  except RuntimeError as e:
    print(e)


if __name__ == "__main__":
  create_sub_account()

cURL

curl -X POST \
"https://merchantapi.googleapis.com/accounts/v1/accounts:createAndConfigure" \
-H "Authorization: Bearer {YOUR_ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
  "account": {
    "accountName": "Demo Business",
    "adultContent": false,
    "timeZone": {
      "id": "America/New_York"
    },
    "languageCode": "en-US"
  },
  "service": [
    {
      "accountAggregation": {},
      "provider": "providers/{ADVANCED_ACCOUNT_ID}"
    }
  ]
}'

استرداد حسابات العملاء

لعرض جميع حسابات العملاء التابعة لحساب بامتيازات متقدّمة معيّن، استخدِم طريقة accounts.listSubaccounts. أدخِل رقم تعريف حسابك بامتيازات متقدّمة في الحقل provider ضمن عنوان URL للطلب.

إليك نموذج طلب:

GET https://merchantapi.googleapis.com/accounts/v1/accounts/{ADVANCED_ACCOUNT_ID}:listSubaccounts

في ما يلي نموذج ردّ من مكالمة ناجحة:

{
"accounts": [
    {
      "name": "accounts/<var class=\"readonly\">{SUB_ACCOUNT_ID_1}</var>",
      "accountId": "<var class=\"readonly\">{SUB_ACCOUNT_ID_1}</var>",
      "accountName": "<var class=\"readonly\">{SUB_ACCOUNT_NAME_1}</var>",
      "timeZone": {
        "id": "America/Los_Angeles"
      },
      "languageCode": "en-US"
    },
    {
      "name": "accounts/<var class=\"readonly\">{SUB_ACCOUNT_ID_2}</var>",
      "accountId": "<var class=\"readonly\">{SUB_ACCOUNT_ID_2}</var>",
      "accountName": "<var class=\"readonly\">{SUB_ACCOUNT_NAME_2}</var>",
      "timeZone": {
        "id": "America/Los_Angeles"
      },
      "languageCode": "en-US"
    }
  ]
}

توضّح النماذج التالية كيفية إدراج جميع حسابات العملاء في حسابك بامتيازات متقدّمة.

جافا

import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.shopping.merchant.accounts.v1.Account;
import com.google.shopping.merchant.accounts.v1.AccountsServiceClient;
import com.google.shopping.merchant.accounts.v1.AccountsServiceClient.ListSubAccountsPagedResponse;
import com.google.shopping.merchant.accounts.v1.AccountsServiceSettings;
import com.google.shopping.merchant.accounts.v1.ListSubAccountsRequest;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;

/** This class demonstrates how to list all the subaccounts of an advanced account. */
public class ListSubAccountsSample {

  private static String getParent(String accountId) {
    return String.format("accounts/%s", accountId);
  }

  public static ListSubAccountsPagedResponse listSubAccounts(Config config) throws Exception {

    // Obtains OAuth token based on the user's configuration.
    GoogleCredentials credential = new Authenticator().authenticate();

    // Creates service settings using the credentials retrieved above.
    AccountsServiceSettings accountsServiceSettings =
        AccountsServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();

    // Creates parent/provider to identify the advanced account from which to list all sub-accounts.
    String parent = getParent(config.getAccountId().toString());

    // Calls the API and catches and prints any network failures/errors.
    try (AccountsServiceClient accountsServiceClient =
        AccountsServiceClient.create(accountsServiceSettings)) {

      // The parent has the format: accounts/{account}
      ListSubAccountsRequest request =
          ListSubAccountsRequest.newBuilder().setProvider(parent).build();
      System.out.println("Sending list subaccounts request:");

      ListSubAccountsPagedResponse response = accountsServiceClient.listSubAccounts(request);

      int count = 0;

      // Iterates over all rows in all pages and prints the datasource in each row.
      // Automatically uses the `nextPageToken` if returned to fetch all pages of data.
      for (Account account : response.iterateAll()) {
        System.out.println(account);
        count++;
      }
      System.out.print("The following count of accounts were returned: ");
      System.out.println(count);
      return response;
    }
  }

  public static void main(String[] args) throws Exception {
    Config config = Config.load();
    listSubAccounts(config);
  }
}

PHP

use Google\ApiCore\ApiException;
use Google\Shopping\Merchant\Accounts\V1\Client\AccountsServiceClient;
use Google\Shopping\Merchant\Accounts\V1\ListSubAccountsRequest;

/**
 * This class demonstrates how to list all the subaccounts of an advanced account.
 */
class ListSubAccounts
{
    private static function getParent(string $accountId): string
    {
        return sprintf("accounts/%s", $accountId);
    }


    public static function listSubAccounts(array $config): void
    {
        // Gets the OAuth credentials to make the request.
        $credentials = Authentication::useServiceAccountOrTokenFile();

        // Creates options config containing credentials for the client to use.
        $options = ['credentials' => $credentials];

        // Creates a client.
        $accountsServiceClient = new AccountsServiceClient($options);

        // Creates parent/provider to identify the advanced account from which
        //to list all accounts.
        $parent = self::getParent($config['accountId']);

        // Calls the API and catches and prints any network failures/errors.
        try {

            // The parent has the format: accounts/{account}
            $request = new ListSubAccountsRequest(['provider' => $parent]);
            print "Sending list subaccounts request:\n";

            $response = $accountsServiceClient->listSubAccounts($request);

            $count = 0;

            // Iterates over all rows in all pages and prints the datasource in each row.
            // Automatically uses the `nextPageToken` if returned to fetch all pages of data.
            foreach ($response->iterateAllElements() as $account) {
                print_r($account);
                $count++;
            }
            print "The following count of accounts were returned: ";
            print $count . PHP_EOL;
        } catch (ApiException $e) {
            print "An error has occured: \n";
            print $e->getMessage();
        }
    }

    public function callSample(): void
    {
        $config = Config::generateConfig();
        self::listSubAccounts($config);
    }
}

$sample = new ListSubAccounts();
$sample->callSample();

Python

from examples.authentication import configuration
from examples.authentication import generate_user_credentials
from google.shopping.merchant_accounts_v1 import AccountsServiceClient
from google.shopping.merchant_accounts_v1 import ListSubAccountsRequest

_ACCOUNT = configuration.Configuration().read_merchant_info()


def get_parent(account_id):
  return f"accounts/{account_id}"


def list_sub_accounts():
  """Lists all the subaccounts of an advanced account."""

  # Get OAuth credentials.
  credentials = generate_user_credentials.main()

  # Create a client.
  client = AccountsServiceClient(credentials=credentials)

  # Get the parent advanced account ID.
  parent = get_parent(_ACCOUNT)

  # Create the request.
  request = ListSubAccountsRequest(provider=parent)

  # Make the request and print the response.
  try:
    print("Sending list subaccounts request:")
    response = client.list_sub_accounts(request=request)

    count = 0
    for account in response:
      print(account)
      count += 1

    print(f"The following count of accounts were returned: {count}")

  except RuntimeError as e:
    print("An error has occured: ")
    print(e)


if __name__ == "__main__":
  list_sub_accounts()

cURL

curl -X GET \
"https://merchantapi.googleapis.com/accounts/v1/accounts/{ADVANCED_ACCOUNT_ID}:listSubaccounts" \
-H "Authorization: Bearer {YOUR_ACCESS_TOKEN}" \

حذف حساب عميل

إذا لم تعُد بحاجة إلى إدارة حساب عميل، يمكنك حذفه باستخدام طريقة accounts.delete.

يتطلّب تنفيذ هذه الطريقة إذن وصول إداري إلى الحساب المطلوب حذفه.

إليك نموذج طلب:

DELETE https://merchantapi.googleapis.com/accounts/v1/accounts/{SUB_ACCOUNT_ID}

في حال نجاح العملية، سيكون نص الاستجابة عبارة عن عنصر JSON فارغ، ما يشير إلى أنّه تم حذف الحساب.

توضّح العيّنات التالية كيفية حذف حساب عميل.

جافا

import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.shopping.merchant.accounts.v1.AccountName;
import com.google.shopping.merchant.accounts.v1.AccountsServiceClient;
import com.google.shopping.merchant.accounts.v1.AccountsServiceSettings;
import com.google.shopping.merchant.accounts.v1.DeleteAccountRequest;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;

/** This class demonstrates how to delete a given Merchant Center account. */
public class DeleteAccountSample {

  // This method can delete a standalone, advanced account or sub-account. If you delete an advanced
  // account,
  // all sub-accounts will also be deleted.
  // Admin user access is required to execute this method.

  public static void deleteAccount(Config config, String accountId) throws Exception {

    // Obtains OAuth token based on the user's configuration.
    GoogleCredentials credential = new Authenticator().authenticate();

    // Creates service settings using the credentials retrieved above.
    AccountsServiceSettings accountsServiceSettings =
        AccountsServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();

    // Creates account name to identify the account.
    String name =
        AccountName.newBuilder()
            .setAccount(accountId)
            .build()
            .toString();

    // Calls the API.
    try (AccountsServiceClient accountsServiceClient =
        AccountsServiceClient.create(accountsServiceSettings)) {
      DeleteAccountRequest request =
          DeleteAccountRequest.newBuilder()
              .setName(name)
              // Optional. If set to true, the account will be deleted even if it has offers or
              // provides services to other accounts. Defaults to 'false'.
              .setForce(true)
              .build();

      System.out.println("Sending Delete Account request");
      accountsServiceClient.deleteAccount(request); // No response returned on success.
      System.out.println("Delete successful.");
    }
  }

  public static void deleteAccount(Config config) throws Exception {
    deleteAccount(config, config.getAccountId().toString());
  }

  public static void main(String[] args) throws Exception {
    Config config = Config.load();
    deleteAccount(config);
  }
}

PHP

use Google\ApiCore\ApiException;
use Google\Shopping\Merchant\Accounts\V1\Client\AccountsServiceClient;
use Google\Shopping\Merchant\Accounts\V1\DeleteAccountRequest;


/**
 * This class demonstrates how to delete a given Merchant Center account.
 */
class DeleteAccount
{
    private static function getParent(string $accountId): string
    {
        return sprintf("accounts/%s", $accountId);
    }

    // This method can delete a standalone, advanced account or sub-account.
    // If you delete an advanced account, all sub-accounts will also be deleted.
    // Admin user access is required to execute this method.
    public static function deleteAccount(array $config): void
    {
        // Gets the OAuth credentials to make the request.
        $credentials = Authentication::useServiceAccountOrTokenFile();

        // Creates options config containing credentials for the client to use.
        $options = ['credentials' => $credentials];

        // Creates a client.
        $accountsServiceClient = new AccountsServiceClient($options);


        // Gets the account ID from the config file.
        $accountId = $config['accountId'];

        // Creates account name to identify the account.
        $name = self::getParent($accountId);

        // Calls the API and catches and prints any network failures/errors.
        try {
            $request = new DeleteAccountRequest([
                'name' => $name,
                // Optional. If set to true, the account will be deleted even if it has offers or
                // provides services to other accounts. Defaults to 'false'.
                'force' => true,
            ]);

            print "Sending Delete Account request\n";
            $accountsServiceClient->deleteAccount($request); // No response returned on success.
            print "Delete successful.\n";
        } catch (ApiException $e) {
            print $e->getMessage();
        }
    }

    public function callSample(): void
    {
        $config = Config::generateConfig();
        self::deleteAccount($config);
    }
}

$sample = new DeleteAccount();
$sample->callSample();

Python

from examples.authentication import configuration
from examples.authentication import generate_user_credentials
from google.shopping.merchant_accounts_v1 import AccountsServiceClient
from google.shopping.merchant_accounts_v1 import DeleteAccountRequest

_ACCOUNT = configuration.Configuration().read_merchant_info()


def get_parent(account_id):
  return f"accounts/{account_id}"


def delete_account():
  """Deletes a given Merchant Center account."""

  # Get OAuth credentials.
  credentials = generate_user_credentials.main()

  # Create a client.
  client = AccountsServiceClient(credentials=credentials)

  # Create the account name.
  name = get_parent(_ACCOUNT)

  # Create the request.
  request = DeleteAccountRequest(name=name, force=True)

  # Make the request and print the response.
  try:
    print("Sending Delete Account request")
    client.delete_account(request=request)
    print("Delete successful.")
  except RuntimeError as e:
    print(e)


if __name__ == "__main__":
  delete_account()

cURL

curl -X DELETE \
"https://merchantapi.googleapis.com/accounts/v1/accounts/{SUB_ACCOUNT_ID}?force=true" \
-H "Authorization: Bearer {YOUR_ACCESS_TOKEN}" \

قبول بنود الخدمة

تتضمّن حسابات العملاء بنود خدمة Merchant Center التي وقّع عليها الحساب الرئيسي بامتيازات متقدّمة.

تعديل معلومات نشاطك التجاري

يمكنك استخدام Merchant Accounts API لتعديل معلومات النشاط التجاري الخاصة بحسابات عملائك.

  • لعرض معلومات النشاط التجاري الخاصة بحساب، اتّصِل بالرقم accounts.getBusinessInfo.
  • لتعديل معلومات المؤسسة الخاصة بحساب، يُرجى الاتصال بالرقم accounts.updateBusinessInfo.