Para usar o Merchant Center e os recursos dele, é necessário aceitar os Termos de Serviço (TOS) do Merchant Center para o local da sua empresa. Esses contratos descrevem os termos legais para usar os serviços do Merchant Center.
Este guia explica como usar a API Merchant para gerenciar esses contratos, seja para sua própria conta ou para contas que você gerencia como um provedor terceirizado (3P).
Você pode fazer o seguinte:
- Verifica o status atual do contrato de Termos de Serviço de uma conta.
- Oriente os comerciantes a aceitar os Termos de Serviço necessários.
- Gerenciar os Termos de Serviço como um provedor terceirizado para contas de clientes ou contas independentes.
Pré-requisitos
Para usar a API Merchant, você precisa de uma conta do Merchant Center. Depois de criar a conta usando a interface do usuário (IU) do Merchant Center, você pode fazer mudanças nela (por exemplo, atualizar as informações comerciais, gerenciar usuários etc.) usando a IU ou a API.
Se você precisar gerenciar várias contas, crie contas de cliente usando a API Merchant. Consulte Criar e gerenciar subcontas.
Verificar o estado do contrato de Termos de Serviço de uma conta
Antes que um comerciante possa usar totalmente o Merchant Center ou se você precisar verificar o status atual do contrato, é possível recuperar o estado do contrato de Termos de Serviço.
Use o método
termsOfServiceAgreementStates.retrieveForApplication
para acessar o estado do contrato de Termos de Serviço do aplicativo principal do Merchant Center.
Esse método retorna os TOS atuais, se houver, e, se eles tiverem sido atualizados desde sua última aceitação, a versão mais recente que você precisa aceitar.
Confira um exemplo de solicitação:
GET https://merchantapi.googleapis.com/accounts/v1/accounts/{ACCOUNT_ID}/termsOfServiceAgreementStates:retrieveForApplication
Uma chamada bem-sucedida retorna um recurso
TermsOfServiceAgreementState
. Esse recurso contém:
name
: o identificador do estado do contrato.regionCode
: o país a que esse estado de contrato se aplica, geralmente o país da empresa da conta.termsOfServiceKind
: seráMERCHANT_CENTER
.accepted
: detalhes sobre a versão dos Termos de Serviço que a conta já aceitou, incluindo o nome do recursotermsOfService
(comotermsOfService/132
) e quemacceptedBy
. Também pode incluir uma data devalidUntil
se uma versão mais recente dos ToS forrequired
.required
: detalhes sobre uma versão dos Termos de Serviço que a conta precisa aceitar. Isso inclui o nome do recursotermsOfService
e umtosFileUri
que aponta para o documento dos Termos de Serviço legível.
Exemplo de resposta:
{
"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/"
}
}
Se um novo ToS estiver required
, oriente o comerciante a aceitá-lo.
Confira um exemplo que pode ser usado para recuperar o estado do contrato dos Termos de Serviço de uma conta e um país específicos:
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()
Aceite os Termos de Serviço
Os comerciantes precisam aceitar os Termos de Serviço mais recentes para manter o acesso aos recursos do Merchant Center.
Aceitar os Termos de Serviço da sua conta
Se você estiver gerenciando sua própria conta do Merchant Center, faça o seguinte:
- Chame
termsOfServiceAgreementStates.retrieveForApplication
para identificar se algum TdS érequired
. - Se for necessário, anote o nome
termsOfService
do camporequired
(por exemplo,termsOfService/132
). Chame
termsOfService.accept
para aceitar os Termos de Serviço. Você vai precisar do nome dos Termos de Serviço, do seuACCOUNT_ID
e doregionCode
retornado por "retrieveForApplication".Confira um exemplo de solicitação:
POST https://merchantapi.googleapis.com/accounts/v1/{name={termsOfService/VERSION}}:accept { "account": "accounts/{ACCOUNT_ID}", "regionCode": "{REGION_CODE}" }
Uma chamada bem-sucedida retorna um corpo de resposta vazio e atualiza o estado de concordância com os Termos de Serviço da conta.
Oriente os comerciantes a aceitar os Termos de Serviço (para provedores terceirizados)
Se você for um provedor terceirizado (3P) que gerencia contas independentes do Merchant Center para outras empresas, não aceite os Termos de Serviço em nome delas. Em vez disso, faça o seguinte:
Recupere os Termos de Serviço mais recentes: chame
termsOfService.retrieveLatest
para o tiporegionCode
eMERCHANT_CENTER
do comerciante e receba os detalhes da versão mais recente dos Termos de Serviço que ele precisa aceitar.Exemplo de solicitação:
GET https://merchantapi.googleapis.com/accounts/v1/termsOfService:retrieveLatest?regionCode={REGION_CODE}&kind=MERCHANT_CENTER
Exemplo de resposta:
{ "name": "{termsOfService/VERSION}", "regionCode": "{REGION_CODE}", "kind": "MERCHANT_CENTER", "fileUri": "https://www.google.com/intl/{REGION_CODE}/policies/merchants/terms/" }
Mostrar os Termos de Serviço: use o
fileUri
da resposta para mostrar o texto completo dos Termos de Serviço ao comerciante na interface do seu aplicativo.Obter a aceitação do comerciante: o comerciante precisa concordar explicitamente com os termos na sua interface.
Registre a aceitação usando a API: depois que o comerciante aceitar, chame
termsOfService.accept
usando oname
dos Termos de Serviço obtidos na etapa 1, oACCOUNT_ID
do comerciante e oregionCode
dele.Exemplo de solicitação:
POST https://merchantapi.googleapis.com/accounts/v1/{name={termsOfService/VERSION}}:accept { "account": "accounts/{MERCHANT_ACCOUNT_ID}", "regionCode": "{REGION_CODE}" }
Confira um exemplo que você pode usar para aceitar o contrato dos Termos de Serviço de uma determinada conta (depois que o comerciante concordar):
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()
Considerações especiais para provedores terceirizados
Como um provedor terceirizado, você pode gerenciar os Termos de Serviço para contas de clientes ou contas independentes.
Gerenciar os Termos de Serviço das contas de clientes
Se você opera uma conta avançada e cria contas de cliente para diferentes empresas:
- Aceitação avançada de contas: se uma conta avançada fornecer o serviço de agregação de contas para contas de clientes, os Termos de Serviço aceitos pela conta avançada também serão aplicáveis a todas as contas de clientes com esse serviço.
- Exibição e consentimento: mesmo que a aceitação da conta avançada abranja as contas de cliente, é uma prática recomendada (e pode ser uma expectativa legal) exibir os Termos de Serviço relevantes do Google Merchant Center para o proprietário real de cada conta de cliente. Você precisa receber o consentimento explícito de que eles entendem e concordam com estes termos, mesmo que a chamada de API para aceitação seja feita no nível da conta avançada.
- Verificar o status da conta do cliente: use
termsOfServiceAgreementStates.retrieveForApplication
em uma conta de cliente específica para verificar o status dos Termos de Serviço e saber se ela está coberta pelo contrato da conta avançada ou se alguma ação direta é necessária.
Gerenciar os Termos de Serviço de contas independentes
Conforme detalhado em Orientar comerciantes a aceitar os Termos de Serviço, quando você ajuda uma empresa a criar ou gerenciar uma conta independente do Merchant Center, ela (o proprietário da conta) precisa aceitar pessoalmente os Termos de Serviço. Para facilitar isso, recupere e mostre os TdS e chame o método termsOfService.accept
em nome deles depois que eles derem consentimento explícito pela sua interface.