Соглашения об условиях обслуживания Merchant Center

Для использования Merchant Center и его функций необходимо принять Условия предоставления услуг Merchant Center (ToS) для вашего местоположения. В этих соглашениях изложены юридические условия использования услуг Merchant Center.

В этом руководстве объясняется, как использовать API для продавцов для управления этими соглашениями, как для вашей собственной учетной записи, так и для учетных записей, которыми вы управляете как сторонний поставщик (3P).

Вы можете добиться следующего:

  • Проверьте текущий статус соглашения об условиях использования для вашей учетной записи.
  • Направьте продавцов к принятию необходимых условий использования.
  • Управление условиями предоставления услуг (ToS) в качестве поставщика услуг для клиентских аккаунтов.

Предварительные требования

Для использования Merchant API вам потребуется учетная запись Merchant Center. После ее создания через пользовательский интерфейс Merchant Center вы сможете вносить изменения в учетную запись (например, обновлять информацию о вашей компании, управлять пользователями и т. д.) либо через пользовательский интерфейс, либо через API.

Если вам необходимо управлять несколькими учетными записями, вы можете создать клиентские учетные записи с помощью Merchant API. См. раздел «Создание учетных записей» .

Проверьте условия использования учетной записи.

Прежде чем продавец сможет в полной мере использовать Merchant Center, или если вам необходимо проверить статус его текущего соглашения, вы можете получить информацию о состоянии его соглашения об условиях обслуживания.

Используйте метод termsOfServiceAgreementStates.retrieveForApplication , чтобы получить состояние соглашения об условиях обслуживания для основного приложения Merchant Center. Этот метод возвращает ваши текущие условия обслуживания, если таковые имеются, и, если условия обслуживания были обновлены с момента вашего последнего принятия, последнюю версию, которую вам необходимо принять.

Вот пример запроса:

GET https://merchantapi.googleapis.com/accounts/v1/accounts/{ACCOUNT_ID}/termsOfServiceAgreementStates:retrieveForApplication

Успешный вызов возвращает ресурс TermsOfServiceAgreementState . Этот ресурс содержит:

  • name : Идентификатор штата, в котором заключено данное соглашение.
  • regionCode : Страна, на которую распространяется действие данного соглашения, обычно это страна ведения бизнеса, к которой относится учетная запись.
  • termsOfServiceKind : Это будет MERCHANT_CENTER .
  • accepted : Подробная информация о версии Условий использования, которую учетная запись уже приняла, включая имя ресурса termsOfService (например, termsOfService/132 ) и имя того, кто принял acceptedBy . Также может содержаться дата validUntil если required более новая версия Условий использования.
  • required : Подробная информация о версии Условий использования, которую учетная запись должна принять. Сюда входят имя ресурса termsOfService и tosFileUri , указывающий на удобочитаемый документ Условий использования.

Пример ответа:

{
  "name": "accounts/{ACCOUNT_ID}/termsOfServiceAgreementStates/MERCHANT_CENTER-{REGION_CODE}",
  "regionCode": "{REGION_CODE}",
  "termsOfServiceKind": "MERCHANT_CENTER",
  "accepted": {
    "termsOfService": "termsOfService/132",
    "acceptedBy": "accounts/{ACCOUNT_ID}"
  },
  "required": {
    "termsOfService": "termsOfService/132",
    "tosFileUri": "https://www.google.com/intl/{REGION_CODE}/policies/merchants/terms/"
  }
}

Если required новое соглашение об условиях использования, вы должны убедить продавца принять его.

Вот пример, который можно использовать для получения информации о состоянии соглашения об условиях обслуживания для конкретной учетной записи и страны:

Java

import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.shopping.merchant.accounts.v1.GetTermsOfServiceAgreementStateRequest;
import com.google.shopping.merchant.accounts.v1.TermsOfServiceAgreementState;
import com.google.shopping.merchant.accounts.v1.TermsOfServiceAgreementStateName;
import com.google.shopping.merchant.accounts.v1.TermsOfServiceAgreementStateServiceClient;
import com.google.shopping.merchant.accounts.v1.TermsOfServiceAgreementStateServiceSettings;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;

/**
 * This class demonstrates how to get a TermsOfServiceAgreementState for a specific
 * TermsOfServiceKind and country.
 */
public class GetTermsOfServiceAgreementStateSample {

  public static void getTermsOfServiceAgreementState(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.
    TermsOfServiceAgreementStateServiceSettings termsOfServiceAgreementStateServiceSettings =
        TermsOfServiceAgreementStateServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();

    // Creates TermsOfServiceAgreementState name to identify TermsOfServiceAgreementState.
    String name =
        TermsOfServiceAgreementStateName.newBuilder()
            .setAccount(config.getAccountId().toString())
            // The Identifier is: "{TermsOfServiceKind}-{country}"
            .setIdentifier("MERCHANT_CENTER-US")
            .build()
            .toString();

    System.out.println(name);

    // Calls the API and catches and prints any network failures/errors.
    try (TermsOfServiceAgreementStateServiceClient termsOfServiceAgreementStateServiceClient =
        TermsOfServiceAgreementStateServiceClient.create(
            termsOfServiceAgreementStateServiceSettings)) {

      // The name has the format:
      // accounts/{account}/termsOfServiceAgreementStates/{TermsOfServiceKind}-{country}
      GetTermsOfServiceAgreementStateRequest request =
          GetTermsOfServiceAgreementStateRequest.newBuilder().setName(name).build();

      System.out.println("Sending Get TermsOfServiceAgreementState request:");
      TermsOfServiceAgreementState response =
          termsOfServiceAgreementStateServiceClient.getTermsOfServiceAgreementState(request);

      System.out.println("Retrieved TermsOfServiceAgreementState below");
      // If the terms of service needs to be accepted, the "required" field will include the
      // specific version of the terms of service which needs to be accepted, alongside a link to
      // the terms of service itself.
      System.out.println(response);
    } catch (Exception e) {
      System.out.println(e);
    }
  }


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

    getTermsOfServiceAgreementState(config);
  }
}

PHP

use Google\ApiCore\ApiException;
use Google\Shopping\Merchant\Accounts\V1\Client\TermsOfServiceAgreementStateServiceClient;
use Google\Shopping\Merchant\Accounts\V1\GetTermsOfServiceAgreementStateRequest;

/**
 * Demonstrates how to get a TermsOfServiceAgreementState.
 */
class GetTermsOfServiceAgreementState
{

    /**
     * Gets a TermsOfServiceAgreementState.
     *
     * @param array $config The configuration data.
     * @return void
     */
    public static function getTermsOfServiceAgreementState($config): void
    {
        // Get OAuth credentials.
        $credentials = Authentication::useServiceAccountOrTokenFile();

        // Create client options.
        $options = ['credentials' => $credentials];

        // Create a TermsOfServiceAgreementStateServiceClient.
        $termsOfServiceAgreementStateServiceClient = new TermsOfServiceAgreementStateServiceClient($options);

        // Service agreeement identifier
        $identifier = "MERCHANT_CENTER-US";

        // Create TermsOfServiceAgreementState name.
        $name = "accounts/" . $config['accountId'] . "/termsOfServiceAgreementStates/" . $identifier;

        print $name . PHP_EOL;

        try {
            // Prepare the request.
            $request = new GetTermsOfServiceAgreementStateRequest([
                'name' => $name,
            ]);

            print "Sending Get TermsOfServiceAgreementState request:" . PHP_EOL;
            $response = $termsOfServiceAgreementStateServiceClient->getTermsOfServiceAgreementState($request);

            print "Retrieved TermsOfServiceAgreementState below\n";
            print $response->serializeToJsonString() . PHP_EOL;
        } catch (ApiException $e) {
            print $e->getMessage();
        }
    }

    /**
     * Helper to execute the sample.
     *
     * @return void
     */
    public function callSample(): void
    {
        $config = Config::generateConfig();

        self::getTermsOfServiceAgreementState($config);
    }

}

// Run the script
$sample = new GetTermsOfServiceAgreementState();
$sample->callSample();

Python

from examples.authentication import configuration
from examples.authentication import generate_user_credentials
from google.shopping.merchant_accounts_v1 import GetTermsOfServiceAgreementStateRequest
from google.shopping.merchant_accounts_v1 import TermsOfServiceAgreementStateServiceClient

# Replace with your actual value.
_ACCOUNT_ID = configuration.Configuration().read_merchant_info()
_IDENTIFIER = "MERCHANT_CENTER-US"  # Replace with your identifier


def get_terms_of_service_agreement_state():
  """Gets a TermsOfServiceAgreementState for a specific TermsOfServiceKind and country."""

  credentials = generate_user_credentials.main()
  client = TermsOfServiceAgreementStateServiceClient(credentials=credentials)

  name = (
      "accounts/"
      + _ACCOUNT_ID
      + "/termsOfServiceAgreementStates/"
      + _IDENTIFIER
  )

  print(name)

  request = GetTermsOfServiceAgreementStateRequest(name=name)

  try:
    print("Sending Get TermsOfServiceAgreementState request:")
    response = client.get_terms_of_service_agreement_state(request=request)
    print("Retrieved TermsOfServiceAgreementState below")
    print(response)
  except RuntimeError as e:
    print(e)


if __name__ == "__main__":
  get_terms_of_service_agreement_state()

Принять условия предоставления услуг

Для сохранения доступа к функциям Merchant Center продавцы должны принять последнюю версию Условий предоставления услуг.

Примите условия использования для своего аккаунта.

Если вы самостоятельно управляете своим аккаунтом в Merchant Center, выполните следующие действия:

  1. Вызовите termsOfServiceAgreementStates.retrieveForApplication , чтобы определить, required ли предоставление каких-либо условий обслуживания.
  2. Если требуется соглашение об условиях предоставления услуг, укажите название termsOfService в required поле (например, termsOfService/132 ).
  3. Для принятия условий использования вызовите метод termsOfService.accept . Вам потребуется название условий использования, ваш ACCOUNT_ID и regionCode возвращаемый методом retrieveForApplication.

    Вот пример запроса:

    POST https://merchantapi.googleapis.com/accounts/v1/{name={termsOfService/VERSION}}:accept
    {
      "account": "accounts/{ACCOUNT_ID}",
      "regionCode": "{REGION_CODE}"
    }
    

    В случае успешного выполнения запроса возвращается пустое тело ответа, и обновляется состояние соглашения об условиях использования учетной записи.

Направьте продавцов к принятию условий использования (для сторонних поставщиков).

Если вы являетесь сторонним поставщиком услуг (3P), управляющим счетами Merchant Center для других компаний, вы не должны принимать Условия использования от их имени. Вместо этого вам следует:

  1. Получите последние условия использования : вызовите termsOfService.retrieveLatest для regionCode и типа MERCHANT_CENTER продавца, чтобы получить подробную информацию о последней версии условий использования, которую ему, возможно, потребуется принять.

    Пример запроса:

    GET https://merchantapi.googleapis.com/accounts/v1/termsOfService:retrieveLatest?regionCode={REGION_CODE}&kind=MERCHANT_CENTER
    

    Пример ответа:

    {
        "name": "{termsOfService/VERSION}",
        "regionCode": "{REGION_CODE}",
        "kind": "MERCHANT_CENTER",
        "fileUri": "https://www.google.com/intl/{REGION_CODE}/policies/merchants/terms/"
    }
    
  2. Отображение условий обслуживания : Используйте fileUri из ответа, чтобы отобразить полный текст условий обслуживания продавцу в пользовательском интерфейсе вашего приложения.

  3. Получите подтверждение от продавца : продавец должен явно согласиться с условиями, указанными в вашем пользовательском интерфейсе.

  4. Зафиксируйте принятие условий с помощью API : после того, как продавец примет условия, вызовите termsOfService.accept , используя name условий обслуживания, полученное на шаге 1, ACCOUNT_ID продавца и его regionCode .

    Пример запроса:

    POST https://merchantapi.googleapis.com/accounts/v1/{name={termsOfService/VERSION}}:accept
    {
      "account": "accounts/{MERCHANT_ACCOUNT_ID}",
      "regionCode": "{REGION_CODE}"
    }
    

Вот пример, который вы можете использовать для принятия условий обслуживания для конкретного аккаунта (после того, как продавец согласится):

Java

import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.shopping.merchant.accounts.v1.AcceptTermsOfServiceRequest;
import com.google.shopping.merchant.accounts.v1.TermsOfServiceServiceClient;
import com.google.shopping.merchant.accounts.v1.TermsOfServiceServiceSettings;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;

/** This class demonstrates how to accept the TermsOfService agreement in a given account. */
public class AcceptTermsOfServiceSample {

  public static void acceptTermsOfService(String accountId, String tosVersion, String regionCode)
      throws Exception {

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

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

    // Calls the API and catches and prints any network failures/errors.
    try (TermsOfServiceServiceClient tosServiceClient =
        TermsOfServiceServiceClient.create(tosServiceSettings)) {

      // The parent has the format: accounts/{account}
      AcceptTermsOfServiceRequest request =
          AcceptTermsOfServiceRequest.newBuilder()
              .setName(String.format("termsOfService/%s", tosVersion))
              .setAccount(String.format("accounts/%s", accountId))
              .setRegionCode(regionCode)
              .build();

      System.out.println("Sending request to accept terms of service...");
      tosServiceClient.acceptTermsOfService(request);

      System.out.println("Successfully accepted terms of service.");
    } catch (Exception e) {
      System.out.println(e);
    }
  }

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

    // See GetTermsOfServiceAgreementStateSample to understand how to check which version of the
    // terms of service needs to be accepted, if any.
    // Likewise, if you know that the terms of service needs to be accepted, you can also simply
    // call RetrieveLatestTermsOfService to get the latest version of the terms of service.
    // Region code is either a country when the ToS applies specifically to that country or 001 when
    // it applies globally.
    acceptTermsOfService(config.getAccountId().toString(), "VERSION_HERE", "REGION_CODE_HERE");
  }
}

PHP

use Google\ApiCore\ApiException;
use Google\Shopping\Merchant\Accounts\V1\AcceptTermsOfServiceRequest;
use Google\Shopping\Merchant\Accounts\V1\Client\TermsOfServiceServiceClient;

/**
 * Demonstrates how to accept the TermsOfService agreement in a given account.
 */
class AcceptTermsOfService
{

    /**
     * Accepts the Terms of Service agreement.
     *
     * @param string $accountId The account ID.
     * @param string $tosVersion The Terms of Service version.
     * @param string $regionCode The region code.
     * @return void
     */
    public static function acceptTermsOfService($accountId, $tosVersion, $regionCode): void
    {
        // Get OAuth credentials.
        $credentials = Authentication::useServiceAccountOrTokenFile();

        // Create client options.
        $options = ['credentials' => $credentials];

        // Create a TermsOfServiceServiceClient.
        $tosServiceClient = new TermsOfServiceServiceClient($options);

        try {
            // Prepare the request.
            $request = new AcceptTermsOfServiceRequest([
                'name' => sprintf("termsOfService/%s", $tosVersion),
                'account' => sprintf("accounts/%s", $accountId),
                'region_code' => $regionCode,
            ]);

            print "Sending request to accept terms of service...\n";
            $tosServiceClient->acceptTermsOfService($request);

            print "Successfully accepted terms of service.\n";
        } catch (ApiException $e) {
            print $e->getMessage();
        }
    }

    /**
     * Helper to execute the sample.
     *
     * @return void
     */
    public function callSample(): void
    {
        $config = Config::generateConfig();

        // Replace with actual values.
        $tosVersion = "132";
        $regionCode = "US";

        self::acceptTermsOfService($config['accountId'], $tosVersion, $regionCode);
    }
}

// Run the script
$sample = new AcceptTermsOfService();
$sample->callSample();

Python

from examples.authentication import configuration
from examples.authentication import generate_user_credentials
from google.shopping.merchant_accounts_v1 import AcceptTermsOfServiceRequest
from google.shopping.merchant_accounts_v1 import TermsOfServiceServiceClient

# Replace with your actual values.
_ACCOUNT_ID = configuration.Configuration().read_merchant_info()
_TOS_VERSION = (  # Replace with the Terms of Service version to accept
    "VERSION_HERE"
)
_REGION_CODE = "US"  # Replace with the region code


def accept_terms_of_service():
  """Accepts the Terms of Service agreement for a given account."""

  credentials = generate_user_credentials.main()
  client = TermsOfServiceServiceClient(credentials=credentials)

  # Construct the request
  request = AcceptTermsOfServiceRequest(
      name=f"termsOfService/{_TOS_VERSION}",
      account=f"accounts/{_ACCOUNT_ID}",
      region_code=_REGION_CODE,
  )

  try:
    print("Sending request to accept terms of service...")
    client.accept_terms_of_service(request=request)
    print("Successfully accepted terms of service.")
  except RuntimeError as e:
    print(e)


if __name__ == "__main__":
  accept_terms_of_service()

Особые соображения для сторонних поставщиков услуг

В качестве стороннего поставщика вы можете управлять условиями использования для клиентских аккаунтов.

Управление условиями использования для клиентских аккаунтов

Если вы используете расширенный аккаунт и создаете клиентские аккаунты для разных компаний:

  • Согласование условий использования расширенного аккаунта : Если расширенный аккаунт предоставляет услугу агрегации аккаунтов для клиентских аккаунтов, то принятые им условия использования также будут применяться ко всем его клиентским аккаунтам, использующим эту услугу.
  • Отображение и согласие : Даже если подтверждение в расширенном аккаунте распространяется и на клиентские аккаунты, рекомендуется (и может быть юридически обязательным) отображать соответствующие Условия использования Google Merchant Center фактическому владельцу бизнеса каждого такого клиента. Вы должны получить их явное согласие на то, что они понимают и принимают эти условия, даже если запрос API для подтверждения выполняется на уровне расширенного аккаунта.
  • Проверка статуса учетной записи клиента : используйте termsOfServiceAgreementStates.retrieveForApplication для конкретной учетной записи клиента, чтобы проверить статус ее условий обслуживания и узнать, подпадает ли она под действие соглашения расширенной учетной записи или требуется какое-либо прямое действие.

Управление условиями использования для других учетных записей

Как подробно описано в руководстве для продавцов по принятию Условий предоставления услуг , когда вы помогаете компании создавать или управлять своей учетной записью, эта компания (владелец учетной записи) должна лично принять Условия предоставления услуг. Вы обеспечиваете это, получая и отображая Условия предоставления услуг, а затем вызывая метод termsOfService.accept от имени клиента после того, как он дал свое явное согласие через ваш интерфейс.