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

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

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

پیش‌نیازها

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

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

ثبت‌نام به‌عنوان توسعه‌دهنده با «میانای برنامه‌سازی کاربردی بازرگان»

برای استفاده از 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): اگر «سرویس مقایسه قیمت» هستید، باید از شناسه حساب «سرویس مقایسه قیمت» منحصربه‌فرد یا شناسه حساب گروه «سرویس مقایسه قیمت» خودتان استفاده کنید.
    • کارگزاری‌ها، توسعه‌دهندگان، و دیگر طرف‌های سوم: اگر کسب‌وکار طرف سومی هستید، مثلاً کارگزاری یا توسعه‌دهنده طرف سومی که چندین حساب فروشنده را مدیریت می‌کند و شناسه 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 Center موجود باشد، نقش API developer به او اعطا می‌شود. درغیراین‌صورت، کاربر جدیدی در Merchant Center ایجاد می‌شود و باید ظرف ۱۴ روز دعوت را بپذیرد تا منقضی نشود و مجبور نباشد فرایند ثبت‌نام را ازسر بگیرد. فقط پس‌از اینکه کاربر روی پیوند دعوت کلیک کرد، فرایند ثبت‌نام را تکمیل می‌کنید.

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

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

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

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

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

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

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

تماس ثبت‌نام

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

تماس ثبت‌نام را بااستفاده از روش 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 DeveloperRegistrationServiceClient
from google.shopping.merchant_accounts_v1 import RegisterGcpRequest


def register_gcp(account_id: str, developer_email: str) -> None:
  """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.
  """
  # 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)
  except RuntimeError as e:
    print(f"An error occurred: {e}")


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)

جاوا

برای راه‌اندازی کتابخانه‌های کارخواه جاوا، نمونه‌ها را بارگیری کنید و راهنمایی‌های نمونه‌های جاوا «میانای برنامه‌سازی کاربردی Google Merchant» را دنبال کنید.

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

نمونه‌ها را بارگیری کنید و راهنمایی‌های نمونه‌های Google Merchant API PHP را برای راه‌اندازی کتابخانه‌های کارخواه 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 اختصاص دهید.
  • برای ایجاد کاربر جدید و اختصاص نقش API developer به آن، روش accounts.users.create را فراخوانی کنید.
  • نقش 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"
  ]
}'