Forráskód Böngészése

[new]调整支付流程

zk 1 éve
szülő
commit
023edf7073

+ 4 - 0
assets/string/base/string.xml

@@ -116,4 +116,8 @@
     <string name="store_choice_payment">请选择支付方式</string>
     <string name="store_pay_loading">请求中...</string>
     <string name="store_pay_user_cancel">用户取消支付</string>
+    <string name="store_pay_not_support">不支持该支付类型</string>
+    <string name="store_pay_wx_evn_error">微信未安装或微信版本不支持</string>
+    <string name="store_pay_not_connect_store">无法连接到商店</string>
+    <string name="store_pay_error">支付失败,请稍后重试</string>
 </resources>

+ 10 - 1
lib/module/store/controller.dart

@@ -110,10 +110,19 @@ class StoreController extends BaseController {
         ToastUtil.showToast('支付成功');
         LoadingDialog.hide();
       }, payError: (int error, String? errorMessage) {
+        ToastUtil.showToast(StringName.storePayError.tr);
         LoadingDialog.hide();
       }, error: (int errno, String? error) {
-        if (errno == AgilePayCode.payCodeCancelError) {
+        if (errno == AgilePayCode.payCodeNotSupport) {
+          ToastUtil.showToast(StringName.storePayNotSupport.tr);
+        } else if (errno == AgilePayCode.payCodeCancelError) {
           ToastUtil.showToast(StringName.storePayUserCancel.tr);
+        } else if (errno == AgilePayCode.payCodeWxEnvError) {
+          ToastUtil.showToast(StringName.storePayWxEvnError.tr);
+        } else if (errno == AgilePayCode.payCodeNotConnectStore) {
+          ToastUtil.showToast(StringName.storePayNotConnectstore.tr);
+        } else {
+          ToastUtil.showToast(StringName.storePayError.tr);
         }
         LoadingDialog.hide();
       });

+ 38 - 20
lib/sdk/pay/assist/apple_or_google_pay.dart

@@ -30,14 +30,14 @@ abstract class AppleOrGooglePay extends AgilePayStateInfo {
   void pay() async {
     sendPayBefore();
     try {
-      final bool isAvailable = await _iap.isAvailable().timeout(timeout);
-      if (!isAvailable) {
+      final bool isAe = await isAvailable();
+      if (!isAe) {
         sendError(AgilePayCode.payCodeNotConnectStore,
             AgilePayCode.getMessageByCode(AgilePayCode.payCodeNotConnectStore));
         return;
       }
-      final ProductDetailsResponse response = await InAppPurchase.instance
-          .queryProductDetails({_payInfo.productId});
+      final ProductDetailsResponse response =
+          await queryProductDetails({_payInfo.productId});
       if (response.notFoundIDs.isNotEmpty || response.productDetails.isEmpty) {
         sendError(
             AgilePayCode.payCodeProductNotFindStore,
@@ -49,12 +49,12 @@ abstract class AppleOrGooglePay extends AgilePayStateInfo {
       for (var element in products) {
         bool isSend;
         if (_payInfo.type == ProductType.consumable) {
-          isSend = await _iap.buyConsumable(
+          isSend = await buyConsumable(
               purchaseParam: PurchaseParam(
                   productDetails: element,
                   applicationUserName: _payInfo.accountToken));
         } else {
-          isSend = await _iap.buyNonConsumable(
+          isSend = await buyNonConsumable(
               purchaseParam: PurchaseParam(
                   productDetails: element,
                   applicationUserName: _payInfo.accountToken));
@@ -80,6 +80,22 @@ abstract class AppleOrGooglePay extends AgilePayStateInfo {
     }
   }
 
+  Future<bool> isAvailable() {
+    return _iap.isAvailable().timeout(timeout);
+  }
+
+  Future<ProductDetailsResponse> queryProductDetails(Set<String> identifiers) {
+    return InAppPurchase.instance.queryProductDetails(identifiers);
+  }
+
+  Future<bool> buyConsumable({required PurchaseParam purchaseParam}) {
+    return _iap.buyConsumable(purchaseParam: purchaseParam);
+  }
+
+  Future<bool> buyNonConsumable({required PurchaseParam purchaseParam}) {
+    return _iap.buyNonConsumable(purchaseParam: purchaseParam);
+  }
+
   void dispose() {
     _purchaseUpdatedSubscription.cancel();
   }
@@ -87,30 +103,32 @@ abstract class AppleOrGooglePay extends AgilePayStateInfo {
   void listenToPurchaseUpdated(List<PurchaseDetails> purchaseDetailsList) {
     for (var purchaseDetails in purchaseDetailsList) {
       debugPrint(
-          'agilePay-applePay--PurchaseUpdated-> ${purchaseDetails.toString()}');
+          'agilePay-purchasePay--PurchaseUpdated-> ${purchaseDetails.toString()}');
       if (purchaseDetails.status == PurchaseStatus.pending) {
+        verifyPendingPurchase(purchaseDetails);
       } else if (purchaseDetails.status == PurchaseStatus.error) {
-        _verifyErrorPurchase(purchaseDetails);
+        verifyErrorPurchase(purchaseDetails);
       } else if (purchaseDetails.status == PurchaseStatus.purchased) {
-        _verifySuccessPurchase(purchaseDetails);
+        verifySuccessPurchase(purchaseDetails);
       } else if (purchaseDetails.status == PurchaseStatus.canceled) {
-        sendError(AgilePayCode.payCodeCancelError,
-            AgilePayCode.getMessageByCode(AgilePayCode.payCodeCancelError));
+        verifyCancelPurchase(purchaseDetails);
       }
     }
   }
 
-  void _verifyErrorPurchase(PurchaseDetails purchaseDetails) {
-    if (purchaseDetails.error?.code == 'store_kit_network_error') {
-      sendError(AgilePayCode.payCodeNetError,
-          AgilePayCode.getMessageByCode(AgilePayCode.payCodeNetError));
-    } else {
-      sendError(AgilePayCode.payCodeOtherError,
-          AgilePayCode.getMessageByCode(AgilePayCode.payCodeOtherError));
-    }
+  void verifyPendingPurchase(PurchaseDetails purchaseDetails) {}
+
+  void verifyCancelPurchase(PurchaseDetails purchaseDetails) {
+    sendError(AgilePayCode.payCodeCancelError,
+        AgilePayCode.getMessageByCode(AgilePayCode.payCodeCancelError));
+  }
+
+  void verifyErrorPurchase(PurchaseDetails purchaseDetails) {
+    sendError(AgilePayCode.payCodePayError,
+        AgilePayCode.getMessageByCode(AgilePayCode.payCodePayError));
   }
 
-  void _verifySuccessPurchase(PurchaseDetails purchaseDetails) {
+  void verifySuccessPurchase(PurchaseDetails purchaseDetails) {
     sendPaySuccess(purchaseDetails.purchaseID);
   }
 }