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

NestJS实现Google IAP时,如何解码Google RTDN的Base64数据?是否有对应API?

解决方案:Google Play 官方工具与 API 处理 IAP 订阅数据解码
  • 使用 Google Play Developer API 订阅验证端点
    谷歌提供了专门的 Play Developer API 用于处理 IAP 订阅验证,可直接解析实时开发者通知中的相关数据(无需手动处理 base64 解码)。你可以在 NestJS 中通过 HTTP 客户端(如 @nestjs/axios)调用该 API,传入通知中的 packageName、subscriptionId 和 purchaseToken,就能获取结构化的订阅详情。

  • 集成官方 Node.js 客户端库(推荐)
    谷歌针对 Node.js 提供了 googleapis 官方包,内置了自动处理 base64 解码和订阅数据解析的逻辑,同时包含签名验证环节,安全性更高。在 NestJS 服务中集成该库的示例代码如下:

    import { Injectable } from '@nestjs/common';
    import { google } from 'googleapis';
    
    @Injectable()
    export class GoogleIapService {
      private androidpublisher: any;
    
      constructor() {
        // 用服务账号密钥初始化客户端
        const auth = new google.auth.GoogleAuth({
          keyFile: '你的服务账号密钥文件路径.json',
          scopes: ['https://www.googleapis.com/auth/androidpublisher'],
        });
        this.androidpublisher = google.androidpublisher({
          version: 'v3',
          auth,
        });
      }
    
      async getSubscriptionDetails(packageName: string, subscriptionId: string, purchaseToken: string) {
        // 调用API自动解析订阅数据,无需手动解码base64
        const result = await this.androidpublisher.purchases.subscriptions.get({
          packageName,
          subscriptionId,
          token: purchaseToken,
        });
        return result.data;
      }
    }
    
  • 手动解码(不推荐)
    若临时需要手动处理,需注意谷歌实时通知中的 base64 是 URL 安全格式(替换了 + 和 /),需先还原为标准 base64,再用 Node.js 的 Buffer.from(encodedStr.replace(/-/g, '+').replace(/_/g, '/'), 'base64').toString('utf-8') 解码并转为 JSON 对象。但这种方式跳过了谷歌的签名验证,存在安全风险,不建议在生产环境使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 22:05:29