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

ClassyTaxiServer订阅接口500报错Cannot read property 'get' of undefined

ClassyTaxi订阅支付流程500错误排查

问题背景

  • 项目包含ClassyTaxiAppKotlin安卓客户端、ClassyTaxiServer服务端两部分,服务端部署在Firebase Cloud Functions
  • 已按教程完成全流程配置,service-account.json已正确放置
  • 安卓端可正常发起订阅购买、向Cloud Functions发送请求,但无法收到购买确认返回,无法为用户开通对应订阅权限
  • 预期流程:Play Store完成支付后将确认信息同步至ClassyTaxiServer,服务端校验通过后返回注册/确认结果,客户端为用户开通权限
  • 实际表现:支付完成后Firebase Functions可正常打印instanceId_register_v2、realtime_notification_listener、subscription_register_v2的运行日志,但subscription_register_v2接口返回500错误,流程中断

核心报错信息

报错对应代码段

private async querySubscriptionPurchaseWithTriggerV2(packageName: string, product: string, purchaseToken: string, triggerNotificationType?: NotificationType): Promise<SubscriptionPurchaseV2> {
  // STEP 1. Query Play Developer API to verify the purchase token
  const apiResponseV2 = await new Promise((resolve, reject) => {
    this.playDeveloperApiClient.purchases.subscriptionsv2.get({ // <<=== Server error: Cannot read property 'get' of undefined
      packageName: packageName,
      token: purchaseToken
    }, (err, result) => {
      if (err) {
        reject(this.convertPlayAPIErrorToLibraryError(err));
      } else {
        resolve(result.data);
      }
    })
  });

Firebase Functions运行日志

6:55:28.798 PM instanceId_register_v2 Function execution started
6:55:31.025 PM instanceId_register_v2 Instance id is ddR1Hi...NOO2Z
6:55:31.122 PM instanceId_register_v2 Instance Id specified and verified
6:55:31.122 PM instanceId_register_v2 Instance verification passed
6:55:31.774 PM instanceId_register_v2 Function execution took 2976 ms, finished with status code: 200

6:55:53.623 PM realtime_notification_listener ========> purchase: null PACKAGE_NAME: com.example.subscriptions
6:55:53.624 PM realtime_notification_listener Function execution took 5 ms, finished with status: 'ok'

6:55:57.537 PM subscription_register_v2 Function execution started
6:55:59.817 PM subscription_register_v2 Server error: Cannot read property 'get' of undefined
6:55:59.825 PM subscription_register_v2 Function execution took 2289 ms, finished with status code: 500

Android Studio客户端日志

D/OkHttp: --> PUT https://us-central1-postosgnv.cloudfunctions.net/subscription_register_v2 http/1.1 (437-byte body)
D/OkHttp: <-- 500  https://us-central1-postosgnv.cloudfunctions.net/subscription_register_v2 (2661ms, 86-byte body)
E/RemoteServerFunction: Failed to call API (Error code: 500) - {"status":500,"error":"not-found","message":"Cannot read property 'get' of undefined"}

错误原因

核心报错Cannot read property 'get' of undefined说明this.playDeveloperApiClient.purchases.subscriptionsv2本身是undefined,90%以上概率由以下两个原因导致:

  • Google Play Developer API的Node.js SDK(googleapis包)版本不兼容:v100以前的版本未内置subscriptions v2接口,或者接口路径命名规则有调整
  • 接口路径拼写错误:新版SDK中v2订阅接口的路径为驼峰命名,全小写的subscriptionsv2路径不存在,访问时自然返回undefined

剩余小概率原因是客户端初始化时未正确传入认证参数,导致实例加载不完整,由于已经配置了service-account.json,这种情况可放在最后排查。

修复步骤

  1. 进入Firebase Functions的代码目录,升级googleapis依赖到最新稳定版:
    npm install googleapis@latest --save
    
  2. 修正代码中的接口路径拼写,将全小写的subscriptionsv2改为驼峰格式的subscriptionsV2:
    this.playDeveloperApiClient.purchases.subscriptionsV2.get({
      packageName: packageName,
      token: purchaseToken
    }, (err, result) => {
      // 原有回调逻辑保持不变
    })
    
  3. 若修改后仍报错,检查Play Developer API客户端初始化逻辑,确认正确传入认证信息、指定接口版本,参考初始化代码:
    import { google } from 'googleapis';
    const auth = new google.auth.GoogleAuth({
      keyFile: './service-account.json',
      scopes: ['https://www.googleapis.com/auth/androidpublisher']
    });
    this.playDeveloperApiClient = google.androidpublisher({
      version: 'v3',
      auth: auth
    });
    
  4. 确认Google Cloud Console中已为当前服务账号开启Google Play Android Developer API权限,同时在Play Console后台将该服务账号添加为具备订阅管理权限的用户。
  5. 重新部署Cloud Functions即可恢复正常流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 22:40:50