import 'package:electronic_assistant/base/base_controller.dart'; import 'package:electronic_assistant/data/bean/payment_way.dart'; import 'package:electronic_assistant/data/repositories/store_repository.dart'; import 'package:electronic_assistant/resource/string.gen.dart'; import 'package:electronic_assistant/router/app_pages.dart'; import 'package:electronic_assistant/sdk/pay/agile_pay.dart'; import 'package:electronic_assistant/sdk/pay/alipay/ali_pay_info.dart'; import 'package:electronic_assistant/sdk/pay/applepay/apple_pay_info.dart'; import 'package:electronic_assistant/sdk/pay/code/agile_pay_code.dart'; import 'package:electronic_assistant/utils/error_handler.dart'; import 'package:electronic_assistant/utils/http_handler.dart'; import 'package:electronic_assistant/utils/toast_util.dart'; import 'package:get/get.dart'; import '../../data/api/response/order_pay_response.dart'; import '../../data/bean/store_item.dart'; import '../../data/bean/wechat_payment_sign_bean.dart'; import '../../data/consts/constants.dart'; import '../../data/consts/error_code.dart'; import '../../dialog/loading_dialog.dart'; import '../../sdk/pay/assist/product_type.dart'; import '../../sdk/pay/listener/agile_pay_state.dart'; import '../../sdk/pay/wxpay/wechat_pay_info.dart'; class StoreController extends BaseController { final isExpanded = false.obs; final RxList storeItems = [].obs; final RxList paymentWays = [].obs; final Rxn currentSelectedStoreItem = Rxn(); final Rxn currentSelectedPaymentWay = Rxn(); final RxBool isPaymentWayExpanded = false.obs; @override void onInit() { super.onInit(); initStoreIndexData(); } void initStoreIndexData() { storeRepository.storeIndex().then((indexData) { storeItems.clear(); storeItems.addAll(indexData.items); currentSelectedStoreItem.value = storeItems.isNotEmpty ? storeItems.first : null; paymentWays.clear(); paymentWays.addAll(indexData.paymentWays); currentSelectedPaymentWay.value = paymentWays.isNotEmpty ? paymentWays.first : null; }); } onStoreItemClick(StoreItem storeItem) { currentSelectedStoreItem.value = storeItem; } void onPaymentWayItemClick(PaymentWay paymentWay) { currentSelectedPaymentWay.value = paymentWay; } onBuyClick() async { StoreItem? storeItem = currentSelectedStoreItem.value; if (storeItem == null) { ToastUtil.showToast(StringName.storeChoiceGoods.tr); return; } PaymentWay? paymentWay = currentSelectedPaymentWay.value; if (paymentWay == null) { ToastUtil.showToast(StringName.storeChoicePayment.tr); return; } int payPlatform = paymentWay.payPlatform; int payMethod = paymentWay.payMethod; LoadingDialog.show(StringName.storePayLoading.tr); try { OrderPayResponse response = await storeRepository.orderPay(storeItem.id, payPlatform, payMethod); dynamic payInfo; if (payPlatform == PayPlatform.android) { if (payMethod == PayMethod.alipay) { payInfo = AliPayInfo(response.alipayOrderString!); } else if (payMethod == PayMethod.wechat) { WechatPaymentSignBean bean = WechatPaymentSignBean.stringToBean(response.wechatPayPrepayJson!); payInfo = WechatPayInfo( appId: bean.appId, partnerId: bean.partnerId, prepayId: bean.prepayId, package: bean.package, noncestr: bean.nonceStr, timestamp: bean.timeStamp, sign: bean.sign); } } else if (payPlatform == PayPlatform.ios) { payInfo = ApplePayInfo( storeItem.appleGoodsId, storeItem.subscribable == 1 ? ProductType.nonConsumable : ProductType.consumable, response.appAccountToken); } AgilePay.startPay(payInfo, success: (String? result) { ToastUtil.showToast('支付成功'); LoadingDialog.hide(); }, payError: (int error, String? errorMessage) { LoadingDialog.hide(); }, error: (int errno, String? error) { if (errno == AgilePayCode.payCodeCancelError) { ToastUtil.showToast(StringName.storePayUserCancel.tr); } LoadingDialog.hide(); }); } catch (error) { if (error is ServerErrorException && error.code == ErrorCode.errorCodeNoLogin) { ToastUtil.showToast(StringName.errorCodeNoLogin.tr); Get.toNamed(RoutePath.login); } else { ErrorHandler.toastError(error); } } finally { LoadingDialog.hide(); } } @override void onClose() { super.onClose(); AgilePay.dispose(); } }