ניהול הסכמים בנושא התנאים וההגבלות של Merchant Center

כדי להשתמש ב-Merchant Center ובתכונות שלו, אתם צריכים לאשר את התנאים וההגבלות של Merchant Center בהתאם למיקום של העסק שלכם. ההסכמים האלה מפרטים את התנאים המשפטיים לשימוש בשירותי Merchant Center.

במדריך הזה מוסבר איך להשתמש ב-Merchant API כדי לנהל את ההסכמים האלה, בין אם בחשבון שלכם או בחשבונות שאתם מנהלים כספק צד שלישי (3P).

אתם יכולים להשיג את התוצאות הבאות:

  • בדיקת הסטטוס הנוכחי של ההסכמה לתנאים ולהגבלות בחשבון.
  • להנחות את המוכרים לאשר את התנאים וההגבלות הנדרשים.
  • לנהל את התנאים וההגבלות כספק שירות של חשבונות לקוח.

דרישות מוקדמות

כדי להשתמש ב-Merchant API, צריך חשבון Merchant Center. אחרי שיוצרים את החשבון באמצעות ממשק המשתמש (UI) של Merchant Center, אפשר לבצע בו שינויים (למשל, לעדכן את פרטי העסק, לנהל משתמשים וכו') באמצעות ממשק המשתמש או ה-API.

אם אתם צריכים לנהל כמה חשבונות, אתם יכולים ליצור חשבונות לקוח באמצעות Merchant API. איך יוצרים חשבונות

בדיקת סטטוס ההסכמה לתנאים ולהגבלות של החשבון

כדי שמוכר יוכל להשתמש ב-Merchant Center באופן מלא, או אם אתם צריכים לאמת את סטטוס ההסכם הנוכחי שלו, אתם יכולים לאחזר את סטטוס ההסכם שלו לתנאים ולהגבלות.

משתמשים ב-method‏ 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 בחשבון לקוח ספציפי כדי לבדוק את סטטוס התנאים וההגבלות שלו, ולראות אם הוא נכלל בהסכם של החשבון המתקדם או אם נדרשת פעולה ישירה.

ניהול התנאים וההגבלות בחשבונות אחרים

כמו שמפורט בקטע הנחיית מוכרים לאשר את התנאים וההגבלות, כשאתם עוזרים לעסק ליצור או לנהל את החשבון שלו, העסק (בעל החשבון) צריך לאשר באופן אישי את התנאים וההגבלות . כדי לעשות את זה, אתם צריכים לאחזר ולהציג את התנאים וההגבלות, ואז להפעיל את ה-method‏ termsOfService.accept בשמם אחרי שהם נתנו את ההסכמה המפורשת שלהם דרך הממשק שלכם.