setupCheckOrder static method
dynamic
setupCheckOrder({})
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();
}
}
});
}