ลงทะเบียนในฐานะนักพัฒนาซอฟต์แวร์

การลงทะเบียนเป็นนักพัฒนาแอปเป็นกระบวนการตั้งค่าแบบครั้งเดียวที่จำเป็น ซึ่งจะลิงก์โปรเจ็กต์ Google Cloud กับบัญชี Merchant Center และลงทะเบียนข้อมูลติดต่อของนักพัฒนาแอปกับ Google ซึ่งจะช่วยให้ Google ส่งประกาศบริการที่สำคัญและการอัปเดตที่จำเป็นไปยังผู้ติดต่อด้านเทคนิคที่เกี่ยวข้อง
ที่คุณระบุ

เอกสารนี้เป็นส่วนหนึ่งของชุดเอกสารหลายส่วนเกี่ยวกับการเริ่มต้นใช้งาน Merchant API หากลงทะเบียนกับ Merchant API แล้ว คุณ สามารถข้ามไปยังส่วนถัดไปได้ แทรกผลิตภัณฑ์แรก

ข้อกำหนดเบื้องต้น

ก่อนลงทะเบียนเพื่อใช้ Merchant API โปรดตรวจสอบว่าคุณมีคุณสมบัติตรงตามข้อกำหนดต่อไปนี้

  • บัญชี 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 กับบัญชี Merchant Center ผ่านเมธอด registerGcp

ไม่ว่าคุณจะทำงานกับบัญชีผู้ขายหลายบัญชีหรือไม่ก็ตาม คุณดำเนินการ การลงทะเบียน 1 ครั้งสำหรับแต่ละโปรเจ็กต์ 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.
Please 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 เดียวกันได้
  • กำหนดบัญชีที่ถูกต้องสำหรับบุคคลที่สาม (3P) ที่จัดการผู้ขายหลายราย: บุคคลที่สามที่เป็นตัวแทนหรือจัดการผู้ขายหลายรายต้องใช้โครงสร้างบัญชีที่เหมาะสมภายในระบบนิเวศของ Google รหัสที่ถูกต้องที่ควรใช้จะขึ้นอยู่กับประเภทธุรกิจของคุณ ดังนี้
    • ตลาดกลางที่มีบัญชีขั้นสูงอยู่แล้ว: หากธุรกิจของคุณ ดำเนินการในรูปแบบตลาดกลางและมีบัญชีขั้นสูง ที่แสดงถึงแพลตฟอร์มทั้งหมดอยู่แล้ว คุณควรใช้รหัสบัญชีที่มีอยู่
    • บริการช็อปปิ้งแบบเปรียบเทียบสินค้า (CSS): หากคุณเป็น CSS คุณควรใช้รหัสบัญชี CSS หรือรหัสบัญชีกลุ่ม CSS ที่ไม่ซ้ำกัน
    • เอเจนซี นักพัฒนาแอป และบุคคลที่สามอื่นๆ: หากคุณเป็นธุรกิจบุคคลที่สาม เช่น เอเจนซีหรือนักพัฒนาแอปบุคคลที่สามที่จัดการบัญชีผู้ขายหลายบัญชีและไม่มี รหัส Merchant Center เดียวที่แสดงถึงธุรกิจของคุณ คุณควร สร้างบัญชี Merchant Center หลักบัญชีใหม่และขอเปลี่ยนบัญชีดังกล่าว เป็นบัญชีขั้นสูง บัญชีขั้นสูงสามารถจัดการบัญชีย่อยและ จัดโครงสร้างที่จำเป็นสำหรับการดำเนินงานของบุคคลที่สาม
  • ลงทะเบียนเฉพาะ Merchant Center หลัก: คุณ ลงทะเบียนเป็นนักพัฒนาโดยใช้บัญชี Merchant Center หลักเท่านั้น และคุณจะกลายเป็นผู้ติดต่อสำหรับนักพัฒนาของบัญชี Merchant Center ย่อยที่ลิงก์ทั้งหมด อย่าลงทะเบียนสำหรับบัญชีย่อย Merchant Center แต่ละบัญชี

ข้อความแสดงแทนเพื่อการช่วยเหลือพิเศษ

แผนภาพก่อนหน้าแสดงการตั้งค่าการลงทะเบียนเมื่อใช้โปรเจ็กต์ Google Cloud หลายโปรเจ็กต์และ Merchant Center หลัก 1 รายการพร้อมบัญชีย่อย Merchant Center หลายบัญชี (ไม่บังคับ)

  • เมื่อลงทะเบียนอีเมลของนักพัฒนาแอปแล้ว ให้ทำดังนี้
    • คุณสามารถทำการเรียก API ของผู้ขายได้ภายใน 5 นาทีหลังจากลงทะเบียน
    • หากอีเมลเป็นของผู้ใช้ Merchant Center ที่มีอยู่ ผู้ใช้จะได้รับบทบาท API_DEVELOPER ไม่เช่นนั้น ระบบจะสร้างผู้ใช้ใหม่ใน Merchant Center และผู้ใช้จะต้องยอมรับคำเชิญภายใน 14 วันเพื่อ ป้องกันไม่ให้คำเชิญหมดอายุและไม่ต้องเริ่มกระบวนการลงทะเบียนใหม่ คุณจะทำกระบวนการลงทะเบียนให้เสร็จสมบูรณ์ได้ก็ต่อเมื่อผู้ใช้คลิกลิงก์คำเชิญแล้วเท่านั้น

โทรเพื่อลงทะเบียน

คุณลงทะเบียนโดยเรียกใช้เมธอด registerGcp คุณมีตัวเลือก 2 อย่างในการโทรเพื่อลงทะเบียน ได้แก่

  • ตัวเลือกที่ 1: การเรียก API โดยตรง คุณส่งคำขอแบบดิบไปยังปลายทาง API โดยตรง ซึ่งโดยปกติจะผ่าน HTTP(S) คุณต้องจัดการด้วยตนเองในด้านต่างๆ เช่น การสร้าง เนื้อหาคำขอ การตั้งค่าส่วนหัว (รวมถึงการตรวจสอบสิทธิ์) และการแยกวิเคราะห์ การตอบกลับ
  • ตัวเลือกที่ 2: ไลบรารีของไคลเอ็นต์ คุณใช้ไลบรารีที่สร้างไว้ล่วงหน้าซึ่งมีวิธีที่สะดวกกว่าและเป็นไปตามภาษาในการโต้ตอบกับ Merchant API โดยจะจัดการการตรวจสอบสิทธิ์และการให้สิทธิ์ รวมถึงมีวิธีที่สะดวกในการ แยกการสื่อสารผ่าน HTTP ที่อยู่เบื้องหลังออก เรามีโค้ด ตัวอย่างอย่างเป็นทางการที่จะช่วยให้คุณเริ่มต้นใช้งานได้อย่างรวดเร็ว

การให้สิทธิ์สำหรับการเรียกการลงทะเบียน

ตามที่อธิบายไว้ในขั้นตอนให้สิทธิ์คำขอไปยัง Merchant API คุณมีสถานการณ์การตรวจสอบสิทธิ์ที่แตกต่างกัน 2 แบบ ดังนี้

  • 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: โทเค็นการให้สิทธิ์เพื่อทำการเรียก API
  • 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)

Java

ดาวน์โหลดตัวอย่างและทำตามคำแนะนำจากตัวอย่าง 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 void 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 catches and prints 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);
    } catch (Exception e) {
      System.out.println(e);
    }
  }

  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 API เพื่อตั้งค่าไลบรารีของไคลเอ็นต์ 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}"
}'

แนวทางปฏิบัติแนะนำหลังการลงทะเบียน

เราขอแนะนำให้คุณทำตามชุดแนวทางปฏิบัติแนะนำหลังจากลงทะเบียนครั้งแรกเสร็จสมบูรณ์แล้ว เพื่อรับประโยชน์จากการจัดการการเข้าถึงที่มีประสิทธิภาพและป้องกันไม่ให้เกิดการหยุดชะงักของบริการในอนาคต

ให้สิทธิ์เพิ่มเติมแก่นักพัฒนา API

เมื่อลงทะเบียนผู้ติดต่อสำหรับนักพัฒนาแอป ระบบจะกำหนดบทบาท API_DEVELOPER ให้โดยอัตโนมัติ บทบาทนี้ไม่รวมสิทธิ์อื่นๆ ที่จำเป็นสำหรับ การจัดการบัญชี Merchant Center หรือการเรียก API ทั้งหมด เราขอแนะนำให้เพิ่มบทบาท 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)

Java

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"
  ]
}'

เพิ่มผู้ติดต่อของนักพัฒนาแอป

การมีรายชื่อติดต่อสำรองเป็นสิ่งสำคัญอย่างยิ่งเพื่อหลีกเลี่ยงการหยุดชะงักของธุรกิจในกรณีที่ผู้ติดต่อหลักของนักพัฒนาแอปลาออกหรือสูญเสียสิทธิ์เข้าถึง เราขอแนะนำให้มีผู้ใช้เพิ่มเติมอย่างน้อย 1 คนที่มีบทบาทAPI_DEVELOPERใน Merchant Center เพื่อทำหน้าที่เป็นข้อมูลสำรอง

คุณเพิ่มผู้ใช้หรืออัปเดตผู้ใช้ที่มีอยู่ได้ด้วยบริการ accounts.users ใน Merchant API หรือหน้าการเข้าถึงและ บริการใน UI ของ 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)

Java

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"
  ]
}'