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

لاستخدام Merchant Center وميزاته، يجب قبول بنود خدمة Merchant Center الخاصة بالموقع الجغرافي لنشاطك التجاري. توضّح هذه الاتفاقيات الأحكام القانونية لاستخدام خدمات 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}"
    }
    

    يعرض الطلب الناجح نص استجابة فارغًا، ويعدّل حالة اتفاقية بنود الخدمة للحساب.

إرشاد التجّار لقبول بنود الخدمة (لمقدّمي الخدمات التابعين لجهات خارجية)

إذا كنت مقدّم خدمة تابعًا لجهة خارجية (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. تسجيل الموافقة باستخدام واجهة برمجة التطبيقات: بعد موافقة التاجر، يمكنك طلب 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 نيابةً عن المستخدمين بعد أن يمنحوا موافقتهم الصريحة من خلال واجهتك.