|
@@ -1,9 +1,25 @@
|
|
|
import 'package:electronic_assistant/base/base_controller.dart';
|
|
import 'package:electronic_assistant/base/base_controller.dart';
|
|
|
import 'package:electronic_assistant/data/bean/payment_way.dart';
|
|
import 'package:electronic_assistant/data/bean/payment_way.dart';
|
|
|
import 'package:electronic_assistant/data/repositories/store_repository.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 'package:get/get.dart';
|
|
|
|
|
|
|
|
|
|
+import '../../data/api/response/order_pay_response.dart';
|
|
|
import '../../data/bean/store_item.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/listener/agile_pay_state.dart';
|
|
|
|
|
+import '../../sdk/pay/wxpay/wechat_pay_info.dart';
|
|
|
|
|
|
|
|
class StoreController extends BaseController {
|
|
class StoreController extends BaseController {
|
|
|
final isExpanded = false.obs;
|
|
final isExpanded = false.obs;
|
|
@@ -46,5 +62,71 @@ class StoreController extends BaseController {
|
|
|
currentSelectedPaymentWay.value = paymentWay;
|
|
currentSelectedPaymentWay.value = paymentWay;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- onBuyClick() {}
|
|
|
|
|
|
|
+ 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();
|
|
|
|
|
+ }
|
|
|
|
|
+ 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();
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|