Как управлять соглашениями об Условиях использования Merchant Center

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

В этом руководстве рассказывается, как использовать Merchant API для управления соглашениями в собственном аккаунте или в аккаунтах, которыми вы управляете как сторонний поставщик.

Вы можете:

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

Требования

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

Если вам нужно управлять несколькими аккаунтами, вы можете создать клиентские аккаунты с помощью Merchant API. Подробнее о том, как создавать аккаунты…

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

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

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

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

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

    При успешном вызове возвращается пустой ответ и обновляется статус согласия с Условиями использования.

Как помочь продавцам принять Условия использования (для сторонних поставщиков)

Если вы сторонний поставщик, который управляет аккаунтами 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 от имени пользователя после того, как он явно выразит свое согласие в вашем интерфейсе.