| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239 |
- import 'dart:io';
- import 'package:apple_pay/apple_pay.dart';
- import 'package:classify_photo/classify_photo.dart';
- import 'package:clean/data/repositories/user_repository.dart';
- import 'package:clean/module/store/payment_status_manager.dart';
- import 'package:clean/utils/error_handler.dart';
- import 'package:flutter/Material.dart';
- import 'package:get/get.dart';
- import 'package:in_app_purchase/in_app_purchase.dart';
- import '../../base/base_controller.dart';
- import '../../data/api/response/order_pay_response.dart';
- import '../../data/bean/payment_way.dart';
- import '../../data/bean/store_item.dart';
- import '../../data/consts/constants.dart';
- import '../../data/repositories/store_repository.dart';
- import '../../dialog/loading_dialog.dart';
- import '../../sdk/pay/agile_pay.dart';
- import '../../sdk/pay/applepay/apple_pay_info.dart';
- import '../../sdk/pay/assist/product_type.dart';
- import '../../utils/toast_util.dart';
- class StoreController extends BaseController implements PaymentStatusCallback {
- final RxList<StoreItem> storeItems = <StoreItem>[].obs;
- final RxList<PaymentWay> paymentWays = <PaymentWay>[].obs;
- final Rxn<StoreItem> currentSelectedStoreItem = Rxn<StoreItem>();
- final Rxn<PaymentWay> currentSelectedPaymentWay = Rxn<PaymentWay>();
- var freeAppleId = "";
- RxBool isFree = false.obs;
- @override
- Future<void> onInit() async {
- initStoreIndexData();
- }
- void initStoreIndexData() {
- storeRepository.storeIndex().then((indexData) async {
- 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;
- var freeAppleId = "";
- for (var item in storeItems) {
- if (item.freeTrialName != null) {
- freeAppleId = item.appleGoodsId;
- }
- }
- isFree.value = await ApplePay().check(freeAppleId);
- });
- }
- Future<void> onRestoreClick() async {
- PaymentWay? paymentWay = currentSelectedPaymentWay.value;
- if (paymentWay == null) {
- // ToastUtil.showToast(StringName.storeChoicePayment.tr);
- return;
- }
- int payPlatform = paymentWay.payPlatform;
- int payMethod = paymentWay.payMethod;
- LoadingDialog.show("");
- Future.delayed(const Duration(seconds: 20), () {
- LoadingDialog.hide();
- ToastUtil.show("Restore record not found");
- });
- final result = await ApplePay().restore();
- if (result["success"] == true) {
- // LoadingDialog.hide();
- var receipt = result['receipt'];
- print('查找恢复记录成功: ${result['receipt']}');
- checkRestoreStatus(receipt);
- } else {
- LoadingDialog.hide();
- ToastUtil.show("Pay Error");
- print('恢复失败: ${result['error']}');
- }
- // AgilePay.restore(success: (String? result) {
- // // LoadingDialog.hide();
- // }, payError: (int error, String? errorMessage) {
- // debugPrint('zk---payError: $error, $errorMessage');
- // // errorPayToast(error);
- // LoadingDialog.hide();
- // }, error: (int errno, String? error) {
- // debugPrint('zk---error: $errno, $error');
- // // errorPayToast(errno);
- // LoadingDialog.hide();
- // }, restore: (String? result) {
- // LoadingDialog.show("");
- // checkRestoreStatus(result);
- // Future.delayed(const Duration(seconds: 30), () {
- // LoadingDialog.hide();
- // });
- // });
- }
- void 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("");
- try {
- // OrderPayResponse response =
- storeRepository.orderPay(storeItem.id, payPlatform, payMethod).then((response) async {
- dynamic payInfo;
- String outTradeNo = response.outTradeNo;
- if (payPlatform == PayPlatform.apple) {
- payInfo = ApplePayInfo(
- storeItem.appleGoodsId,
- storeItem.subscribable == 1
- ? ProductType.nonConsumable
- : ProductType.consumable,
- response.appAccountToken);
- }
- final result = await ApplePay().purchase(productId: storeItem.appleGoodsId, appAccountToken: response.appAccountToken);
- if (result["success"] == true) {
- var receipt = result['receipt'];
- print('购买成功: ${result['receipt']}');
- checkPaymentStatus(outTradeNo, paymentWay, storeItem, receiptData: receipt);
- } else {
- LoadingDialog.hide();
- ToastUtil.show("Pay Error");
- print('购买失败: ${result['error']}');
- }
- }).catchError((error) {
- LoadingDialog.hide();
- ErrorHandler.toastError(error);
- });
- // AgilePay.startPay(payInfo, success: (String? result) {
- // LoadingDialog.show("");
- // checkPaymentStatus(outTradeNo, paymentWay, storeItem,
- // receiptData: result);
- // Future.delayed(const Duration(seconds: 30), () {
- // LoadingDialog.hide();
- // });
- // }, payError: (int error, String? errorMessage) {
- // debugPrint('zk---payError: $error, $errorMessage');
- // // errorPayToast(error);
- // LoadingDialog.hide();
- // }, error: (int errno, String? error) {
- // debugPrint('zk---error: $errno, $error');
- // // errorPayToast(errno);
- // LoadingDialog.hide();
- // });
- } catch (error) {
- LoadingDialog.hide();
- // ToastUtil.showToast(StringName.storePayError.tr);
- }
- }
- // 检查恢复订阅结果
- Future<void> checkRestoreStatus(String? receiptData) async {
- PaymentWay? paymentWay = currentSelectedPaymentWay.value;
- if (paymentWay == null) {
- // ToastUtil.showToast(StringName.storeChoicePayment.tr);
- return;
- }
- if (receiptData == null) {
- return;
- }
- int payPlatform = paymentWay.payPlatform;
- int payMethod = paymentWay.payMethod;
- // var code = await storeRepository.resume(payPlatform, payMethod, receiptData);
- storeRepository.resume(payPlatform, payMethod, receiptData).then((data) {
- LoadingDialog.hide();
- ToastUtil.show("Restore success");
- userRepository.getUserInfo();
- Get.back();
- }).catchError((error) {
- LoadingDialog.hide();
- ToastUtil.show("Restore fail");
- });
- // if (code == 0) {
- // LoadingDialog.hide();
- // ToastUtil.show("Restore success");
- // userRepository.getUserInfo();
- // Get.back();
- // } else {
- // LoadingDialog.hide();
- // ToastUtil.show("Restore fail");
- // }
- }
- void checkPaymentStatus(
- String orderNo, PaymentWay paymentWay, StoreItem storeItemBean,
- {String? receiptData}) {
- paymentStatusManager.registerPaymentSuccessCallback(orderNo, this);
- paymentStatusManager.checkPaymentStatus(orderNo, paymentWay, storeItemBean,
- receiptData: receiptData);
- }
- @override
- void onPaymentSuccess(String orderNo, PaymentWay paymentWay, StoreItem storeItemBean) {
- // TODO: implement onPaymentSuccess
- LoadingDialog.hide();
- ToastUtil.show("Pay success");
- userRepository.getUserInfo();
- Get.back();
- }
- @override
- void onPaymentError(Error error) {
- // TODO: implement onPaymentError
- LoadingDialog.hide();
- ErrorHandler.toastError(error);
- userRepository.getUserInfo();
- }
- }
|