in_app_purchase 如何从 serverVerificationData 获取 android 验证所需的数据

in_app_purchase how do I get the data needed for android verification from the serverVerificationData

我正在尝试在我的 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."

这个字符串似乎 return 某种编码字符串。然后如何从该字符串中提取所需的数据?我尝试了 base64Decode() 因为 localVerificationData 是 base64Encoded 但这没有用。

Android需要包名、购买id和purchaseToken。 Ios 需要一个对象收据数据。我对如何从 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。我也不确定 post 此处的 serverVerificationData 是否安全,因为它可能包含敏感信息。

这是一个类似于我在android上得到的字符串,只是我改变了所有的字母、数字等。所以它只是关于格式

zdfdzcdshxvbxmgbafdxvdzt.JK-GR58OHRPOGFEFHEGVEACBEIFDAPDH_EFHEWFEHFHPEGVERBWBASZWDAWODPAWD-HDSWCGOEWFP-EFPEQFHPEDHEWYIFEWFUWEFDASCNAQWFDefphFEQUIWEFpofgewpfFEWHFPWEF

在回购协议中,他们表明他们调用了 _verifyPurchase(purchase);在示例中没有实现。

https://github.com/flutter/plugins/tree/master/packages/in_app_purchase#listening-to-purchase-updates

https://github.com/flutter/plugins/blob/5a183ac54a515be096d01f3a35546c5d89a30dca/packages/in_app_purchase/example/lib/main.dart#L350

而且他们说您应该始终验证

https://github.com/flutter/plugins/blob/5a183ac54a515be096d01f3a35546c5d89a30dca/packages/in_app_purchase/example/lib/main.dart#L328

这是我当前的代码

 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上的购买令牌。