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 || purchaseDetails.status == PurchaseStatus.restored) {
          // 购买成功

          try {
            if (YKStoreKit
                ._getInstance()
                ._currentModel != null) {
              //MARK: 购买凭证保存到本地
              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");
              }
            } else {
              /// TODO: 购买成功,但是内存缓存中并没有当前订单信息,,,,,,,,,得排查原因
              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");
              }
            }
          } catch (e) {
            YKStoreKit._getInstance()._disloading();
            YKStoreKit._getInstance()._error(e.toString());
          } finally {
            YKStoreKit
                ._getInstance()
                ._currentComplete
                ?.complete(true);
            YKStoreKit
                ._getInstance()
                ._currentModel = null;
            YKStoreKit._getInstance()._log("已完成: ${purchaseDetails.productID}");
          }
        }

        //MARK: 统一都做完成操作
        if (purchaseDetails.pendingCompletePurchase) {
          //核销商品
          await InAppPurchase.instance.completePurchase(purchaseDetails);
        }
      }
    }
  });
}