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

使用Node.js调用Google Play内购API遇OAuth2认证401错误求助

问题诊断与解决方案

核心错误

你把id_token放在请求头的Authorization字段里了,但调用Android Publisher API需要的是OAuth 2.0的access token——id_token仅用于身份验证场景(如用户登录),不具备API调用的授权权限,这就是触发401错误的直接原因。

正确操作步骤

  1. 绑定服务账号到Google Play开发者账号

    • 登录Google Play控制台,进入目标应用 → 设置 → 开发者账号权限
    • 点击添加用户,输入服务账号的邮箱地址,分配查看应用内购买和订阅或财务权限(按需选择)
  2. 获取正确的access token
    推荐用Google官方的google-auth-library包处理,避免手动调用token接口的失误:

    const { GoogleAuth } = require('google-auth-library');
    
    async function getAccessToken() {
      const auth = new GoogleAuth({
        keyFile: 'path/to/your/service-account-key.json', // 服务账号的密钥JSON文件路径
        scopes: ['https://www.googleapis.com/auth/androidpublisher'] // Android Publisher API的权限范围
      });
      const client = await auth.getClient();
      const accessToken = await client.getAccessToken();
      return accessToken.token;
    }
    
  3. 调用API时使用access token
    请求头替换为:

    Authorization: Bearer ${accessToken}
    

    调用purchases.products/get接口的示例:

    const axios = require('axios');
    
    async function checkPurchaseStatus() {
      const accessToken = await getAccessToken();
      const response = await axios.get('https://androidpublisher.googleapis.com/androidpublisher/v3/applications/{packageName}/purchases/products/{productId}/tokens/{token}', {
        headers: {
          'Authorization': `Bearer ${accessToken}`
        }
      });
      console.log(response.data);
    }
    
    checkPurchaseStatus();
    

额外注意事项

  • 确保服务账号的密钥文件是创建账号时下载的完整JSON文件
  • 权限范围必须包含https://www.googleapis.com/auth/androidpublisher,否则会触发权限不足错误
  • 若手动调用token接口,需确保请求参数的scope为上述API权限范围,而非openid等id_token相关范围

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 07:52:41