إدارة اتفاقيات بنود خدمة Merchant Center

لاستخدام Merchant Center وميزاته، يجب قبول الـ بنود خدمة Merchant Center (ToS) لموقع مؤسستك. تحدّد هذه الاتفاقيات الشروط القانونية لاستخدام خدمات Merchant Center.

يوضّح هذا الدليل كيفية استخدام Merchant API لإدارة هذه الاتفاقيات، سواء لحسابك أو للحسابات التي تديرها بصفتك موفّرًا خارجيًا.

يمكنك إجراء ما يلي:

  • التحقّق من الحالة الحالية لاتفاقية بنود الخدمة لحساب معيّن
  • توجيه التجّار لقبول بنود الخدمة اللازمة
  • إدارة بنود الخدمة بصفتك موفّر خدمة لحسابات العملاء

المتطلبات الأساسية

لاستخدام Merchant API، يجب أن يكون لديك حساب على Merchant Center. بعد إنشائه باستخدام واجهة مستخدم Merchant Center، يمكنك إجراء تغييرات على الحساب (مثل تعديل معلومات مؤسستك وإدارة المستخدمين وما إلى ذلك) إما باستخدام واجهة المستخدم أو واجهة برمجة التطبيقات.

إذا كنت بحاجة إلى إدارة حسابات متعدّدة، يمكنك إنشاء حسابات عملاء باستخدام 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 إصدار جديد من بنود الخدمة، عليك توجيه التاجر لقبوله.

في ما يلي نموذج يمكنك استخدامه لاسترداد حالة اتفاقية بنود الخدمة لحساب وبلد معيّنين:

جافا

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. تسجيل الموافقة باستخدام واجهة برمجة التطبيقات: بعد أن يقبل التاجر، استخدِم طريقة 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}"
    }
    

في ما يلي نموذج يمكنك استخدامه لقبول اتفاقية بنود الخدمة لحساب معيّن (بعد موافقة التاجر):

جافا

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 ذات الصلة على مالك المؤسسة الفعلي لكل حساب من هذه الحسابات. عليك الحصول على موافقتهم الصريحة على فهم هذه البنود والموافقة عليها، حتى إذا تم إجراء طلب بيانات من واجهة برمجة التطبيقات للموافقة على مستوى الحساب بامتيازات متقدّمة.
  • التحقّق من حالة حساب العميل: استخدِم termsOfServiceAgreementStates.retrieveForApplication على حساب عميل معيّن للتحقّق من حالة بنود الخدمة ومعرفة ما إذا كانت مشمولة باتفاقية الحساب بامتيازات متقدّمة أو إذا كان مطلوبًا اتخاذ أي إجراء مباشر.

إدارة بنود الخدمة لحسابات أخرى

كما هو موضّح في توجيه التجّار لقبول بنود الخدمة، عندما تساعد مؤسسة في إنشاء حسابها أو إدارته، يجب أن تقبل هذه المؤسسة (مالك الحساب) بنود الخدمة بنفسها . يمكنك تسهيل ذلك من خلال استرداد بنود الخدمة وعرضها، ثم استخدام طريقة termsOfService.accept نيابةً عنها بعد أن تمنح موافقتها الصريحة من خلال واجهتك.