ثبت نام به‌عنوان یک برنامه‌نویس

ثبت‌نام به‌عنوان توسعه‌دهنده یک فرایند راه‌اندازی اجباری و یک‌باره است که پروژه Google Cloud شما را به حساب Merchant Center شما پیوند می‌دهد و اطلاعات تماس توسعه‌دهنده شما را در Google ثبت می‌کند. این کار به Google امکان می‌دهد اعلامیه‌های خدمات مهم و به‌روزرسانی‌های اجباری را به مخاطبین فنی مربوطه که ارائه می‌دهید ارسال کند.

این سند بخشی از یک مجموعه چندبخشی درباره شروع به کار با Merchant API است. اگر قبلاً در Merchant API ثبت‌نام کرده‌اید، می‌توانید به بخش بعدی بروید: درج اولین محصول

پیش‌نیازها

قبل‌از ثبت‌نام برای استفاده از Merchant API، مطمئن شوید که شرایط زیر را برآورده می‌کنید:

  • حساب Merchant Center: باید حساب Merchant Center موجود داشته باشید. ثبت‌نام فقط برای حساب‌های تولید پشتیبانی می‌شود. حساب‌های آزمایشی واجدشرایط ثبت‌نام توسعه‌دهنده نیستند.
  • صفحه اصلی درستی‌سنجی‌شده: حساب Merchant Center شما باید وب‌سایت درستی‌سنجی‌شده داشته باشد. این کار مالکیت دامنه مرتبط با کسب‌وکارتان را اثبات می‌کند.
  • دسترسی سرپرست در حساب Merchant Center: ایمیل یا حساب سرویسی که برای مجاز کردن فراخوانی ثبت استفاده می‌کنید باید نوع دسترسی ADMIN در حساب Merchant Center که در آن ثبت‌نام می‌کنید داشته باشد. برای اطلاعات بیشتر، به مجاز کردن درخواست‌ها برای Merchant API مراجعه کنید.
  • شناسه پروژه Google Cloud: برنامه شما باید با پروژه Google Cloud اختصاصی مرتبط باشد تا اطلاعات کاربری را برای اصالت‌سنجی ارائه دهد. برای جزئیات درباره محل پیدا کردن شناسه پروژه، به پیدا کردن نام، شماره، و شناسه پروژه مراجعه کنید.
  • نشانی ایمیل معتبری که با «حساب Google» مرتبط باشد و آن را به‌عنوان مسئول تماس توسعه‌دهنده برای دریافت به‌روزرسانی‌ها از Google ارائه دهید. نباید ایمیل حساب سرویس باشد. می‌توانید از نشانی ایمیلی که ازقبل بخشی از حساب Merchant Center است یا نشانی ایمیل جدیدی استفاده کنید.

ثبت‌نام به‌عنوان توسعه‌دهنده با Merchant API

برای استفاده از Merchant API، باید اطلاعات تماس توسعه‌دهنده و پروژه Google Cloud خود را ازطریق روش registerGcp در حساب Merchant Center خود ثبت کنید.

چه با چند حساب فروشنده کار کنید چه نه، عملیات ثبت‌نام را یک‌بار برای هر پروژه Google Cloud که قصد استفاده از آن را دارید انجام می‌دهید. اگر با چند پروژه Google Cloud کار می‌کنید، می‌توانید هرکدام یا همه آن‌ها را در یک «حساب Merchant Center» ثبت کنید.

مزایای ثبت‌نام

ثبت‌نام مزایای زیر را به‌همراه دارد:

  • ایجاد مخاطب فنی: مخاطب فنی در Merchant Center ایجاد می‌کند. Google به‌روزرسانی‌های مهم مختص API را به مخاطب فنی ارسال می‌کند، مانند اعلامیه‌های خدمات و اطلاعات ویژگی‌های جدید.
  • مدیریت چند حساب فروشنده: به شما امکان می‌دهد به‌عنوان نقطه تماس توسعه‌دهنده برای همه حساب‌های فروشنده‌ای که مدیریت می‌کنید عمل کنید.

به‌جز ثبت‌نام، هرگونه فراخوانی Merchant API از پروژه Google Cloud ثبت‌نشده مسدود می‌شود و کد خطای 401 با وضعیت UNAUTHENTICATED و پیام خطای زیر برگردانده می‌شود:

GCP project with id {GCP_ID} and number {GCP_NUMBER} is not registered with the merchant account.
Follow these steps https://developers.google.com/merchant/api/guides/quickstart#register_as_a_developer
to register the GCP project with the merchant account then try calling the API again in 5 minutes.

ملاحظات مهم

  • راه‌اندازی یک‌باره برای هر پروژه Google Cloud: ثبت‌نام یک راه‌اندازی یک‌باره برای هر پروژه Google Cloud است و برای همه کاربران و حساب‌های خدمات در پروژه Google Cloud اعمال می‌شود. مطمئن شوید Merchant API در پروژه Google Cloud شما فعال باشد.
  • هر پروژه Google Cloud را فقط می‌توان در هر زمان مشخص با یک حساب Merchant Center ثبت کرد: اگر سعی کنید یک پروژه Google Cloud را به‌طور هم‌زمان با چند حساب Merchant Center ثبت کنید، خطای ALREADY_REGISTERED دریافت می‌کنید. از همان نشانی ایمیل توسعه‌دهنده برای ثبت‌نام استفاده کنید. توجه داشته باشید که چند پروژه Google Cloud را می‌توان در یک «حساب Merchant Center» ثبت کرد. برای دریافت دستورالعمل‌های مربوط به تغییر یا چرخش پروژه Google Cloud ثبت‌شده، به مدیریت و انتقال پروژه‌های Google Cloud مراجعه کنید.
  • تعیین حساب صحیح برای طرف‌های سومی که چندین فروشنده را مدیریت می‌کنند: برای اطمینان از پایداری بلندمدت و جلوگیری از اختلال در خدمات، طرف‌های سومی که چندین فروشنده را نمایندگی یا مدیریت می‌کنند باید از ساختار حساب مناسب در بوم‌سازگان Google استفاده کنند. توصیه می‌کنیم حسابی را ثبت کنید که هویت کسب‌وکارتان را نشان می‌دهد، بسته به نوع کسب‌وکارتان:

    • بازارگاه‌هایی که حساب پیشرفته موجود دارند: اگر کسب‌وکارتان به‌عنوان بازارگاه فعالیت می‌کند و ازقبل حساب پیشرفته‌ای دارد که کل پلاتفرم را نشان می‌دهد، باید از شناسه این حساب موجود استفاده کنید.
    • سرویس‌های مقایسه قیمت (CSS): اگر CSS هستید، باید از شناسه حساب CSS منحصربه‌فرد یا شناسه حساب گروه CSS خود استفاده کنید.
    • کارگزاری‌ها، توسعه‌دهندگان، و دیگر طرف‌های سوم: اگر کسب‌وکار طرف سومی هستید، مثلاً کارگزاری یا توسعه‌دهنده طرف سومی که چندین حساب فروشنده را مدیریت می‌کند و شناسه Merchant Center واحدی که نماینده کسب‌وکارتان باشد ندارید، باید «حساب Merchant Center» اصلی جدیدی ایجاد کنید و درخواست کنید آن را به حساب پیشرفته تبدیل کنیم. حساب‌های پیشرفته می‌توانند حساب‌های فرعی را مدیریت کنند و ساختار لازم را برای عملیات شخص ثالث فراهم کنند.

    جدول زیر توصیه‌هایی برای انواع مختلف شریک ارائه می‌دهد:

    نوع شریک حساب توصیه‌شده برای ثبت
    بازارها حساب پیشرفته اصلی (یا بزرگ‌ترین حساب پیشرفته) شما.
    آژانس‌های تبلیغاتی حساب مستقل یا حساب پیشرفته‌ای که نماینده شرکت شما است. اگر تازه می‌خواهید Merchant API را شروع کنید، توصیه می‌کنیم حساب مستقلی ایجاد کنید.
    سرویس‌های مقایسه قیمت (CSS) شناسه حساب گروه CSS یا شناسه حساب CSS خاص شما، بسته به اینکه حساب نماینده کل گروه CSS باشد یا فقط یک CSS خاص در یک گروه. از حساب پیشرفته CSS استفاده نکنید.
    فروشندگان یا نمانام‌ها حساب اصلی شما که نماینده نمانام شما است. می‌تواند حساب مستقل یا پیشرفته باشد.
    ارائه‌دهندگان داده‌های فروش/ فهرست موجودی حساب پیشرفته اصلی (یا بزرگ‌ترین حساب پیشرفته) شما.
    سایر اشخاص ثالث اگر حساب Merchant Center دارید، می‌توانید از آن برای ثبت‌نام استفاده کنید. درغیراین‌صورت، حساب مستقل شرکتی ایجاد کنید. سپس وب‌سایتتان را درستی‌سنجی کنید.
  • ثبت‌نام را فقط برای Merchant Center اصلی‌تان انجام دهید: ثبت‌نام توسعه‌دهنده را فقط بااستفاده از حساب Merchant Center اصلی‌تان انجام می‌دهید و به مخاطب توسعه‌دهنده برای همه زیرحساب‌های Merchant Center پیوندشده تبدیل می‌شوید. برای هریک از حساب‌های فرعی Merchant Center خود ثبت‌نام نکنید.

نوشتار جایگزین برای دسترس‌پذیری

نمودار قبلی راه‌اندازی ثبت‌نام را هنگام استفاده از چندین پروژه Google Cloud و یک Merchant Center اصلی با چند حساب فرعی Merchant Center اختیاری نشان می‌دهد.

  • الزامات اصالت‌سنجی: هنگام ثبت‌نام، حساب Merchant Center اصالت‌سنجی‌شده (که حسابی است که اطلاعات کاربری شما در آن قرار دارد) باید با حساب Merchant Center جعل‌شده (که حسابی است که درحال ثبت آن هستید) مطابقت داشته باشد. اگر با حساب ولی یا مدیر جداگانه‌ای اصالت‌سنجی شده باشید، نمی‌توانید برای حساب فرعی ثبت‌نام کنید.

  • فقط حساب‌های وب‌سایت تأییدشده: ثبت‌نام فقط برای حساب‌های Merchant Center با وب‌سایت تأییدشده مجاز است.

  • عدم ثبت برای حساب‌های آزمایشی: نمی‌توانید برای حساب‌های آزمایشی ثبت‌نام کنید.

  • پس‌از ثبت نشانی ایمیل توسعه‌دهنده:

    • می‌توانید ظرف ۵ دقیقه پس‌از ثبت‌نام، فراخوانی‌های Merchant API را انجام دهید.
    • اگر ایمیل متعلق به کاربر Merchant Center موجودی باشد، نقش API developer به او اعطا می‌شود. درغیراین‌صورت، کاربر جدیدی در Merchant Center ایجاد می‌شود و باید ظرف ۱۴ روز دعوت را بپذیرد تا منقضی نشود و مجبور نباشد فرایند ثبت‌نام را ازسر بگیرد. فقط پس‌از اینکه کاربر روی پیوند دعوت کلیک کرد، فرایند ثبت‌نام را تکمیل می‌کنید.

برقراری تماس ثبت‌نام

با فراخوانی روش registerGcp ثبت‌نام می‌کنید. دو گزینه برای برقراری تماس ثبت‌نام دارید:

  • گزینه ۱: فراخوانی‌های مستقیم API درخواست‌های خام را مستقیماً به نقاط پایانی API، معمولاً ازطریق HTTP(S)، ارسال می‌کنید. جنبه‌هایی مانند تشکیل بدنه درخواست، تنظیم سرصفحه‌ها (ازجمله اصالت‌سنجی)، و تجزیه پاسخ را به‌صورت دستی مدیریت می‌کنید.
  • گزینه ۲: کتابخانه‌های کارخواه از کتابخانه‌های ازپیش‌ساخته‌شده‌ای استفاده می‌کنید که روشی راحت‌تر و اصطلاحی‌تر برای تعامل با Merchant API ارائه می‌دهند. آن‌ها اصالت‌سنجی و صدور مجوز را انجام می‌دهند و روشی راحت برای خلاصه کردن ارتباط HTTP زیربنایی ارائه می‌دهند. نمونه کدهای رسمی برای شروع سریع دردسترس است.

مجوز تماس ثبت‌نام

همان‌طور که در مرحله مجاز کردن درخواست‌ها برای Merchant API توضیح داده شده است، دو سناریوی اصالت‌سنجی متمایز دارید:

  • OAuth 2.0: برای ارائه‌دهندگان یا آژانس‌های شخص ثالثی که چندین حساب فروشنده را مدیریت می‌کنند
  • حساب‌های سرویس: برای دسترسی به حساب Merchant Center خودتان

برای اطلاعات بیشتر درباره صدور مجوز تماس ثبت‌نام، به چگونه اصالت‌سنجی و صدور مجوز را برای تماس ثبت‌نام انجام دهم؟ مراجعه کنید.

تماس ثبت‌نام

در مثال‌های زیر، تماس ثبت‌نام را بااستفاده از تماس‌های مستقیم میانای برنامه‌سازی کاربردی یا کتابخانه‌های کارخواه انجام می‌دهید.

تماس ثبت‌نام را بااستفاده از روش registerGcp انجام می‌دهید.

POST https://merchantapi.googleapis.com/accounts/v1/accounts/{ACCOUNT_ID}/developerRegistration:registerGcp
Content-Type: application/json
Authorization: Bearer {ACCESS_TOKEN}"

{
  "developerEmail": "{DEVELOPER_EMAIL}"
}

موارد زیر را جایگزین کنید:

  • ACCOUNT_ID: شناسه Merchant Center شما
  • ACCESS_TOKEN: کد مجوز برای برقراری تماس با میانای برنامه‌سازی کاربردی
  • DEVELOPER_EMAIL: نشانی ایمیل مخاطب فنی اصلی

فراخوانی موفقیت‌آمیز منبع DeveloperRegistration را برمی‌گرداند، که وضعیت پیونددهی موفقیت‌آمیز را تأیید می‌کند:

  "name": "accounts/{ACCOUNT_ID}/developerRegistration",
  "gcpIds": ["{GOOGLE_CLOUD_PROJECT_ID}"]

Python

نمونه‌ها را بارگیری کنید و راهنمایی‌های نمونه‌های Python در Google Merchant API را برای راه‌اندازی کتابخانه‌های کارخواه Python دنبال کنید.

from examples.authentication import configuration
from examples.authentication import generate_user_credentials
from google.shopping.merchant_accounts_v1 import DeveloperRegistration
from google.shopping.merchant_accounts_v1 import DeveloperRegistrationServiceClient
from google.shopping.merchant_accounts_v1 import RegisterGcpRequest


def register_gcp(
    account_id: str, developer_email: str
) -> DeveloperRegistration:
  """Registers the GCP project used to call the Merchant API with a developer email.

  Args:
    account_id: The ID of your Merchant Center account.
    developer_email: The email address of the developer to register.

  Returns:
    The created or updated DeveloperRegistration object.
  """
  # Get OAuth credentials.
  credentials = generate_user_credentials.main()

  # Create a client to the Developer Registration Service.
  client = DeveloperRegistrationServiceClient(credentials=credentials)

  # The name has the format: accounts/{account}/developerRegistration
  name = f"accounts/{account_id}/developerRegistration"

  # Create the request to register the GCP project.
  request = RegisterGcpRequest(
      name=name,
      developer_email=developer_email,
  )

  # Make the API call and handle potential errors.
  try:
    print("Sending RegisterGcp request:")
    response = client.register_gcp(request=request)
    print("Registered GCP project successfully:")
    print(response)
    return response
  except RuntimeError as e:
    print(f"An error occurred: {e}")
    raise


if __name__ == "__main__":

  # Your Merchant Center account ID.
  # This can be found in the Merchant Center UI.
  _account_id = configuration.Configuration().read_merchant_info()

  # The developer email to associate with the GCP project.
  _developer_email = "YOUR_EMAIL_HERE"

  register_gcp(_account_id, _developer_email)

جاوا

نمونه‌ها را بارگیری کنید و راهنمایی‌های نمونه‌های Java در Google Merchant API را برای راه‌اندازی کتابخانه‌های کارخواه Java دنبال کنید.

import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.shopping.merchant.accounts.v1.DeveloperRegistration;
import com.google.shopping.merchant.accounts.v1.DeveloperRegistrationName;
import com.google.shopping.merchant.accounts.v1.DeveloperRegistrationServiceClient;
import com.google.shopping.merchant.accounts.v1.DeveloperRegistrationServiceSettings;
import com.google.shopping.merchant.accounts.v1.RegisterGcpRequest;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;

/**
 * This class demonstrates how to register the GCP project used to call the Merchant API with a
 * developer email.
 */
public class RegisterGcpSample {

  public static DeveloperRegistration registerGcp(Config config, String developerEmail) throws Exception {

    // Obtains OAuth token based on the user's configuration.
    GoogleCredentials credential = new Authenticator().authenticate();

    // Creates service settings using the credentials retrieved above.
    DeveloperRegistrationServiceSettings developerRegistrationServiceSettings =
        DeveloperRegistrationServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();

    // Creates DeveloperRegistration name to identify the DeveloperRegistration.
    // The name has the format: accounts/{account}/developerRegistration
    String name =
        DeveloperRegistrationName.newBuilder()
            .setAccount(config.getAccountId().toString())
            .build()
            .toString();

    // Calls the API and propagates any network failures/errors.
    try (DeveloperRegistrationServiceClient developerRegistrationServiceClient =
        DeveloperRegistrationServiceClient.create(developerRegistrationServiceSettings)) {

      // Creates a request to register the GCP project with the developer email.
      RegisterGcpRequest request =
          RegisterGcpRequest.newBuilder().setName(name).setDeveloperEmail(developerEmail).build();

      System.out.println("Sending RegisterGcp request:");
      DeveloperRegistration response = developerRegistrationServiceClient.registerGcp(request);

      System.out.println(response);
      return response;
    }
  }

  public static void main(String[] args) throws Exception {
    Config config = Config.load();
    String developerEmail = "YOUR_EMAIL_HERE"; // Replace with your email
    registerGcp(config, developerEmail);
  }
}

PHP

نمونه‌ها را بارگیری کنید و راهنمایی‌های نمونه‌های PHP میانای برنامه‌سازی کاربردی Google Merchant را برای راه‌اندازی کتابخانه‌های کارخواه php دنبال کنید.

require_once __DIR__ . '/../../../../vendor/autoload.php';
require_once __DIR__ . '/../../../Authentication/Authentication.php';
require_once __DIR__ . '/../../../Authentication/Config.php';

use Google\ApiCore\ApiException;
use Google\Shopping\Merchant\Accounts\V1\Client\DeveloperRegistrationServiceClient;
use Google\Shopping\Merchant\Accounts\V1\RegisterGcpRequest;

/**
 * This class demonstrates how to register the GCP project used to call the
 * Merchant API with a developer email.
 */
class RegisterGcpSample
{
    /**
     * A helper function to create the name string for the
     * DeveloperRegistration.
     *
     * @param string $accountId The merchant account ID.
     * @return string The name, which has the format:
     *     `accounts/{account}/developerRegistration`
     */
    private static function getName(string $accountId): string
    {
        return sprintf("accounts/%s/developerRegistration", $accountId);
    }

    /**
     * Registers the GCP project with a developer email.
     *
     * @param array $config The configuration data for authentication and account ID.
     * @param string $developerEmail The email of the developer to register.
     */
    public static function registerGcpSample(array $config, string $developerEmail): void
    {
        // Obtains OAuth credentials from the configuration file.
        $credentials = Authentication::useServiceAccountOrTokenFile();

        // Creates a configuration object for the client.
        $options = ['credentials' => $credentials];

        // Creates the DeveloperRegistrationServiceClient.
        $developerRegistrationServiceClient = new DeveloperRegistrationServiceClient($options);

        // Creates the name of the developer registration to identify it.
        $name = self::getName($config['accountId']);

        // Calls the API and handles any network failures.
        try {
            // Creates a request to register the GCP project with the developer email.
            $request = new RegisterGcpRequest([
                'name' => $name,
                'developer_email' => $developerEmail
            ]);

            printf("Sending RegisterGcp request:%s", PHP_EOL);
            // The `registerGcp` method returns a `DeveloperRegistration` object
            // upon success.
            $response = $developerRegistrationServiceClient->registerGcp($request);
            print "Successfully registered developer email '$developerEmail' for account {$config['accountId']}.\n";
            print_r($response);
        } catch (ApiException $e) {
            printf("An error occurred: %s%s", $e->getMessage(), PHP_EOL);
        }
    }

    /**
     * Helper to execute the sample.
     */
    public function callSample(): void
    {
        $config = Config::generateConfig();
        // An email address for a developer to register for the API.
        $developerEmail = 'YOUR_EMAIL_HERE'; // Replace with your email
        self::registerGcpSample($config, $developerEmail);
    }
}

// Executes the sample.
$sample = new RegisterGcpSample();
$sample->callSample();

cURL

curl -X POST "https://merchantapi.googleapis.com/accounts/v1/accounts/{ACCOUNT_ID}/developerRegistration:registerGcp" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer {ACCESS_TOKEN}" \
-d '{
  "developerEmail": "{DEVELOPER_EMAIL}"
}'

برای تکمیل ثبت‌نام، باید مطمئن شوید که حداقل یک کاربر در Merchant Center نقش API developer را دارد. برای دستیابی به این هدف، می‌توانید یکی از عملیات زیر را انجام دهید:

  • developerEmail را برای روش registerGcp ارائه کنید.
  • کاربر جدیدی را که نقش API developer دارد در واسط کاربر Merchant Center اضافه کنید.
  • نقش API developer را به کاربر موجود در واسط کاربر Merchant Center اختصاص دهید.
  • روش accounts.users.create را فراخوانی کنید تا کاربر جدیدی ایجاد شود و نقش API developer به آن اختصاص داده شود.
  • نقش API developer را بااستفاده از روش accounts.users.patch به کاربر موجود اختصاص دهید.

روال‌های مطلوب پس‌از ثبت‌نام

برای بهره‌مندی از مدیریت دسترسی قوی و جلوگیری از اختلالات آتی در سرویس، توصیه می‌کنیم پس‌از تکمیل ثبت‌نام اولیه، مجموعه‌ای از روال‌های مطلوب را دنبال کنید:

اجازه‌های بیشتری به API developer اعطا کنید

وقتی مخاطب توسعه‌دهنده‌ای را ثبت می‌کنید، نقش API developer به‌طور خودکار به او اختصاص داده می‌شود. این نقش شامل سایر اجازه‌های لازم برای مدیریت حساب Merchant Center یا انجام همه فراخوانی‌های میانای برنامه‌سازی کاربردی نیست. توصیه می‌کنیم نقش‌های ADMIN یا STANDARD را به توسعه‌دهندگان خود اضافه کنید تا دسترسی جامع را فراهم کنید.

برای اصلاح حقوق دسترسی کاربر، از روش accounts.users.patch استفاده کنید. حقوق دسترسی را در فیلد updateMask بدنه درخواست برای افزودن یا برداشتن نقش‌ها مشخص می‌کنید:

PATCH https://merchantapi.googleapis.com/accounts/v1/{ACCOUNT_ID}/users/{DEVELOPER_EMAIL}?update_mask=access_rights
Content-Type: application/json
Authorization: Bearer {ACCESS_TOKEN}"

{
  "name": "accounts/{ACCOUNT_ID}/users/{DEVELOPER_EMAIL}",
  "access_rights": [ "ADMIN", "API_DEVELOPER" ]
}

Python

from examples.authentication import configuration
from examples.authentication import generate_user_credentials
from google.protobuf import field_mask_pb2
from google.shopping.merchant_accounts_v1 import AccessRight
from google.shopping.merchant_accounts_v1 import UpdateUserRequest
from google.shopping.merchant_accounts_v1 import User
from google.shopping.merchant_accounts_v1 import UserServiceClient

FieldMask = field_mask_pb2.FieldMask

_ACCOUNT = configuration.Configuration().read_merchant_info()


def update_user(user_email, user_access_right):
  """Updates a user to make it an admin of the MC account."""

  credentials = generate_user_credentials.main()

  client = UserServiceClient(credentials=credentials)

  # Create user name string
  name = "accounts/" + _ACCOUNT + "/users/" + user_email

  user = User(name=name, access_rights=[user_access_right])

  field_mask = FieldMask(paths=["access_rights"])

  try:
    request = UpdateUserRequest(user=user, update_mask=field_mask)

    print("Sending Update User request")
    response = client.update_user(request=request)
    print("Updated User Name below")
    print(response.name)
  except RuntimeError as e:
    print(e)


if __name__ == "__main__":
  # Modify this email to update the right user
  email = "USER_MAIL_ACCOUNT"
  access_right = AccessRight.ADMIN
  update_user(email, access_right)

جاوا

import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.protobuf.FieldMask;
import com.google.shopping.merchant.accounts.v1.AccessRight;
import com.google.shopping.merchant.accounts.v1.UpdateUserRequest;
import com.google.shopping.merchant.accounts.v1.User;
import com.google.shopping.merchant.accounts.v1.UserName;
import com.google.shopping.merchant.accounts.v1.UserServiceClient;
import com.google.shopping.merchant.accounts.v1.UserServiceSettings;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;

/** This class demonstrates how to update a user to make it an admin of the MC account. */
public class UpdateUserSample {

  public static void updateUser(Config config, String email, AccessRight accessRight)
      throws Exception {

    GoogleCredentials credential = new Authenticator().authenticate();

    UserServiceSettings userServiceSettings =
        UserServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();

    // Creates user name to identify user.
    String name =
        UserName.newBuilder()
            .setAccount(config.getAccountId().toString())
            .setEmail(email)
            .build()
            .toString();

    // Create a user with the updated fields.
    User user = User.newBuilder().setName(name).addAccessRights(accessRight).build();

    FieldMask fieldMask = FieldMask.newBuilder().addPaths("access_rights").build();

    try (UserServiceClient userServiceClient = UserServiceClient.create(userServiceSettings)) {

      UpdateUserRequest request =
          UpdateUserRequest.newBuilder().setUser(user).setUpdateMask(fieldMask).build();

      System.out.println("Sending Update User request");
      User response = userServiceClient.updateUser(request);
      System.out.println("Updated User Name below");
      System.out.println(response.getName());
    } catch (Exception e) {
      System.out.println(e);
    }
  }

  public static void main(String[] args) throws Exception {
    Config config = Config.load();
    String email = "testUser@gmail.com";
    // Give the user admin rights. Note that all other rights, like
    // PERFORMANCE_REPORTING, would be overwritten in this example
    // if the user had those access rights before the update.
    AccessRight accessRight = AccessRight.ADMIN;

    updateUser(config, email, accessRight);
  }
}

PHP

use Google\ApiCore\ApiException;
use Google\Protobuf\FieldMask;
use Google\Shopping\Merchant\Accounts\V1\AccessRight;
use Google\Shopping\Merchant\Accounts\V1\UpdateUserRequest;
use Google\Shopping\Merchant\Accounts\V1\User;
use Google\Shopping\Merchant\Accounts\V1\Client\UserServiceClient;


/**
 * Updates a user.
 *
 * @param array $config The configuration data.
 * @param string $email The email address of the user.
 * @param int $accessRight The access right to grant the user.
 * @return void
 */
function updateUser($config, $email, $accessRights): void
{
    // Gets the OAuth credentials to make the request.
    $credentials = Authentication::useServiceAccountOrTokenFile();

    // Creates options config containing credentials for the client to use.
    $options = ['credentials' => $credentials];

    // Creates a client.
    $userServiceClient = new UserServiceClient($options);

    // Creates user name to identify user.
    $name = 'accounts/' . $config['accountId'] . "/users/" . $email;

    $user = (new User())
        ->setName($name)
        ->setAccessRights($accessRights);

    $fieldMask = (new FieldMask())->setPaths(['access_rights']);

    // Calls the API and catches and prints any network failures/errors.
    try {
        $request = new UpdateUserRequest([
            'user' => $user,
            'update_mask' => $fieldMask,
        ]);

        print "Sending Update User request\n";
        $response = $userServiceClient->updateUser($request);
        print "Updated User Name below\n";
        print $response->getName() . "\n";
    } catch (ApiException $e) {
        print $e->getMessage();
    }
}


$config = Config::generateConfig();
$email = "testUser@gmail.com";
$accessRights = [AccessRight::ADMIN];

updateUser($config, $email, $accessRights);

cURL

curl -X PATCH \
"https://merchantapi.googleapis.com/accounts/v1/{ACCOUNT_ID}/users/{USER_EMAIL}?update_mask=access_rights" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer {ACCESS_TOKEN}" \
-d '{
  "access_rights": [
    "ADMIN",
    "API_DEVELOPER"
  ]
}'

افزودن مخاطبین توسعه‌دهنده بیشتر

برای جلوگیری از اختلال در کسب‌وکار درصورت ترک یا ازدست دادن دسترسی مخاطب اصلی توسعه‌دهنده، داشتن مخاطبین اضافی ضروری است. توصیه می‌کنیم حداقل یک کاربر دیگر با نقش API developer در Merchant Center داشته باشید تا به‌عنوان پشتیبان عمل کند.

می‌توانید بااستفاده از سرویس accounts.users در Merchant API یا صفحه دسترسی و سرویس‌ها در میانای کاربری Merchant Center، کاربر اضافه کنید یا کاربر موجود را به‌روز کنید. با افزودن پیشگیرانه توسعه‌دهندگان پشتیبان، ادغام انعطاف‌پذیرتری ایجاد می‌کنید که به یک فرد وابسته نیست.

PATCH https://merchantapi.googleapis.com/products/v1/accounts/{ACCOUNT_ID}/users
Content-Type: application/json
Authorization: Bearer {ACCESS_TOKEN}"
{
  "user_id": {USER_EMAIL},
  "user": { "access_rights": [ "API_DEVELOPER", "ADMIN" ] }
}

Python

from examples.authentication import configuration
from examples.authentication import generate_user_credentials
from google.shopping.merchant_accounts_v1 import AccessRight
from google.shopping.merchant_accounts_v1 import CreateUserRequest
from google.shopping.merchant_accounts_v1 import User
from google.shopping.merchant_accounts_v1 import UserServiceClient

_ACCOUNT = configuration.Configuration().read_merchant_info()


def get_parent(account_id):
  return f"accounts/{account_id}"


def create_user(user_email):
  """Creates a user for a Merchant Center account."""

  # Get OAuth credentials
  credentials = generate_user_credentials.main()

  # Create a UserServiceClient
  client = UserServiceClient(credentials=credentials)

  # Create parent string
  parent = get_parent(_ACCOUNT)

  # Create the request
  request = CreateUserRequest(
      parent=parent,
      user_id=user_email,
      user=User(
          access_rights=[AccessRight.ADMIN, AccessRight.PERFORMANCE_REPORTING]
      ),
  )

  try:
    print("Sending Create User request")
    response = client.create_user(request=request)
    print("Inserted User Name below")
    print(response.name)
  except RuntimeError as e:
    print(e)


if __name__ == "__main__":
  # Modify this email to create a new user
  email = "USER_MAIL_ACCOUNT"
  create_user(email)

جاوا

import com.google.api.gax.core.FixedCredentialsProvider;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.shopping.merchant.accounts.v1.AccessRight;
import com.google.shopping.merchant.accounts.v1.CreateUserRequest;
import com.google.shopping.merchant.accounts.v1.User;
import com.google.shopping.merchant.accounts.v1.UserServiceClient;
import com.google.shopping.merchant.accounts.v1.UserServiceSettings;
import shopping.merchant.samples.utils.Authenticator;
import shopping.merchant.samples.utils.Config;

/** This class demonstrates how to create a user for a Merchant Center account. */
public class CreateUserSample {

  private static String getParent(String accountId) {
    return String.format("accounts/%s", accountId);
  }

  public static void createUser(Config config, String email) throws Exception {

    // Obtains OAuth token based on the user's configuration.
    GoogleCredentials credential = new Authenticator().authenticate();

    // Creates service settings using the credentials retrieved above.
    UserServiceSettings userServiceSettings =
        UserServiceSettings.newBuilder()
            .setCredentialsProvider(FixedCredentialsProvider.create(credential))
            .build();

    // Creates parent to identify where to insert the user.
    String parent = getParent(config.getAccountId().toString());

    // Calls the API and catches and prints any network failures/errors.
    try (UserServiceClient userServiceClient = UserServiceClient.create(userServiceSettings)) {

      CreateUserRequest request =
          CreateUserRequest.newBuilder()
              .setParent(parent)
              // This field is the email address of the user.
              .setUserId(email)
              .setUser(
                  User.newBuilder()
                      .addAccessRights(AccessRight.ADMIN)
                      .addAccessRights(AccessRight.PERFORMANCE_REPORTING)
                      .build())
              .build();

      System.out.println("Sending Create User request");
      User response = userServiceClient.createUser(request);
      System.out.println("Inserted User Name below");
      // The last part of the user name will be the email address of the user.
      // Format: `accounts/{account}/user/{user}`
      System.out.println(response.getName());
    } catch (Exception e) {
      System.out.println(e);
    }
  }

  public static void main(String[] args) throws Exception {
    Config config = Config.load();
    // The email address of this user.
    String email = "testUser@gmail.com";

    createUser(config, email);
  }
}

PHP

use Google\ApiCore\ApiException;
use Google\Shopping\Merchant\Accounts\V1\AccessRight;
use Google\Shopping\Merchant\Accounts\V1\CreateUserRequest;
use Google\Shopping\Merchant\Accounts\V1\User;
use Google\Shopping\Merchant\Accounts\V1\Client\UserServiceClient;


/**
 * Creates a user.
 *
 * @param array $config The configuration data.
 * @param string $email The email address of the user.
 * @return void
 */
function createUser($config, $email): void
{
    // Gets the OAuth credentials to make the request.
    $credentials = Authentication::useServiceAccountOrTokenFile();

    // Creates options config containing credentials for the client to use.
    $options = ['credentials' => $credentials];

    // Creates a client.
    $userServiceClient = new UserServiceClient($options);

    // Creates parent to identify where to insert the user.
    $parent = sprintf("accounts/%s", $config['accountId']);

    // Calls the API and catches and prints any network failures/errors.
    try {
        $request = new CreateUserRequest([
            'parent' => $parent,
            'user_id' => $email,
            'user' => (new User())
                ->setAccessRights([AccessRight::ADMIN,AccessRight::PERFORMANCE_REPORTING])
        ]);

        print "Sending Create User request\n";
        $response = $userServiceClient->createUser($request);
        print "Inserted User Name below\n";
        print $response->getName() . "\n";
    } catch (ApiException $e) {
        print $e->getMessage();
    }
}

$config = Config::generateConfig();
$email = "testUser@gmail.com";

createUser($config, $email);

cURL

curl -X PATCH \
"https://merchantapi.googleapis.com/products/v1/accounts/{ACCOUNT_ID}/users/{USER_EMAIL}?update_mask=access_rights" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer {ACCESS_TOKEN}" \
-d '{
  "access_rights": [
    "ADMIN",
    "API_DEVELOPER"
  ]
}'