in_app_purchase如何从serverVerificationData

问题描述

我正在尝试在Flutter应用中为IAP实施服务器端验证。我正在使用包裹

https://pub.dev/packages/in_app_purchase

版本:^ 0.3.4 + 8

我很困惑如何获取数据以验证我购买的android和IOS。他们在documentation中说

”或使用您自己的服务器验证数据 serverVerificationData。”

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

Android需要包名称,购买ID和Purchasetoken。 Ios需要一个对象收据数据。我对如何从serverVerificationData字符串获取数据感到困惑。

我目前正在首先实现android。

localVerificationData文档说

用于本地验证的数据。

如果源是IAPSource.AppStore,则此数据是基于base64编码的 串。有效载荷的结构是使用ASN.1定义的。如果 源是IAPSource.GooglePlay,此数据是JSON字符串。

因此,serverVerificationData必须与localVerificationData不同,因为它根本看起来不像JSON。我也不确定在这里发布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上的购买令牌。