controller.dart 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. import 'package:electronic_assistant/base/base_controller.dart';
  2. import 'package:electronic_assistant/data/bean/payment_way.dart';
  3. import 'package:electronic_assistant/data/repositories/store_repository.dart';
  4. import 'package:electronic_assistant/resource/string.gen.dart';
  5. import 'package:electronic_assistant/router/app_pages.dart';
  6. import 'package:electronic_assistant/sdk/pay/agile_pay.dart';
  7. import 'package:electronic_assistant/sdk/pay/alipay/ali_pay_info.dart';
  8. import 'package:electronic_assistant/sdk/pay/applepay/apple_pay_info.dart';
  9. import 'package:electronic_assistant/sdk/pay/code/agile_pay_code.dart';
  10. import 'package:electronic_assistant/utils/error_handler.dart';
  11. import 'package:electronic_assistant/utils/http_handler.dart';
  12. import 'package:electronic_assistant/utils/toast_util.dart';
  13. import 'package:get/get.dart';
  14. import '../../data/api/response/order_pay_response.dart';
  15. import '../../data/bean/store_item.dart';
  16. import '../../data/bean/wechat_payment_sign_bean.dart';
  17. import '../../data/consts/constants.dart';
  18. import '../../data/consts/error_code.dart';
  19. import '../../dialog/loading_dialog.dart';
  20. import '../../sdk/pay/listener/agile_pay_state.dart';
  21. import '../../sdk/pay/wxpay/wechat_pay_info.dart';
  22. class StoreController extends BaseController {
  23. final isExpanded = false.obs;
  24. final RxList<StoreItem> storeItems = <StoreItem>[].obs;
  25. final RxList<PaymentWay> paymentWays = <PaymentWay>[].obs;
  26. final Rxn<StoreItem> currentSelectedStoreItem = Rxn<StoreItem>();
  27. final Rxn<PaymentWay> currentSelectedPaymentWay = Rxn<PaymentWay>();
  28. final RxBool isPaymentWayExpanded = false.obs;
  29. @override
  30. void onInit() {
  31. super.onInit();
  32. initStoreIndexData();
  33. }
  34. void initStoreIndexData() {
  35. storeRepository.storeIndex().then((indexData) {
  36. storeItems.clear();
  37. storeItems.addAll(indexData.items);
  38. currentSelectedStoreItem.value =
  39. storeItems.isNotEmpty ? storeItems.first : null;
  40. paymentWays.clear();
  41. paymentWays.addAll(indexData.paymentWays);
  42. currentSelectedPaymentWay.value =
  43. paymentWays.isNotEmpty ? paymentWays.first : null;
  44. });
  45. }
  46. onStoreItemClick(StoreItem storeItem) {
  47. currentSelectedStoreItem.value = storeItem;
  48. }
  49. void onPaymentWayItemClick(PaymentWay paymentWay) {
  50. currentSelectedPaymentWay.value = paymentWay;
  51. }
  52. onBuyClick() async {
  53. StoreItem? storeItem = currentSelectedStoreItem.value;
  54. if (storeItem == null) {
  55. ToastUtil.showToast(StringName.storeChoiceGoods.tr);
  56. return;
  57. }
  58. PaymentWay? paymentWay = currentSelectedPaymentWay.value;
  59. if (paymentWay == null) {
  60. ToastUtil.showToast(StringName.storeChoicePayment.tr);
  61. return;
  62. }
  63. int payPlatform = paymentWay.payPlatform;
  64. int payMethod = paymentWay.payMethod;
  65. LoadingDialog.show(StringName.storePayLoading.tr);
  66. try {
  67. OrderPayResponse response =
  68. await storeRepository.orderPay(storeItem.id, payPlatform, payMethod);
  69. dynamic payInfo;
  70. if (payPlatform == PayPlatform.android) {
  71. if (payMethod == PayMethod.alipay) {
  72. payInfo = AliPayInfo(response.alipayOrderString!);
  73. } else if (payMethod == PayMethod.wechat) {
  74. WechatPaymentSignBean bean =
  75. WechatPaymentSignBean.stringToBean(response.wechatPayPrepayJson!);
  76. payInfo = WechatPayInfo(
  77. appId: bean.appId,
  78. partnerId: bean.partnerId,
  79. prepayId: bean.prepayId,
  80. package: bean.package,
  81. noncestr: bean.nonceStr,
  82. timestamp: bean.timeStamp,
  83. sign: bean.sign);
  84. }
  85. } else if (payPlatform == PayPlatform.ios) {
  86. // payInfo = ApplePayInfo();
  87. }
  88. AgilePay.startPay(payInfo, success: (String? result) {
  89. ToastUtil.showToast('支付成功');
  90. LoadingDialog.hide();
  91. }, payError: (int error, String? errorMessage) {
  92. LoadingDialog.hide();
  93. }, error: (int errno, String? error) {
  94. if (errno == AgilePayCode.payCodeCancelError) {
  95. ToastUtil.showToast(StringName.storePayUserCancel.tr);
  96. }
  97. LoadingDialog.hide();
  98. });
  99. } catch (error) {
  100. if (error is ServerErrorException &&
  101. error.code == ErrorCode.errorCodeNoLogin) {
  102. ToastUtil.showToast(StringName.errorCodeNoLogin.tr);
  103. Get.toNamed(RoutePath.login);
  104. } else {
  105. ErrorHandler.toastError(error);
  106. }
  107. } finally {
  108. LoadingDialog.hide();
  109. }
  110. }
  111. @override
  112. void onClose() {
  113. super.onClose();
  114. AgilePay.dispose();
  115. }
  116. }