ایجاد حساب‌ها

می‌توانید از Merchant API برای ایجاد حساب‌های Merchant Center استفاده کنید، که می‌توانند بااستفاده از accountAggregation، accountManagement، یا comparisonShopping به حساب پیشرفته پیوند داده شوند. روش accounts.createAndConfigure به شما امکان می‌دهد حسابی ایجاد کنید و درصورت تمایل آن را با کاربران پیکربندی کنید و ازطریق سرویس‌ها به حساب‌های دیگر پیوند دهید.

این راهنما توضیح می‌دهد که چگونه بااستفاده از accountAggregation، accountManagement، یا comparisonShopping از Merchant API برای ایجاد حساب استفاده کنید:

  • accountAggregation: مورداستفاده بازارها، خرده‌فروشان چندنمانامی، خرده‌فروشان بین‌المللی، و شرکایی که حساب‌های فرعی تحت حساب پیشرفته چندمشتری ایجاد می‌کنند.
  • accountManagement: توسط آژانس‌هایی استفاده می‌شود که حساب‌های مستقل تحت مالکیت فروشنده ایجاد می‌کنند.
  • comparisonShopping: توسط «سرویس‌های مقایسه قیمت» (CSS) که در منطقه اقتصادی اروپا و کشورهای واجدشرایط CSS حساب ایجاد می‌کنند استفاده می‌شود.

هنگام استفاده از 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، از علائم سجاوندی تکراری و غیرضروری، حروف بزرگ، زیرخط، همه حروف بزرگ، اموجی، یا نمادهای غیرحرفی‌عددی مثل / یا _ استفاده نکنید. از پسوندهای کسب‌وکار (مثل «Inc.» یا «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 را برای ایجاد و پیکربندی حساب نشان می‌دهد:

جاوا

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 از کاربر.

هنگام ایجاد حساب، نام مستعار مشخص کنید

می‌توانید بااستفاده از فیلد setAlias، نام مستعاری برای حساب در زمینه ارائه‌دهنده در CreateAndConfigureAccountRequest مشخص کنید. از نام مستعار می‌توان برای شناسایی حساب در سیستم شما استفاده کرد. اگر ارائه‌دهنده خدمات هستید، می‌توانید از نام مستعار برای بازیابی حساب بااستفاده از 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 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 را برای ایجاد حساب مشتری جدید نشان می‌دهد.

جاوا

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

بازیابی حساب‌های مشتری

برای فهرست کردن همه حساب‌های مشتری یک حساب پیشرفته مشخص، از روش accounts.listSubaccounts استفاده کنید. شناسه حساب پیشرفته‌تان را در فیلد provider نشانی وب درخواست ارائه دهید.

در زیر یک درخواست نمونه آورده شده است:

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


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 خالی است که نشان می‌دهد حساب حذف شده است.

نمونه‌های زیر نحوه حذف حساب مشتری را نشان می‌دهد.

جاوا

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 برای ویرایش اطلاعات کسب‌وکار برای حساب‌های مشتری‌تان استفاده کنید.