setupCheckOrder static method

dynamic setupCheckOrder({
  1. required Future<bool> callBack(
    1. String protocol,
    2. String applePayId,
    3. String customerId
    ),
})

Implementation

static setupCheckOrder({required Future<bool> Function(String protocol, String applePayId, String customerId) callBack}) async {
  _YKStoreKitMainController mainController = _YKStoreKitMainController(callBack);

  //禁止重复操作
  if (YKStoreKit._getInstance()._mainController != null) {
    YKStoreKit._getInstance()._mainController = mainController;
  }

  final cacheModels = await YKStoreKit._getInstance()._getModels();

  for (final model in cacheModels) {
    String orderId = model.orderId;
    String customerId = model.customId;
    String verificationData = model.currentDetail.verificationData.serverVerificationData;

    final isFinish = await mainController.checkOrderCallBack(verificationData, orderId, customerId);
    if (isFinish) {
      YKStoreKit._getInstance()._deleteCache(orderId);
      YKStoreKit._getInstance()._log("支付完成:OrderId:$orderId, CustomerId:$customerId");
    } else {
      YKStoreKit._getInstance()._error("支付未完成:OrderId:$orderId, CustomerId:$customerId");
    }
  }

  //设置支付内容
  final available = await InAppPurchase.instance.isAvailable();
  if (!available) {}
  YKStoreKit._getInstance().streamSubscription = InAppPurchase.instance.purchaseStream.listen((event) async {
    for (final purchaseDetails in event) {
      if (purchaseDetails.status == PurchaseStatus.pending) {
        // 购买凭证创建中
        String orderId = purchaseDetails.productID;
        YKStoreKit._getInstance()._log("正在支付中:$orderId");
      } else {
        if (purchaseDetails.status == PurchaseStatus.error) {
          // 购买失败
          YKStoreKit._getInstance()._log(purchaseDetails.error?.message ?? "");
          YKStoreKit._getInstance()._currentComplete?.complete(false);
          YKStoreKit._getInstance()._currentModel = null;
        } else if (purchaseDetails.status == PurchaseStatus.canceled) {
          //取消
          YKStoreKit._getInstance()._log("支付已取消 ${purchaseDetails.productID}");
          YKStoreKit._getInstance()._currentComplete?.complete(false);
          YKStoreKit._getInstance()._currentModel = null;
        } else if (purchaseDetails.status == PurchaseStatus.purchased) {
          try {
            if (YKStoreKit._getInstance()._currentModel != null) {
              YKStoreKit._getInstance()._currentModel!.currentDetail = purchaseDetails;
              await YKStoreKit._getInstance()._saveCache(YKStoreKit._getInstance()._currentModel!);

              String orderId = purchaseDetails.productID;
              String customerId = YKStoreKit._getInstance()._currentModel!.customId;
              String vantData = purchaseDetails.verificationData.serverVerificationData;

              await YKStoreKit._getInstance()._disloading();
              final isFinish = await mainController.checkOrderCallBack(vantData, orderId, customerId);
              if (isFinish) {
                YKStoreKit._getInstance()._deleteCache(orderId);
                YKStoreKit._getInstance()._log("支付完成:OrderId:$orderId, CustomerId:$customerId");
              } else {
                YKStoreKit._getInstance()._error("支付未完成:OrderId:$orderId, CustomerId:$customerId");
              }
              YKStoreKit._getInstance()._currentComplete?.complete(isFinish);
            } else {
              YKStoreKit._getInstance()._currentModel =
                  _YKStoreKitCurrentModel(orderId: purchaseDetails.productID, customId: purchaseDetails.transactionDate ?? "");

              String orderId = purchaseDetails.productID;
              String customerId = YKStoreKit._getInstance()._currentModel!.customId;
              String vantData = purchaseDetails.verificationData.serverVerificationData;

              final isFinish = await mainController.checkOrderCallBack(vantData, orderId, customerId);
              if (isFinish) {
                YKStoreKit._getInstance()._deleteCache(orderId);
                YKStoreKit._getInstance()._log("支付完成:OrderId:$orderId, CustomerId:$customerId");
              } else {
                YKStoreKit._getInstance()._error("支付未完成:OrderId:$orderId, CustomerId:$customerId");
              }
              YKStoreKit._getInstance()._currentComplete?.complete(isFinish);
            }
          } catch (e) {
            YKStoreKit._getInstance()._currentComplete?.complete(false);
            YKStoreKit._getInstance()._disloading();
            YKStoreKit._getInstance()._error(e.toString());
          } finally {
            YKStoreKit._getInstance()._currentModel = null;
            YKStoreKit._getInstance()._log("已完成: ${purchaseDetails.productID}");
          }
        } else if (purchaseDetails.status == PurchaseStatus.restored) {
          /// 订阅
          try {
            _YKStoreKitCurrentModel? useModel = YKStoreKit._getInstance()._currentModel;
            if (useModel == null) {
              final models = await YKStoreKit._getInstance()._getModels();
              final matched = models.firstWhere(
                (m) => m.orderId == purchaseDetails.productID,
                orElse: () => _YKStoreKitCurrentModel(orderId: purchaseDetails.productID, customId: purchaseDetails.transactionDate ?? ""),
              );
              useModel = matched;
            }

            useModel!.currentDetail = purchaseDetails;
            await YKStoreKit._getInstance()._saveCache(useModel!);

            String orderId = purchaseDetails.productID;
            String customerId = useModel.customId;
            String vantData = purchaseDetails.verificationData.serverVerificationData;

            final isFinish = await mainController.checkOrderCallBack(vantData, orderId, customerId);
            if (isFinish) {
              YKStoreKit._getInstance()._deleteCache(orderId);
              YKStoreKit._getInstance()._log("已恢复:OrderId:$orderId, CustomerId:$customerId");
            } else {
              YKStoreKit._getInstance()._error("恢复未完成:OrderId:$orderId, CustomerId:$customerId");
            }
            YKStoreKit._getInstance()._currentComplete?.complete(isFinish);
          } catch (e) {
            YKStoreKit._getInstance()._currentComplete?.complete(false);
            YKStoreKit._getInstance()._error(e.toString());
          } finally {
            YKStoreKit._getInstance()._currentModel = null;
            YKStoreKit._getInstance()._log("已恢复完成: ${purchaseDetails.productID}");
          }
        }
        //MARK: 统一都做完成操作
        if (purchaseDetails.pendingCompletePurchase) {
          await InAppPurchase.instance.completePurchase(purchaseDetails);
        }
        YKStoreKit._getInstance()._disloading();
      }
    }
  });
}