You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Cloud Run调用无完整客户端库的认证GCP Partner Procurement API?

在Cloud Run中调用Partner Commerce Procurement API的解决方案

你遇到的核心问题是现有@google-cloud/procurement客户端库属于Consumer侧的Procurement API(主机cloudcommerceconsumerprocurement.googleapis.com),而你需要调用的是Partner侧的Commerce Procurement API(主机cloudcommerceprocurement.googleapis.com),两者不兼容。以下是两种可行的实现方案,均支持自动读取GCP环境认证信息:

方案一:直接调用REST API + 自动认证

这是最简洁的方式,利用google-auth-library自动获取Cloud Run服务账号的访问令牌,直接发送HTTP请求到目标API端点。

步骤:

  1. 配置服务账号权限
    给Cloud Run使用的服务账号授予Partner Procurement API的对应权限,例如:

    • roles/commerceprocurement.partnerEntitlementManager(管理权益的常用角色)
    • 确保服务账号的OAuth范围包含https://www.googleapis.com/auth/cloud-platform(Cloud Run默认服务账号已满足)
  2. 代码实现
    安装依赖:

    npm install google-auth-library axios
    

    调用API的示例代码(以查询权益列表为例):

    const { GoogleAuth } = require('google-auth-library');
    const axios = require('axios');
    
    async function listEntitlements(providerId) {
      // 自动获取Cloud Run环境中的认证信息
      const auth = new GoogleAuth({
        scopes: ['https://www.googleapis.com/auth/cloud-platform'],
      });
      const client = await auth.getClient();
      const accessToken = await client.getAccessToken();
    
      // 调用Partner Procurement API的REST端点
      const apiUrl = `https://cloudcommerceprocurement.googleapis.com/v1/providers/${providerId}/entitlements`;
      const response = await axios.get(apiUrl, {
        headers: {
          'Authorization': `Bearer ${accessToken.token}`,
        },
      });
    
      return response.data;
    }
    
    // 替换为你的提供商ID
    listEntitlements('your-provider-id').then(console.log).catch(console.error);
    

方案二:使用google-gax构建自定义客户端

如果偏好类官方客户端库的调用方式,可以用google-gax(Google API底层库)手动构建Partner侧API的客户端,同样支持自动认证。

步骤:

  1. 安装依赖

    npm install google-gax google-auth-library
    
  2. 代码实现
    构建客户端并调用API的示例:

    const { GoogleAuth } = require('google-auth-library');
    const { RestClient } = require('google-gax');
    
    async function createProcurementClient() {
      const auth = new GoogleAuth({
        scopes: ['https://www.googleapis.com/auth/cloud-platform'],
      });
      const authClient = await auth.getClient();
    
      // 初始化Partner Procurement API的REST客户端
      return new RestClient({
        auth: authClient,
        servicePath: 'cloudcommerceprocurement.googleapis.com',
        port: 443,
      });
    }
    
    // 查询权益列表
    async function listEntitlements(providerId) {
      const client = await createProcurementClient();
      const [response] = await client.request({
        method: 'GET',
        path: `/v1/providers/${providerId}/entitlements`,
      });
      return response;
    }
    
    // 替换为你的提供商ID
    listEntitlements('your-provider-id').then(console.log).catch(console.error);
    

关键注意事项

  • 所有操作的REST端点需参考Partner Procurement API文档(比如创建权益用POST /v1/providers/{providerId}/entitlements,并传递请求体)
  • Cloud Run环境中,google-auth-library会自动读取服务账号的元数据服务器获取令牌,无需手动配置密钥文件
  • 确保服务账号的IAM权限与你要执行的API操作匹配(例如创建权益需要创建权限,查询需要读取权限)

内容的提问来源于stack exchange,提问作者Wazbat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 08:03:47