| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- 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<StoreItem> storeItems = <StoreItem>[].obs;
- final RxList<PaymentWay> paymentWays = <PaymentWay>[].obs;
- final Rxn<StoreItem> currentSelectedStoreItem = Rxn<StoreItem>();
- final Rxn<PaymentWay> currentSelectedPaymentWay = Rxn<PaymentWay>();
- 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();
- }
- }
|