יצירת חשבונות

אתם יכולים להשתמש ב-Merchant API כדי ליצור חשבונות Merchant Center, שאפשר לקשר לחשבון מתקדם באמצעות accountAggregation,‏ accountManagement או comparisonShopping. השיטה accounts.createAndConfigure מאפשרת ליצור חשבון, להגדיר לו משתמשים ולקשר אותו לחשבונות אחרים דרך שירותים.

במדריך הזה מוסבר איך להשתמש ב-Merchant API כדי ליצור חשבונות באמצעות accountAggregation,‏ accountManagement או comparisonShopping:

  • ‫accountAggregation: משמש זירות מסחר, קמעונאים עם כמה מותגים, קמעונאים בינלאומיים ושותפים שיוצרים חשבונות משנה בחשבון מתקדם מרובה לקוחות.
  • ‫accountManagement: סוכנויות שיוצרות חשבונות עצמאיים בבעלות המוכר.
  • comparisonShopping: משמש שירותי השוואת מחירים (CSS) שיוצרים חשבונות באזור הכלכלי האירופי (EEA) ובמדינות שבהן פועלת התוכנית של שירותי השוואת מחירים.

כשמשתמשים ב-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, אל תשתמשו ביותר מדי סימני פיסוק, אותיות רישיות, קווים תחתונים, מילים שכתובות באותיות רישיות בלבד, סמלי אמוג'י או סמלים שאינם אלפאנומריים כמו / או _. אל תשתמשו בסיומות של חברות (כמו "בע"מ" או "GmbH"), בטקסט שיווקי, במידע אישי או בשפה לא הולמת. השם צריך להיות קצר, ברור ומקצועי. מידע נוסף על הוספת שם העסק
  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 כדי ליצור ולהגדיר חשבון:

Java

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, אפשר להגדיר את verificationMailSettings.verificationMailMode לערך SUPPRESS_VERIFICATION_MAIL בבקשה של המשתמש כדי למנוע שליחה של הודעות אימות למשתמשים חדשים שנוספו באמצעות השדה user. האפשרות הזו שימושית אם אתם מתכוונים לאמת משתמשים בשם המוכר מיד אחרי היצירה באמצעות ה-method‏ 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. הם מאפשרים לכם לנהל את כל החשבונות במקום אחד, אבל לשמור על הגדרות, אתרים ופידים של נתונים נפרדים. אתם יכולים להשתמש ב-API המשני Merchant Accounts כדי ליצור חשבונות לקוח חדשים.

כדי ליצור חשבונות לקוח, קודם צריך להגדיר חשבון מתקדם. כדי להמיר את חשבון Merchant Center לחשבון מתקדם, אתם צריכים להיות אדמינים של החשבון, ולוודא שאין בחשבון בעיות בהמתנה.

כדי ליצור חשבון לקוח חדש, מפעילים את השיטה accounts.createAndConfigure. בגוף הבקשה:

  1. בשדה account מזינים את פרטי החשבון שרוצים ליצור.
  2. בשדה accountName, אל תשתמשו ביותר מדי סימני פיסוק, אותיות רישיות (למשל באנגלית), קווים תחתונים או סמלים שאינם אלפאנומריים (כמו "/" או "_"). אל תשתמשו בסיומות של חברות (כמו "Inc."‎ או "GmbH"), בטקסט שיווקי, במידע אישי או בשפה לא הולמת. השם צריך להיות קצר, ברור ומקצועי. מידע נוסף על הוספת שם העסק
  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 כדי ליצור חשבון לקוח חדש.

Java

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


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


def create_sub_account(account_id: str) -> 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_id)

  # 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)
    return response
  except RuntimeError as e:
    print(e)
    raise


if __name__ == "__main__":
  _account_id = configuration.Configuration().read_merchant_info()
  create_sub_account(_account_id)

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}"
    }
  ]
}'

אחזור חשבונות לקוח

כדי להציג את כל חשבונות הלקוח של חשבון מתקדם מסוים, משתמשים ב-method‏ 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"
    }
  ]
}

הדוגמאות הבאות ממחישות איך להציג רשימה של כל חשבונות הלקוח בחשבון המתקדם.

Java

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


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


def list_sub_accounts(account_id: str):
  """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_id)

  # 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}")
    return response

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


if __name__ == "__main__":
  _account_id = configuration.Configuration().read_merchant_info()
  list_sub_accounts(_account_id)

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 ריק, שמציין שהחשבון נמחק.

בדוגמאות הבאות אפשר לראות איך מוחקים חשבון לקוח.

Java

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


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


def delete_account(account_id: str):
  """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_id)

  # 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)
    raise


if __name__ == "__main__":
  _account_id = configuration.Configuration().read_merchant_info()
  delete_account(_account_id)

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 כדי לערוך את פרטי העסק בחשבונות הלקוח שלכם.