parent
99c86eb158
commit
e0012622d8
@ -0,0 +1,73 @@
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
part 'pay_model.g.dart';
|
||||
|
||||
@JsonSerializable()
|
||||
class PayModel extends Equatable {
|
||||
@JsonKey(name: 'alipay_trade_app_pay_response')
|
||||
final AliPayTradeAppPayResponse aliPayTradeAppPayResponse;
|
||||
final String sign;
|
||||
@JsonKey(name: 'sign_type')
|
||||
final String signType;
|
||||
|
||||
const PayModel({
|
||||
required this.aliPayTradeAppPayResponse,
|
||||
required this.sign,
|
||||
required this.signType,
|
||||
});
|
||||
|
||||
factory PayModel.fromJson(Map<String, dynamic> json) =>
|
||||
_$PayModelFromJson(json);
|
||||
|
||||
@override
|
||||
List<Object> get props => [aliPayTradeAppPayResponse, sign, signType];
|
||||
}
|
||||
|
||||
@JsonSerializable()
|
||||
class AliPayTradeAppPayResponse extends Equatable {
|
||||
final String code;
|
||||
final String msg;
|
||||
@JsonKey(name: 'app_id')
|
||||
final String appId;
|
||||
@JsonKey(name: 'out_trade_no')
|
||||
final String outTradeNo;
|
||||
@JsonKey(name: 'trade_no')
|
||||
final String tradeNo;
|
||||
@JsonKey(name: 'total_amount')
|
||||
final String totalAmount;
|
||||
@JsonKey(name: 'seller_id')
|
||||
final String sellerId;
|
||||
final String charset;
|
||||
final String timestamp;
|
||||
|
||||
const AliPayTradeAppPayResponse({
|
||||
required this.code,
|
||||
required this.msg,
|
||||
required this.appId,
|
||||
required this.outTradeNo,
|
||||
required this.tradeNo,
|
||||
required this.totalAmount,
|
||||
required this.sellerId,
|
||||
required this.charset,
|
||||
required this.timestamp,
|
||||
});
|
||||
|
||||
factory AliPayTradeAppPayResponse.fromJson(Map<String, dynamic> json) =>
|
||||
_$AliPayTradeAppPayResponseFromJson(json);
|
||||
|
||||
@override
|
||||
List<Object> get props {
|
||||
return [
|
||||
code,
|
||||
msg,
|
||||
appId,
|
||||
outTradeNo,
|
||||
tradeNo,
|
||||
totalAmount,
|
||||
sellerId,
|
||||
charset,
|
||||
timestamp,
|
||||
];
|
||||
}
|
||||
}
|
@ -0,0 +1,28 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'pay_model.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// JsonSerializableGenerator
|
||||
// **************************************************************************
|
||||
|
||||
PayModel _$PayModelFromJson(Map<String, dynamic> json) => PayModel(
|
||||
aliPayTradeAppPayResponse: AliPayTradeAppPayResponse.fromJson(
|
||||
json['alipay_trade_app_pay_response'] as Map<String, dynamic>),
|
||||
sign: json['sign'] as String,
|
||||
signType: json['sign_type'] as String,
|
||||
);
|
||||
|
||||
AliPayTradeAppPayResponse _$AliPayTradeAppPayResponseFromJson(
|
||||
Map<String, dynamic> json) =>
|
||||
AliPayTradeAppPayResponse(
|
||||
code: json['code'] as String,
|
||||
msg: json['msg'] as String,
|
||||
appId: json['app_id'] as String,
|
||||
outTradeNo: json['out_trade_no'] as String,
|
||||
tradeNo: json['trade_no'] as String,
|
||||
totalAmount: json['total_amount'] as String,
|
||||
sellerId: json['seller_id'] as String,
|
||||
charset: json['charset'] as String,
|
||||
timestamp: json['timestamp'] as String,
|
||||
);
|
@ -0,0 +1,37 @@
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:json_annotation/json_annotation.dart';
|
||||
|
||||
part 'wx_pay_model.g.dart';
|
||||
|
||||
@JsonSerializable()
|
||||
class WxPayModel extends Equatable {
|
||||
final String prepayId;
|
||||
final String partnerId;
|
||||
final String timeStamp;
|
||||
final String nonceStr;
|
||||
final String package;
|
||||
final String sign;
|
||||
|
||||
factory WxPayModel.fromJson(Map<String, dynamic> json) =>
|
||||
_$WxPayModelFromJson(json);
|
||||
|
||||
|
||||
const WxPayModel({
|
||||
required this.prepayId,
|
||||
required this.partnerId,
|
||||
required this.timeStamp,
|
||||
required this.nonceStr,
|
||||
required this.package,
|
||||
required this.sign,
|
||||
});
|
||||
|
||||
@override
|
||||
List<Object?> get props => [
|
||||
prepayId,
|
||||
partnerId,
|
||||
timeStamp,
|
||||
nonceStr,
|
||||
package,
|
||||
sign,
|
||||
];
|
||||
}
|
@ -0,0 +1,16 @@
|
||||
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||
|
||||
part of 'wx_pay_model.dart';
|
||||
|
||||
// **************************************************************************
|
||||
// JsonSerializableGenerator
|
||||
// **************************************************************************
|
||||
|
||||
WxPayModel _$WxPayModelFromJson(Map<String, dynamic> json) => WxPayModel(
|
||||
prepayId: json['prepayId'] as String,
|
||||
partnerId: json['partnerId'] as String,
|
||||
timeStamp: json['timeStamp'] as String,
|
||||
nonceStr: json['nonceStr'] as String,
|
||||
package: json['package'] as String,
|
||||
sign: json['sign'] as String,
|
||||
);
|
@ -1,166 +1,166 @@
|
||||
// import 'dart:async';
|
||||
// import 'dart:convert';
|
||||
|
||||
// import 'package:bot_toast/bot_toast.dart';
|
||||
// import 'package:cloud_car/model/pay/wx_pay_model.dart';
|
||||
// import 'package:cloud_car/utils/new_work/api_client.dart';
|
||||
// import 'package:cloud_car/utils/toast/cloud_toast.dart';
|
||||
// import 'package:dio/dio.dart';
|
||||
// import 'package:flutter/foundation.dart';
|
||||
// import 'package:fluwx/fluwx.dart';
|
||||
// import 'package:power_logger/power_logger.dart';
|
||||
// import 'package:tobias/tobias.dart';
|
||||
|
||||
// import '../model/pay/pay_model.dart';
|
||||
|
||||
// enum PAYTYPE {
|
||||
// ///支付宝
|
||||
// ali,
|
||||
|
||||
// ///微信
|
||||
// wx,
|
||||
|
||||
// ///现金
|
||||
// cash,
|
||||
|
||||
// ///pos
|
||||
// pos
|
||||
// }
|
||||
|
||||
// class PayUtil {
|
||||
// static final PayUtil _instance = PayUtil._();
|
||||
|
||||
// factory PayUtil() => _instance;
|
||||
|
||||
// PayUtil._();
|
||||
|
||||
// void resultSatus(String status) {
|
||||
// switch (status) {
|
||||
// case '8000':
|
||||
// BotToast.showText(text: '正在处理中');
|
||||
// break;
|
||||
// case '4000':
|
||||
// BotToast.showText(text: '订单支付失败');
|
||||
// break;
|
||||
// case '5000':
|
||||
// BotToast.showText(text: '重复请求');
|
||||
// break;
|
||||
// case '6001':
|
||||
// BotToast.showText(text: ' 用户中途取消');
|
||||
// break;
|
||||
// case '6002':
|
||||
// BotToast.showText(text: '网络连接出错');
|
||||
// break;
|
||||
// case '6004':
|
||||
// BotToast.showText(text: '支付结果未知,请查询商户订单列表中订单的支付状态');
|
||||
// break;
|
||||
// default:
|
||||
// BotToast.showText(text: '其他支付错误');
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
|
||||
// String _resultStatus = '';
|
||||
|
||||
// ///支付宝支付
|
||||
// ///传入订单信息和确认订单请求地址
|
||||
// Future<bool> callAliPay(String order, {String? apiPath}) async {
|
||||
// var install = await isAliPayInstalled();
|
||||
// if (!install) {
|
||||
// BotToast.showText(text: '未安装支付宝!');
|
||||
// return false;
|
||||
// }
|
||||
// Map<dynamic, dynamic> result = {};
|
||||
// try {
|
||||
// result = await aliPay(order);
|
||||
// } catch (e) {
|
||||
// if (kDebugMode) {
|
||||
// print(e.toString());
|
||||
// }
|
||||
// }
|
||||
// _resultStatus = result['resultStatus'];
|
||||
// if (_resultStatus == '9000') {
|
||||
// String res = result['result'];
|
||||
// PayModel model = PayModel.fromJson(jsonDecode(res));
|
||||
// if (apiPath != null) {
|
||||
// bool confirmResult = await _confirmPayResult(
|
||||
// apiPath, model.aliPayTradeAppPayResponse.outTradeNo);
|
||||
// return confirmResult;
|
||||
// } else {
|
||||
// CloudToast.show('支付成功');
|
||||
// return true;
|
||||
// }
|
||||
// } else {
|
||||
// resultSatus(_resultStatus);
|
||||
// return false;
|
||||
// }
|
||||
// }
|
||||
|
||||
// Future<bool> _confirmPayResult(String path, String code) async {
|
||||
// try {
|
||||
// int status = 0;
|
||||
// for (var i = 0; i < 3; i++) {
|
||||
// await Future.delayed(const Duration(milliseconds: 1000), () async {
|
||||
// Response response = await apiClient.dio.get(path, queryParameters: {
|
||||
// "code": code,
|
||||
// });
|
||||
// status = response.data['status'] as int;
|
||||
// });
|
||||
// if (status == 2) {
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
// if (status == 2) {
|
||||
// BotToast.showText(text: '交易成功');
|
||||
// return true;
|
||||
// } else {
|
||||
// BotToast.showText(text: '交易失败 错误码$status');
|
||||
// return false;
|
||||
// }
|
||||
// } catch (e) {
|
||||
// BotToast.showText(text: '网络请求错误');
|
||||
// LoggerData.addData(e);
|
||||
// return false;
|
||||
// }
|
||||
// }
|
||||
|
||||
// ///微信支付
|
||||
|
||||
// StreamSubscription? _wxPayStream;
|
||||
|
||||
// void wxPayAddListener(
|
||||
// {required VoidCallback paySuccess,
|
||||
// Function(BaseWeChatResponse)? payError}) {
|
||||
// _wxPayStream = weChatResponseEventHandler.listen((event) {
|
||||
// if (kDebugMode) {
|
||||
// print('errorCode:${event.errCode} errorStr:${event.errStr}');
|
||||
// }
|
||||
// if (event.errCode == 0) {
|
||||
// paySuccess();
|
||||
// } else {
|
||||
// LoggerData.addData(
|
||||
// 'errorCode:${event.errCode} errorStr:${event.errStr ?? '支付失败'}');
|
||||
// CloudToast.show(event.errStr ?? '支付失败');
|
||||
// if (payError != null) payError(event);
|
||||
// //payError == null ? null : payError(event);
|
||||
// }
|
||||
// });
|
||||
// }
|
||||
|
||||
// void removeWxPayListener() {
|
||||
// _wxPayStream?.cancel();
|
||||
// }
|
||||
|
||||
// Future callWxPay({
|
||||
// required WxPayModel payModel,
|
||||
// }) async {
|
||||
// await payWithWeChat(
|
||||
// appId: 'wx9bc3ffb23a749254',
|
||||
// partnerId: payModel.partnerId,
|
||||
// prepayId: payModel.prepayId,
|
||||
// packageValue: payModel.package,
|
||||
// nonceStr: payModel.nonceStr,
|
||||
// timeStamp: int.parse(payModel.timeStamp),
|
||||
// sign: payModel.sign);
|
||||
// }
|
||||
// }
|
||||
import 'dart:async';
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:bot_toast/bot_toast.dart';
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:fluwx/fluwx.dart';
|
||||
import 'package:power_logger/power_logger.dart';
|
||||
import 'package:project_telephony/utils/toast/cloud_toast.dart';
|
||||
import 'package:tobias/tobias.dart';
|
||||
|
||||
import '../model/network/api_client.dart';
|
||||
import '../model/pay/pay_model.dart';
|
||||
import '../model/pay/wx_pay_model.dart';
|
||||
|
||||
enum PAYTYPE {
|
||||
///支付宝
|
||||
ali,
|
||||
|
||||
///微信
|
||||
wx,
|
||||
|
||||
///现金
|
||||
cash,
|
||||
|
||||
///pos
|
||||
pos
|
||||
}
|
||||
|
||||
class PayUtil {
|
||||
static final PayUtil _instance = PayUtil._();
|
||||
|
||||
factory PayUtil() => _instance;
|
||||
|
||||
PayUtil._();
|
||||
|
||||
void resultSatus(String status) {
|
||||
switch (status) {
|
||||
case '8000':
|
||||
BotToast.showText(text: '正在处理中');
|
||||
break;
|
||||
case '4000':
|
||||
BotToast.showText(text: '订单支付失败');
|
||||
break;
|
||||
case '5000':
|
||||
BotToast.showText(text: '重复请求');
|
||||
break;
|
||||
case '6001':
|
||||
BotToast.showText(text: ' 用户中途取消');
|
||||
break;
|
||||
case '6002':
|
||||
BotToast.showText(text: '网络连接出错');
|
||||
break;
|
||||
case '6004':
|
||||
BotToast.showText(text: '支付结果未知,请查询商户订单列表中订单的支付状态');
|
||||
break;
|
||||
default:
|
||||
BotToast.showText(text: '其他支付错误');
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
String _resultStatus = '';
|
||||
|
||||
///支付宝支付
|
||||
///传入订单信息和确认订单请求地址
|
||||
Future<bool> callAliPay(String order, {String? apiPath}) async {
|
||||
var install = await isAliPayInstalled();
|
||||
if (!install) {
|
||||
BotToast.showText(text: '未安装支付宝!');
|
||||
return false;
|
||||
}
|
||||
Map<dynamic, dynamic> result = {};
|
||||
try {
|
||||
result = await aliPay(order);
|
||||
} catch (e) {
|
||||
if (kDebugMode) {
|
||||
print(e.toString());
|
||||
}
|
||||
}
|
||||
_resultStatus = result['resultStatus'];
|
||||
if (_resultStatus == '9000') {
|
||||
String res = result['result'];
|
||||
PayModel model = PayModel.fromJson(jsonDecode(res));
|
||||
if (apiPath != null) {
|
||||
bool confirmResult = await _confirmPayResult(
|
||||
apiPath, model.aliPayTradeAppPayResponse.outTradeNo);
|
||||
return confirmResult;
|
||||
} else {
|
||||
CloudToast.show('支付成功');
|
||||
return true;
|
||||
}
|
||||
} else {
|
||||
resultSatus(_resultStatus);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
Future<bool> _confirmPayResult(String path, String code) async {
|
||||
try {
|
||||
int status = 0;
|
||||
for (var i = 0; i < 3; i++) {
|
||||
await Future.delayed(const Duration(milliseconds: 1000), () async {
|
||||
Response response = await apiClient.dio.get(path, queryParameters: {
|
||||
"code": code,
|
||||
});
|
||||
status = response.data['status'] as int;
|
||||
});
|
||||
if (status == 2) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (status == 2) {
|
||||
BotToast.showText(text: '交易成功');
|
||||
return true;
|
||||
} else {
|
||||
BotToast.showText(text: '交易失败 错误码$status');
|
||||
return false;
|
||||
}
|
||||
} catch (e) {
|
||||
BotToast.showText(text: '网络请求错误');
|
||||
LoggerData.addData(e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
///微信支付
|
||||
|
||||
StreamSubscription? _wxPayStream;
|
||||
|
||||
void wxPayAddListener(
|
||||
{required VoidCallback paySuccess,
|
||||
Function(BaseWeChatResponse)? payError}) {
|
||||
_wxPayStream = weChatResponseEventHandler.listen((event) {
|
||||
if (kDebugMode) {
|
||||
print('errorCode:${event.errCode} errorStr:${event.errStr}');
|
||||
}
|
||||
if (event.errCode == 0) {
|
||||
paySuccess();
|
||||
} else {
|
||||
LoggerData.addData(
|
||||
'errorCode:${event.errCode} errorStr:${event.errStr ?? '支付失败'}');
|
||||
CloudToast.show(event.errStr ?? '支付失败');
|
||||
if (payError != null) payError(event);
|
||||
//payError == null ? null : payError(event);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
void removeWxPayListener() {
|
||||
_wxPayStream?.cancel();
|
||||
}
|
||||
|
||||
Future callWxPay({
|
||||
required WxPayModel payModel,
|
||||
}) async {
|
||||
await payWithWeChat(
|
||||
appId: 'wx9bc3ffb23a749254',
|
||||
partnerId: payModel.partnerId,
|
||||
prepayId: payModel.prepayId,
|
||||
packageValue: payModel.package,
|
||||
nonceStr: payModel.nonceStr,
|
||||
timeStamp: int.parse(payModel.timeStamp),
|
||||
sign: payModel.sign);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in new issue