store_controller.dart 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. import 'dart:io';
  2. import 'package:classify_photo/classify_photo.dart';
  3. import 'package:clean/module/store/payment_status_manager.dart';
  4. import 'package:flutter/Material.dart';
  5. import 'package:get/get.dart';
  6. import 'package:in_app_purchase/in_app_purchase.dart';
  7. import '../../base/base_controller.dart';
  8. import '../../data/api/response/order_pay_response.dart';
  9. import '../../data/bean/payment_way.dart';
  10. import '../../data/bean/store_item.dart';
  11. import '../../data/consts/constants.dart';
  12. import '../../data/repositories/store_repository.dart';
  13. import '../../dialog/loading_dialog.dart';
  14. import '../../sdk/pay/agile_pay.dart';
  15. import '../../sdk/pay/applepay/apple_pay_info.dart';
  16. import '../../sdk/pay/assist/product_type.dart';
  17. import '../../utils/toast_util.dart';
  18. class StoreController extends BaseController implements PaymentStatusCallback {
  19. final RxList<StoreItem> storeItems = <StoreItem>[].obs;
  20. final RxList<PaymentWay> paymentWays = <PaymentWay>[].obs;
  21. final Rxn<StoreItem> currentSelectedStoreItem = Rxn<StoreItem>();
  22. final Rxn<PaymentWay> currentSelectedPaymentWay = Rxn<PaymentWay>();
  23. @override
  24. Future<void> onInit() async {
  25. // TODO: implement onInit
  26. // StoreItem item1 = StoreItem(id: 1, sort: 1, name: "11111", appleGoodsId: "1111", subscribable: 1, amount: 100, originalAmount: 100, auth: "auth", subscriptionMillis: 1, content: "content", priceDesc: "priceDesc", coefficient: 1);
  27. // StoreItem item2 = StoreItem(id: 2, sort: 1, name: "11111", appleGoodsId: "1111", subscribable: 1, amount: 100, originalAmount: 100, auth: "auth", subscriptionMillis: 1, content: "content", priceDesc: "priceDesc", coefficient: 1);
  28. // StoreItem item3 = StoreItem(id: 3, sort: 1, name: "11111", appleGoodsId: "1111", subscribable: 1, amount: 100, originalAmount: 100, auth: "auth", subscriptionMillis: 1, content: "content", priceDesc: "priceDesc", coefficient: 1);
  29. //
  30. // storeItems.add(item1);
  31. // storeItems.add(item2);
  32. // storeItems.add(item3);
  33. //
  34. // currentSelectedStoreItem.value = item1;
  35. initStoreIndexData();
  36. print(await ClassifyPhoto().checkTrialEligibility());
  37. }
  38. void initStoreIndexData() {
  39. storeRepository.storeIndex().then((indexData) {
  40. storeItems.clear();
  41. storeItems.addAll(indexData.items);
  42. currentSelectedStoreItem.value =
  43. storeItems.isNotEmpty ? storeItems.first : null;
  44. paymentWays.clear();
  45. paymentWays.addAll(indexData.paymentWays);
  46. currentSelectedPaymentWay.value =
  47. paymentWays.isNotEmpty ? paymentWays.first : null;
  48. });
  49. }
  50. void onBuyClick() async {
  51. StoreItem? storeItem = currentSelectedStoreItem.value;
  52. if (storeItem == null) {
  53. // ToastUtil.showToast(StringName.storeChoiceGoods.tr);
  54. return;
  55. }
  56. PaymentWay? paymentWay = currentSelectedPaymentWay.value;
  57. if (paymentWay == null) {
  58. // ToastUtil.showToast(StringName.storeChoicePayment.tr);
  59. return;
  60. }
  61. int payPlatform = paymentWay.payPlatform;
  62. int payMethod = paymentWay.payMethod;
  63. // LoadingDialog.show(StringName.storePayLoading.tr);
  64. try {
  65. OrderPayResponse response =
  66. await storeRepository.orderPay(storeItem.id, payPlatform, payMethod);
  67. dynamic payInfo;
  68. String outTradeNo = response.outTradeNo;
  69. if (payPlatform == PayPlatform.apple) {
  70. payInfo = ApplePayInfo(
  71. storeItem.appleGoodsId,
  72. storeItem.subscribable == 1
  73. ? ProductType.nonConsumable
  74. : ProductType.consumable,
  75. response.appAccountToken);
  76. }
  77. Future.delayed(const Duration(seconds: 30), () {
  78. LoadingDialog.hide();
  79. });
  80. AgilePay.startPay(payInfo, success: (String? result) {
  81. LoadingDialog.show("");
  82. checkPaymentStatus(outTradeNo, paymentWay, storeItem,
  83. receiptData: result);
  84. Future.delayed(const Duration(seconds: 30), () {
  85. LoadingDialog.hide();
  86. });
  87. }, payError: (int error, String? errorMessage) {
  88. debugPrint('zk---payError: $error, $errorMessage');
  89. // errorPayToast(error);
  90. LoadingDialog.hide();
  91. }, error: (int errno, String? error) {
  92. debugPrint('zk---error: $errno, $error');
  93. // errorPayToast(errno);
  94. LoadingDialog.hide();
  95. });
  96. } catch (error) {
  97. LoadingDialog.hide();
  98. // ToastUtil.showToast(StringName.storePayError.tr);
  99. }
  100. }
  101. void checkPaymentStatus(
  102. String orderNo, PaymentWay paymentWay, StoreItem storeItemBean,
  103. {String? receiptData}) {
  104. paymentStatusManager.registerPaymentSuccessCallback(orderNo, this);
  105. paymentStatusManager.checkPaymentStatus(orderNo, paymentWay, storeItemBean,
  106. receiptData: receiptData);
  107. }
  108. @override
  109. void onPaymentSuccess(String orderNo, PaymentWay paymentWay, StoreItem storeItemBean) {
  110. // TODO: implement onPaymentSuccess
  111. LoadingDialog.hide();
  112. ToastUtil.show("Pay success");
  113. Get.back();
  114. }
  115. }