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
相关产品推荐
相关产品推荐

