我正在尝试在我的 flutter 应用程序中实现 IAP 的服务器端验证。我正在使用该包
https://pub.dev/packages/in_app_purchase
版本:^0.3.4+8
我很困惑如何获取数据来验证我对 Android 和 IOS 的购买。在 documentation他们说
"or verify the data using your own server with serverVerificationData."
这个字符串似乎返回某种编码字符串。然后如何从该字符串中提取所需的数据?我尝试了base64Decode(),因为localVerificationData是base64Encoded,但这不起作用。
Android 需要包名称、购买 ID 和购买 token 。而ios需要一个对象receipt-data。我对如何从 serverVerificationData 字符串获取该数据感到困惑。
我目前正在首先实现 android。
localVerificationData 文档说
The data used for local verification.
If the source is IAPSource.AppStore, this data is a based64 encoded string. The structure of the payload is defined using ASN.1. If the source is IAPSource.GooglePlay, this data is a JSON String.
因此 serverVerificationData 必须与 localVerificationData 不同,因为它看起来根本不像 JSON。我也不确定在这里发布 serverVerificationData 是否安全,因为它可能包含敏感信息。
这是一个类似于我在 Android 上得到的字符串,只是我更改了所有字母、数字等。所以这只是格式的问题
zdfdzcdshxvbxmgbafdxvdzt.JK-GR58OHRPOGFEFHEGVEACBEIFDAPDH_EFHEWFEHFHPEGVERBWBASZWDAWODPAWD-HDSWCGOEWFP-EFPEQFHPEDHEWYIFEWFUWEFDASCNAQWFDefphFEQUIWEFpofgewpfFEWHFPWEF
在存储库中,他们显示他们调用 _verifyPurchase(purchase);示例中没有实现。
他们说你应该始终验证
这是我当前的代码
Future<dynamic> verifyAndroid(PurchaseDetails details) async {
DatabaseService databaseService = Get.find<DatabaseService>();
String verificationData = details.verificationData.serverVerificationData;
// zdfdzcdshxvbxmgbafdxvdzt.JK-GR58OHRPOGFEFHEGVEACBEIFDAPDH_EFHEWFEHFHPEGVERBWBASZWDAWODPAWD-HDSWCGOEWFP-EFPEQFHPEDHEWYIFEWFUWEFDASCNAQWFDefphFEQUIWEFpofgewpfFEWHFPWEF
String packageName = ''; //get from verificationData
String productId = ''; //get from verificationData
String purchaseToken = ''; //get from verificationData
final response = await databaseService.verifyInAppPurchaseAndroid(packageName, productId, purchaseToken);
return response;
}
最佳答案
事实证明,数据位于detail.verificationData.localVerificationData中,而不是detail.verificationData.serverVerificationData中,并且detail.verificationData.serverVerificationData是Android上的购买 token 。
关于ios - in_app_purchase 如何从 serverVerificationData 获取 android 验证所需的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63954948/