flutter in_app_purchase中如何通过applicationusername查询服务端订单
在Flutter的in_app_purchase插件中,如何通过applicationUserName参数查询服务端订单?我在客户端支付时传入了applicationUserName,但在服务端验证订单时找不到这个字段。苹果的收据和谷歌的Purchase对象里似乎都没有直接包含这个信息。请问正确的做法是什么?是否需要通过其他方式将客户端参数传递到服务端?
2 回复
在Flutter的in_app_purchase中,可通过queryPastPurchases()获取历史购买记录,然后使用applicationUsername与服务端订单进行匹配验证。建议在购买时将此参数设为唯一用户标识,便于后续查询。
更多关于flutter in_app_purchase中如何通过applicationusername查询服务端订单的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter的in_app_purchase插件中,可以通过applicationUsername参数来关联和查询服务端订单。以下是具体实现方法:
1. 设置applicationUsername
在发起购买时设置applicationUsername:
final PurchaseParam purchaseParam = PurchaseParam(
productDetails: productDetails,
applicationUserName: 'your_user_id_123', // 用户唯一标识
);
// 发起购买
await InAppPurchase.instance.buyConsumable(
purchaseParam: purchaseParam,
);
2. 验证购买时获取applicationUsername
在验证购买收据时,可以从购买详情中获取:
// 监听购买流
final Stream purchaseUpdated = InAppPurchase.instance.purchaseStream;
purchaseUpdated.listen((List<PurchaseDetails> purchaseDetailsList) {
for (PurchaseDetails purchaseDetails in purchaseDetailsList) {
if (purchaseDetails.status == PurchaseStatus.purchased) {
// 获取applicationUsername
String? applicationUsername = purchaseDetails.applicationUsername;
String transactionId = purchaseDetails.purchaseID ?? '';
// 发送到服务端验证
await verifyPurchaseWithServer(
purchaseDetails,
applicationUsername,
);
}
}
});
3. 服务端查询实现
服务端可以根据applicationUsername查询订单:
// 服务端验证函数示例
Future<bool> verifyPurchaseWithServer(
PurchaseDetails purchaseDetails,
String? applicationUsername,
) async {
try {
final response = await http.post(
Uri.parse('https://your-server.com/verify-purchase'),
headers: {'Content-Type': 'application/json'},
body: jsonEncode({
'receipt': purchaseDetails.verificationData.localVerificationData,
'applicationUsername': applicationUsername,
'transactionId': purchaseDetails.purchaseID,
'productId': purchaseDetails.productID,
}),
);
if (response.statusCode == 200) {
final result = jsonDecode(response.body);
return result['isValid'] == true;
}
return false;
} catch (e) {
return false;
}
}
4. 服务端订单查询API
服务端可以设计这样的查询接口:
// Node.js示例
app.get('/orders/:applicationUsername', async (req, res) => {
const { applicationUsername } = req.params;
const orders = await Order.find({
applicationUsername: applicationUsername
});
res.json(orders);
});
关键点说明
applicationUsername应该是用户的唯一标识符- 建议使用用户ID、UUID或其他不会重复的标识
- 确保在购买流程中保持一致性
- 服务端验证时同时校验收据数据和applicationUsername
这样就能通过applicationUsername准确关联和查询服务端订单了。

