我使用nestjs开发ios端app的后端.现在有一个订阅功能.
我查到的资料是, 支付前业务服务端需要调苹果的接口, 验证客户端传过来的票据.如果票据验证通过则客户端支付, 并且在数据库添加交易记录.支付后苹果支付中心会调用业务服务端的接口, 在这个接口里, 可以更新交易记录的状态, 并且更新用户的会员权限.
我不确定这个逻辑是否正确.
有没有那个大佬可以详细说说.
我使用了@apple/app-store-server-library这包, 但是这个包似乎只有回调相关的逻辑
我使用nestjs开发ios端app的后端.现在有一个订阅功能.
我查到的资料是, 支付前业务服务端需要调苹果的接口, 验证客户端传过来的票据.如果票据验证通过则客户端支付, 并且在数据库添加交易记录.支付后苹果支付中心会调用业务服务端的接口, 在这个接口里, 可以更新交易记录的状态, 并且更新用户的会员权限.
我不确定这个逻辑是否正确.
有没有那个大佬可以详细说说.
我使用了@apple/app-store-server-library这包, 但是这个包似乎只有回调相关的逻辑
你的逻辑基本正确,但让我们详细解释一下如何在NestJS中实现iOS应用的订阅功能,并包括一些关键步骤和注意事项。
客户端请求订阅:
验证收据:
@apple/app-store-server-library
包或其他方式验证收据的有效性。处理订阅回调:
@apple/app-store-server-library
包解析这些通知,并更新数据库中相应的订阅记录和用户权限。安装@apple/app-store-server-library
:
npm install @apple/app-store-server-library
验证收据的API:
在你的NestJS控制器中创建一个API端点来接收和验证收据。
import { Controller, Post, Body } from '@nestjs/common';
import { verifyReceipt } from '@apple/app-store-server-library';
import * as fs from 'fs';
import * as path from 'path';
@Controller('subscriptions')
export class SubscriptionController {
@Post('verify-receipt')
async verifyReceipt(@Body() body: { receipt_data: string }) {
const service = new verifyReceipt.Service({
url: 'https://buy.itunes.apple.com/verifyReceipt',
password: 'YOUR_SHARED_SECRET', // 从Apple开发者账户获取
});
try {
const receiptData = Buffer.from(body.receipt_data, 'base64');
const receipt = JSON.parse(receiptData.toString('utf8'));
const result = await service.verify(receipt);
// 在数据库中记录订阅信息
// ...
return { success: true, result };
} catch (error) {
return { success: false, error: error.message };
}
}
}
处理Apple的Webhook回调:
创建一个API端点来接收Apple的Webhook通知。
@Post('apple-webhook')
async handleAppleWebhook(@Body() rawBody: any) {
try {
const parsedBody = JSON.parse(rawBody.toString());
// 使用@apple/app-store-server-library解析通知
const notification = verifyReceipt.Notification.fromRawBody(parsedBody);
// 根据notification的类型(如RENEWAL, CANCEL, INTERRUPTION等)更新数据库中的订阅记录和用户权限
// ...
return { success: true };
} catch (error) {
// 处理错误
return { success: false, error: error.message };
}
}
配置Webhook URL:
通过上述步骤,你应该能够在NestJS中实现iOS应用的订阅功能。
4 回答4.7k 阅读
2 回答2k 阅读✓ 已解决
1 回答1.5k 阅读✓ 已解决
2 回答1.6k 阅读
1 回答1.5k 阅读
1 回答974 阅读
842 阅读
安装依赖项 ↓
简单的实现代码(注释为文件名):