You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

85 lines
2.5 KiB

import 'package:get/get.dart';
import '../../../data/services/pay_service.dart';
class PaymentController extends GetxController {
final PayService _payService = Get.find<PayService>();
// 支付状态
final RxBool isLoading = false.obs;
final RxString paymentStatus = ''.obs;
final RxString errorMessage = ''.obs;
// 测试订单信息
final RxString testOrderId = ''.obs;
final RxDouble testAmount = 0.01.obs; // 测试金额 1分钱
@override
void onInit() {
super.onInit();
// 生成测试订单ID
testOrderId.value = 'test_${DateTime.now().millisecondsSinceEpoch}';
}
/// 测试微信支付
Future<void> testWechatPayment() async {
try {
isLoading.value = true;
paymentStatus.value = '正在发起支付...';
errorMessage.value = '';
// 调用支付服务,使用回调处理结果
final launched = await _payService.processWechatPayment(
orderId: testOrderId.value,
amount: (testAmount.value * 100).toInt(), // 转换为分
description: '微信支付测试',
onResult: (success, message) {
// 支付结果回调
isLoading.value = false;
if (success) {
paymentStatus.value = '支付成功!';
errorMessage.value = '';
Get.snackbar(
'支付成功',
message ?? '微信支付测试完成',
snackPosition: SnackPosition.TOP,
);
} else {
paymentStatus.value = '支付失败';
errorMessage.value = message ?? '未知错误';
Get.snackbar(
'支付失败',
message ?? '未知错误',
snackPosition: SnackPosition.TOP,
);
}
},
);
if (!launched) {
// 如果支付没有成功启动
isLoading.value = false;
paymentStatus.value = '支付启动失败';
errorMessage.value = '无法启动微信支付';
Get.snackbar('支付启动失败', '无法启动微信支付');
}
} catch (e) {
isLoading.value = false;
paymentStatus.value = '支付异常';
errorMessage.value = e.toString();
Get.snackbar('支付异常', e.toString());
}
}
/// 重置状态
void resetStatus() {
paymentStatus.value = '';
errorMessage.value = '';
testOrderId.value = 'test_${DateTime.now().millisecondsSinceEpoch}';
}
/// 更新测试金额
void updateTestAmount(double amount) {
testAmount.value = amount;
}
}