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
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;
|
|
}
|
|
}
|
|
|