初始化提交
This commit is contained in:
Executable
+95
@@ -0,0 +1,95 @@
|
||||
/// 接口名称
|
||||
abstract class Api {
|
||||
/// 游客登录查看是否已经注册
|
||||
static const String kr_isRegister = "/v1/app/auth/check";
|
||||
|
||||
/// 注册1024
|
||||
static const String kr_register = "/v1/app/auth/register";
|
||||
|
||||
/// 验证验证码
|
||||
static const String kr_checkVerificationCode =
|
||||
"/v1/common/check_verification_code";
|
||||
|
||||
/// 发送手机验证码
|
||||
static const String kr_sendPhoneCode = "/v1/common/send_sms_code";
|
||||
|
||||
/// 发送邮箱验证码
|
||||
static const String kr_sendEmailCode = "/v1/common/send_code";
|
||||
|
||||
/// 登录接口
|
||||
static const String kr_login = "/v1/app/auth/login";
|
||||
|
||||
/// 删除账号
|
||||
static const String kr_deleteAccount = "/v1/app/user/account";
|
||||
|
||||
/// 忘记密码-设置新密码
|
||||
static const String kr_setNewPsdByForgetPsd = "/v1/app/auth/reset_password";
|
||||
|
||||
/// 节点信息
|
||||
static const String kr_nodeList = "/v1/app/node/list";
|
||||
|
||||
/// 获取用户订阅流量日志
|
||||
static const String kr_nodeGroupList = "/v1/app/node/rule_group_list";
|
||||
|
||||
/// 预下单
|
||||
static const String kr_preOrder = "/v1/app/order/pre";
|
||||
|
||||
/// 获取下单zf方式
|
||||
static const String kr_getPaymentMethods = "/v1/app/payment/methods";
|
||||
|
||||
/// 进行下单
|
||||
static const String kr_purchase = "/v1/app/order/purchase";
|
||||
|
||||
/// 获取支付地址,跳转到付款地址
|
||||
static const String kr_checkout = "/v1/app/order/checkout";
|
||||
|
||||
/// 获取可购买套餐
|
||||
static const String kr_getPackageList = "/v1/app/subscribe/list";
|
||||
|
||||
/// 获取用户已订阅套餐
|
||||
static const String kr_getAlreadySubscribe =
|
||||
"/v1/app/subscribe/user/already_subscribe";
|
||||
|
||||
/// 获取用户可用订阅
|
||||
static const String kr_userAvailableSubscribe =
|
||||
"/v1/app/subscribe/user/available_subscribe";
|
||||
|
||||
/// 续费
|
||||
static const String kr_renewal = "/v1/app/order/renewal";
|
||||
|
||||
/// 获取用户订阅流量日志
|
||||
/// 通过该接口判断订单状态
|
||||
static const String kr_orderDetail = "/v1/app/order/detail";
|
||||
|
||||
/// 获取消息列表
|
||||
static const String kr_getMessageList = "/v1/app/announcement/list";
|
||||
|
||||
/// 获取邀请数据
|
||||
// static const String kr_getInviteData = "/v1/public/invite/code";
|
||||
|
||||
/// 配置信息
|
||||
static const String kr_config = "/v1/app/auth/config";
|
||||
|
||||
/// 获取用户信息
|
||||
static const String kr_getUserInfo = "/v1/app/user/info";
|
||||
|
||||
/// 获取用户在线时长统计
|
||||
static const String kr_getUserOnlineTimeStatistics =
|
||||
"/v1/app/user/online_time/statistics";
|
||||
|
||||
/// 获取用户邀请人数
|
||||
static const String kr_getAffiliateCount = "/v1/public/user/affiliate/count";
|
||||
|
||||
/// 获取站点协议
|
||||
static const String kr_getSiteTos = "/v1/common/site/tos";
|
||||
|
||||
/// 隐私政策
|
||||
static const String kr_getSitePrivacy = "/v1/common/site/privacy";
|
||||
|
||||
/// 获取网页文本内容
|
||||
static const String kr_getWebText = "/v1/common/site/text";
|
||||
|
||||
/// 重置订阅周期
|
||||
static const String kr_resetSubscribePeriod =
|
||||
"/v1/app/subscribe/reset/period";
|
||||
}
|
||||
+135
@@ -0,0 +1,135 @@
|
||||
import 'package:fpdart/fpdart.dart';
|
||||
import 'package:kaer_with_panels/app/utils/kr_log_util.dart';
|
||||
import 'dart:io' show Platform;
|
||||
|
||||
import '../../model/response/kr_config_data.dart';
|
||||
import '../../model/response/kr_kr_affiliate_count.dart';
|
||||
import '../../model/response/kr_message_list.dart';
|
||||
import '../../model/response/kr_user_info.dart';
|
||||
import '../../model/response/kr_user_online_duration.dart';
|
||||
import '../../model/response/kr_web_text.dart';
|
||||
import '../../network/base_response.dart';
|
||||
import '../../network/http_error.dart';
|
||||
import '../../network/http_util.dart';
|
||||
import 'api.dart';
|
||||
|
||||
class KRUserApi {
|
||||
// 创建一个单例实例
|
||||
static final KRUserApi _instance = KRUserApi._internal();
|
||||
factory KRUserApi() => _instance;
|
||||
|
||||
// 私有构造函数
|
||||
KRUserApi._internal();
|
||||
|
||||
/// 获取当前系统的 user_agent
|
||||
String _kr_getUserAgent() {
|
||||
if (Platform.isAndroid) {
|
||||
return 'android';
|
||||
} else if (Platform.isIOS) {
|
||||
return 'ios';
|
||||
} else if (Platform.isMacOS) {
|
||||
return 'mac';
|
||||
} else if (Platform.isWindows) {
|
||||
return 'windows';
|
||||
} else if (Platform.isLinux) {
|
||||
return 'linux';
|
||||
} else if (Platform.isFuchsia) {
|
||||
return 'harmony';
|
||||
} else {
|
||||
return 'unknown';
|
||||
}
|
||||
}
|
||||
|
||||
Future<Either<HttpError, KRMessageList>> kr_getMessageList(
|
||||
int page, int size, {bool? popup}) async {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
data['page'] = page;
|
||||
data['size'] = size;
|
||||
if (popup != null) {
|
||||
data['popup'] = popup;
|
||||
}
|
||||
BaseResponse<dynamic> baseResponse =
|
||||
await HttpUtil.getInstance().request<KRMessageList>(
|
||||
Api.kr_getMessageList,
|
||||
data,
|
||||
method: HttpMethod.GET,
|
||||
isShowLoading: false,
|
||||
);
|
||||
if (!baseResponse.isSuccess) {
|
||||
return left(
|
||||
HttpError(msg: baseResponse.retMsg, code: baseResponse.retCode));
|
||||
}
|
||||
|
||||
return right(baseResponse.model);
|
||||
}
|
||||
|
||||
|
||||
Future<Either<HttpError, KRUserOnlineDurationResponse>> kr_getUserOnlineTimeStatistics(
|
||||
) async {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
|
||||
BaseResponse<KRUserOnlineDurationResponse> baseResponse =
|
||||
await HttpUtil.getInstance().request<KRUserOnlineDurationResponse>(
|
||||
Api.kr_getUserOnlineTimeStatistics,
|
||||
data,
|
||||
method: HttpMethod.GET,
|
||||
isShowLoading: false,
|
||||
);
|
||||
KRLogUtil.kr_i('获取用户在线时长统计: ${baseResponse.model}');
|
||||
if (!baseResponse.isSuccess) {
|
||||
return left(
|
||||
HttpError(msg: baseResponse.retMsg, code: baseResponse.retCode));
|
||||
}
|
||||
return right(baseResponse.model);
|
||||
}
|
||||
|
||||
Future<Either<HttpError, KRUserInfo>> kr_getUserInfo() async {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
BaseResponse<KRUserInfo> baseResponse =
|
||||
await HttpUtil.getInstance().request<KRUserInfo>(
|
||||
Api.kr_getUserInfo,
|
||||
data,
|
||||
method: HttpMethod.GET,
|
||||
isShowLoading: false,
|
||||
);
|
||||
if (!baseResponse.isSuccess) {
|
||||
return left(
|
||||
HttpError(msg: baseResponse.retMsg, code: baseResponse.retCode));
|
||||
}
|
||||
return right(baseResponse.model);
|
||||
}
|
||||
|
||||
Future<Either<HttpError, KRAffiliateCount>> kr_getAffiliateCount() async {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
BaseResponse<dynamic> baseResponse =
|
||||
await HttpUtil.getInstance().request<KRAffiliateCount>(
|
||||
Api.kr_getAffiliateCount,
|
||||
data,
|
||||
method: HttpMethod.GET,
|
||||
isShowLoading: false,
|
||||
);
|
||||
if (!baseResponse.isSuccess) {
|
||||
return left(
|
||||
HttpError(msg: baseResponse.retMsg, code: baseResponse.retCode));
|
||||
}
|
||||
return right(baseResponse.model);
|
||||
}
|
||||
|
||||
Future<Either<HttpError, KRConfigData>> kr_config() async {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
data['user_agent'] = _kr_getUserAgent();
|
||||
BaseResponse<KRConfigData> baseResponse =
|
||||
await HttpUtil.getInstance().request<KRConfigData>(
|
||||
Api.kr_config,
|
||||
data,
|
||||
method: HttpMethod.POST,
|
||||
isShowLoading: false,
|
||||
);
|
||||
if (!baseResponse.isSuccess) {
|
||||
return left(
|
||||
HttpError(msg: baseResponse.retMsg, code: baseResponse.retCode));
|
||||
}
|
||||
return right(baseResponse.model);
|
||||
}
|
||||
|
||||
}
|
||||
+241
@@ -0,0 +1,241 @@
|
||||
import 'dart:io';
|
||||
import 'dart:math';
|
||||
|
||||
import 'package:fpdart/fpdart.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:kaer_with_panels/app/mixins/kr_app_bar_opacity_mixin.dart';
|
||||
import 'package:kaer_with_panels/app/services/api_service/api.dart';
|
||||
import 'package:kaer_with_panels/app/model/enum/kr_request_type.dart';
|
||||
import 'package:kaer_with_panels/app/model/response/kr_is_register.dart';
|
||||
import 'package:kaer_with_panels/app/model/response/kr_login_data.dart';
|
||||
import 'package:kaer_with_panels/app/network/base_response.dart';
|
||||
import 'package:kaer_with_panels/app/network/http_error.dart';
|
||||
import 'package:kaer_with_panels/app/network/http_util.dart';
|
||||
import 'package:kaer_with_panels/app/utils/kr_device_util.dart';
|
||||
|
||||
import '../../utils/kr_common_util.dart';
|
||||
import '../../utils/kr_log_util.dart';
|
||||
|
||||
class KRAuthApi {
|
||||
/// 是否开启了审核开关
|
||||
Future<Either<HttpError, bool>> kr_isRegister(
|
||||
KRLoginType tpye, String account, String? areaCode) async {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
data['method'] = tpye.value;
|
||||
data['account'] = account;
|
||||
|
||||
final deviceId = await KRDeviceUtil().kr_getDeviceId();
|
||||
KRLogUtil.kr_i('设备ID: $deviceId', tag: 'KRAuthApi');
|
||||
data["identifier"] = deviceId;
|
||||
|
||||
data["user_agent"] = _kr_getUserAgent();
|
||||
data["os"] = _kr_getUserAgent();
|
||||
if (areaCode != null) {
|
||||
data['area_code'] = areaCode.toString();
|
||||
}
|
||||
|
||||
BaseResponse<KRIsRegister> baseResponse = await HttpUtil.getInstance()
|
||||
.request<KRIsRegister>(Api.kr_isRegister, data,
|
||||
method: HttpMethod.POST, isShowLoading: true);
|
||||
|
||||
if (!baseResponse.isSuccess) {
|
||||
return left(
|
||||
HttpError(msg: baseResponse.retMsg, code: baseResponse.retCode));
|
||||
}
|
||||
|
||||
return right(baseResponse.model.kr_isRegister);
|
||||
}
|
||||
|
||||
/// 注册
|
||||
Future<Either<HttpError, String>> kr_register(
|
||||
KRLoginType tpye,
|
||||
String account,
|
||||
String? areaCode,
|
||||
String? code,
|
||||
String? password,
|
||||
{String? inviteCode}) async {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
data['method'] = tpye.value;
|
||||
data['account'] = account;
|
||||
data['password'] = password;
|
||||
data["code"] = code;
|
||||
data["identifier"] = await KRDeviceUtil().kr_getDeviceId();
|
||||
data["os"] = _kr_getUserAgent();
|
||||
|
||||
if (inviteCode != null && inviteCode.isNotEmpty) {
|
||||
data["invite"] = inviteCode;
|
||||
}
|
||||
data["user_agent"] = _kr_getUserAgent();
|
||||
if (tpye == KRLoginType.kr_telephone) {
|
||||
data['area_code'] = areaCode;
|
||||
}
|
||||
|
||||
BaseResponse<KRLoginData> baseResponse = await HttpUtil.getInstance()
|
||||
.request<KRLoginData>(Api.kr_register, data,
|
||||
method: HttpMethod.POST, isShowLoading: true);
|
||||
if (!baseResponse.isSuccess) {
|
||||
return left(
|
||||
HttpError(msg: baseResponse.retMsg, code: baseResponse.retCode));
|
||||
}
|
||||
|
||||
return right(baseResponse.model.kr_token.toString());
|
||||
}
|
||||
|
||||
/// 验证验证码
|
||||
Future<Either<HttpError, bool>> kr_checkVerificationCode( KRLoginType tpye,
|
||||
String account, String? areaCode, String code, int type) async {
|
||||
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
data['method'] = tpye.value;
|
||||
if(tpye == KRLoginType.kr_telephone){
|
||||
data['account'] = areaCode.toString() + account;
|
||||
|
||||
}else{
|
||||
data['account'] = account;
|
||||
}
|
||||
data['code'] = code;
|
||||
data['type'] = type;
|
||||
BaseResponse<KRIsRegister> baseResponse = await HttpUtil.getInstance()
|
||||
.request<KRIsRegister>(Api.kr_checkVerificationCode, data,
|
||||
method: HttpMethod.POST, isShowLoading: true);
|
||||
if (!baseResponse.isSuccess) {
|
||||
return left(
|
||||
HttpError(msg: baseResponse.retMsg, code: baseResponse.retCode));
|
||||
}
|
||||
if(baseResponse.model.kr_isRegister){
|
||||
return right(true);
|
||||
}else{
|
||||
return left(HttpError(msg: "error.70001".tr, code: 70001));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
/// 登陆
|
||||
Future<Either<HttpError, String>> kr_login(KRLoginType tpye, bool isPsd,
|
||||
String account, String? areaCode, String? code, String? password) async {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
data['method'] = tpye.value;
|
||||
data['account'] = account;
|
||||
|
||||
|
||||
final deviceId = await KRDeviceUtil().kr_getDeviceId();
|
||||
KRLogUtil.kr_i('设备ID: $deviceId', tag: 'KRAuthApi');
|
||||
data["identifier"] = deviceId;
|
||||
data["user_agent"] = _kr_getUserAgent();
|
||||
data["os"] = _kr_getUserAgent();
|
||||
if (tpye == KRLoginType.kr_telephone) {
|
||||
data['area_code'] = areaCode;
|
||||
}
|
||||
|
||||
if (isPsd) {
|
||||
data['password'] = password;
|
||||
} else {
|
||||
data["code"] = code;
|
||||
}
|
||||
|
||||
BaseResponse<KRLoginData> baseResponse = await HttpUtil.getInstance()
|
||||
.request<KRLoginData>(Api.kr_login, data,
|
||||
method: HttpMethod.POST, isShowLoading: true);
|
||||
if (!baseResponse.isSuccess) {
|
||||
return left(
|
||||
HttpError(msg: baseResponse.retMsg, code: baseResponse.retCode));
|
||||
}
|
||||
|
||||
return right(baseResponse.model.kr_token.toString());
|
||||
}
|
||||
|
||||
/// 发送验证码 type 1 注册 其他 2
|
||||
Future<Either<HttpError, bool>> kr_sendCode(
|
||||
KRLoginType tpye, String account, String? areaCode, int type) async {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
|
||||
if (tpye == KRLoginType.kr_email) {
|
||||
data['email'] = account;
|
||||
} else {
|
||||
data['telephone'] = account;
|
||||
data['telephone_area_code'] = areaCode.toString();
|
||||
}
|
||||
data['type'] = type;
|
||||
BaseResponse<dynamic> baseResponse = await HttpUtil.getInstance()
|
||||
.request<dynamic>(
|
||||
tpye == KRLoginType.kr_email
|
||||
? Api.kr_sendEmailCode
|
||||
: Api.kr_sendPhoneCode,
|
||||
data,
|
||||
method: HttpMethod.POST,
|
||||
isShowLoading: true);
|
||||
if (!baseResponse.isSuccess) {
|
||||
return left(
|
||||
HttpError(msg: baseResponse.retMsg, code: baseResponse.retCode));
|
||||
}
|
||||
|
||||
// KRCommonUtil.kr_showToast(baseResponse.model.toString());
|
||||
// KRIsRegister model = (baseResponse..model) as KRIsRegister;
|
||||
return right(true);
|
||||
}
|
||||
|
||||
/// 删除账号
|
||||
Future<Either<HttpError, String>> kr_deleteAccount(KRLoginType tpye,
|
||||
String code) async {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
data['method'] = tpye.value;
|
||||
|
||||
data['code'] = code;
|
||||
|
||||
BaseResponse<dynamic> baseResponse = await HttpUtil.getInstance()
|
||||
.request<dynamic>(Api.kr_deleteAccount, data,
|
||||
method: HttpMethod.DELETE, isShowLoading: true);
|
||||
if (!baseResponse.isSuccess) {
|
||||
return left(
|
||||
HttpError(msg: baseResponse.retMsg, code: baseResponse.retCode));
|
||||
}
|
||||
|
||||
return right("");
|
||||
|
||||
}
|
||||
|
||||
/// 忘记密码-设置新密码
|
||||
Future<Either<HttpError, String>> kr_setNewPsdByForgetPsd(KRLoginType tpye,
|
||||
String account, String? areaCode, String? code, String? password) async {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
data['method'] = tpye.value;
|
||||
data['account'] = account;
|
||||
data['password'] = password;
|
||||
data["code"] = code;
|
||||
data["identifier"] = await KRDeviceUtil().kr_getDeviceId();
|
||||
data["user_agent"] = _kr_getUserAgent();
|
||||
data["os"] = _kr_getUserAgent();
|
||||
if (tpye == KRLoginType.kr_telephone) {
|
||||
data['area_code'] = areaCode;
|
||||
}
|
||||
|
||||
BaseResponse<KRLoginData> baseResponse = await HttpUtil.getInstance()
|
||||
.request<KRLoginData>(Api.kr_setNewPsdByForgetPsd, data,
|
||||
method: HttpMethod.POST, isShowLoading: true);
|
||||
if (!baseResponse.isSuccess) {
|
||||
return left(
|
||||
HttpError(msg: baseResponse.retMsg, code: baseResponse.retCode));
|
||||
}
|
||||
|
||||
return right(baseResponse.model.kr_token.toString());
|
||||
}
|
||||
|
||||
String _kr_getUserAgent() {
|
||||
if (Platform.isAndroid) {
|
||||
return 'android';
|
||||
} else if (Platform.isIOS) {
|
||||
return 'ios';
|
||||
} else if (Platform.isMacOS) {
|
||||
return 'mac';
|
||||
} else if (Platform.isWindows) {
|
||||
return 'windows';
|
||||
} else if (Platform.isLinux) {
|
||||
return 'linux';
|
||||
} else if (Platform.isFuchsia) {
|
||||
return 'harmony';
|
||||
} else {
|
||||
return 'unknown';
|
||||
}
|
||||
}
|
||||
}
|
||||
+274
@@ -0,0 +1,274 @@
|
||||
import 'dart:ffi';
|
||||
|
||||
import 'package:fpdart/fpdart.dart';
|
||||
import 'package:kaer_with_panels/app/common/app_config.dart';
|
||||
import 'package:kaer_with_panels/app/services/api_service/api.dart';
|
||||
import 'package:kaer_with_panels/app/model/response/kr_login_data.dart';
|
||||
import 'package:kaer_with_panels/app/model/response/kr_node_list.dart';
|
||||
import 'package:kaer_with_panels/app/model/response/kr_package_list.dart';
|
||||
import 'package:kaer_with_panels/app/network/base_response.dart';
|
||||
import 'package:kaer_with_panels/app/network/http_error.dart';
|
||||
import 'package:kaer_with_panels/app/network/http_util.dart';
|
||||
|
||||
import '../../model/response/kr_already_subscribe.dart';
|
||||
import '../../model/response/kr_node_group_list.dart';
|
||||
import '../../model/response/kr_order_status.dart';
|
||||
import '../../model/response/kr_payment_methods.dart';
|
||||
import '../../model/response/kr_purchase_order_no.dart';
|
||||
import '../../model/response/kr_status.dart';
|
||||
import '../../model/response/kr_user_available_subscribe.dart';
|
||||
|
||||
/// 订阅相关
|
||||
class KRSubscribeApi {
|
||||
/// 获取可购买套餐
|
||||
Future<Either<HttpError, KRPackageList>> kr_getPackageListList() async {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
|
||||
BaseResponse<KRPackageList> baseResponse =
|
||||
await HttpUtil.getInstance().request<KRPackageList>(
|
||||
Api.kr_getPackageList,
|
||||
data,
|
||||
method: HttpMethod.GET,
|
||||
isShowLoading: false,
|
||||
);
|
||||
if (!baseResponse.isSuccess) {
|
||||
return left(
|
||||
HttpError(msg: baseResponse.retMsg, code: baseResponse.retCode));
|
||||
}
|
||||
|
||||
return right(baseResponse.model);
|
||||
}
|
||||
|
||||
/// 获取节点列表
|
||||
Future<Either<HttpError, KRNodeList>> kr_nodeList(int id) async {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
data['id'] = id;
|
||||
BaseResponse<KRNodeList> baseResponse =
|
||||
await HttpUtil.getInstance().request<KRNodeList>(
|
||||
Api.kr_nodeList,
|
||||
data,
|
||||
method: HttpMethod.GET,
|
||||
isShowLoading: false,
|
||||
);
|
||||
if (!baseResponse.isSuccess) {
|
||||
return left(
|
||||
HttpError(msg: baseResponse.retMsg, code: baseResponse.retCode));
|
||||
}
|
||||
|
||||
return right(baseResponse.model);
|
||||
}
|
||||
|
||||
/// 获取用户可用订阅
|
||||
Future<Either<HttpError, List<KRUserAvailableSubscribeItem>>>
|
||||
kr_userAvailableSubscribe({bool containsNodes = false}) async {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
data['contains_nodes'] = containsNodes;
|
||||
|
||||
BaseResponse<KRUserAvailableSubscribeList> baseResponse =
|
||||
await HttpUtil.getInstance().request<KRUserAvailableSubscribeList>(
|
||||
Api.kr_userAvailableSubscribe,
|
||||
data,
|
||||
method: HttpMethod.GET,
|
||||
isShowLoading: false,
|
||||
);
|
||||
if (!baseResponse.isSuccess) {
|
||||
return left(
|
||||
HttpError(msg: baseResponse.retMsg, code: baseResponse.retCode));
|
||||
}
|
||||
|
||||
return right(baseResponse.model.list);
|
||||
}
|
||||
|
||||
/// 获取分组节点
|
||||
Future<Either<HttpError, List<KRNodeGroupListItem>>>
|
||||
kr_nodeGroupList() async {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
|
||||
BaseResponse<KRNodeGroupList> baseResponse =
|
||||
await HttpUtil.getInstance().request<KRNodeGroupList>(
|
||||
Api.kr_nodeGroupList,
|
||||
data,
|
||||
method: HttpMethod.GET,
|
||||
isShowLoading: false,
|
||||
);
|
||||
if (!baseResponse.isSuccess) {
|
||||
return left(
|
||||
HttpError(msg: baseResponse.retMsg, code: baseResponse.retCode));
|
||||
}
|
||||
|
||||
return right(baseResponse.model.list);
|
||||
}
|
||||
|
||||
/// 通过该接口判断订单状态
|
||||
Future<Either<HttpError, KROrderStatus>> kr_orderDetail(
|
||||
String orderId) async {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
data['order_no'] = orderId;
|
||||
|
||||
BaseResponse<KROrderStatus> baseResponse =
|
||||
await HttpUtil.getInstance().request<KROrderStatus>(
|
||||
Api.kr_orderDetail,
|
||||
data,
|
||||
method: HttpMethod.GET,
|
||||
isShowLoading: false,
|
||||
);
|
||||
if (!baseResponse.isSuccess) {
|
||||
return left(
|
||||
HttpError(msg: baseResponse.retMsg, code: baseResponse.retCode));
|
||||
}
|
||||
|
||||
return right(baseResponse.model);
|
||||
}
|
||||
|
||||
/// 获取支付方式
|
||||
Future<Either<HttpError, List<KRPaymentMethod>>>
|
||||
kr_getPaymentMethods() async {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
|
||||
BaseResponse<KRPaymentMethods> baseResponse =
|
||||
await HttpUtil.getInstance().request<KRPaymentMethods>(
|
||||
Api.kr_getPaymentMethods,
|
||||
data,
|
||||
method: HttpMethod.GET,
|
||||
isShowLoading: false,
|
||||
);
|
||||
if (!baseResponse.isSuccess) {
|
||||
return left(
|
||||
HttpError(msg: baseResponse.retMsg, code: baseResponse.retCode));
|
||||
}
|
||||
|
||||
return right(baseResponse.model.list);
|
||||
}
|
||||
|
||||
/// 进行下单
|
||||
Future<Either<HttpError, String>> kr_purchase(
|
||||
int planId, int quantity, int payment, String coupon) async {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
data['subscribe_id'] = planId;
|
||||
data['quantity'] = quantity;
|
||||
data['payment'] = payment;
|
||||
data['coupon'] = "";
|
||||
|
||||
BaseResponse<KRPurchaseOrderNo> baseResponse =
|
||||
await HttpUtil.getInstance().request<KRPurchaseOrderNo>(
|
||||
Api.kr_purchase,
|
||||
data,
|
||||
method: HttpMethod.POST,
|
||||
isShowLoading: true,
|
||||
);
|
||||
if (!baseResponse.isSuccess) {
|
||||
return left(
|
||||
HttpError(msg: baseResponse.retMsg, code: baseResponse.retCode));
|
||||
}
|
||||
|
||||
return right(baseResponse.model.orderNo);
|
||||
}
|
||||
|
||||
/// 续费
|
||||
Future<Either<HttpError, String>> kr_renewal(
|
||||
int planId, int quantity, int payment, String coupon) async {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
data['user_subscribe_id'] = planId;
|
||||
data['quantity'] = quantity;
|
||||
data['payment'] = payment;
|
||||
data['coupon'] = "";
|
||||
|
||||
BaseResponse<KRPurchaseOrderNo> baseResponse =
|
||||
await HttpUtil.getInstance().request<KRPurchaseOrderNo>(
|
||||
Api.kr_renewal,
|
||||
data,
|
||||
method: HttpMethod.POST,
|
||||
isShowLoading: true,
|
||||
);
|
||||
if (!baseResponse.isSuccess) {
|
||||
return left(
|
||||
HttpError(msg: baseResponse.retMsg, code: baseResponse.retCode));
|
||||
}
|
||||
|
||||
return right(baseResponse.model.orderNo);
|
||||
}
|
||||
|
||||
/// 获取用户已订阅套餐
|
||||
Future<Either<HttpError, List<KRAlreadySubscribe>>>
|
||||
kr_getAlreadySubscribe() async {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
|
||||
BaseResponse<KRAlreadySubscribeList> baseResponse =
|
||||
await HttpUtil.getInstance().request<KRAlreadySubscribeList>(
|
||||
Api.kr_getAlreadySubscribe,
|
||||
data,
|
||||
method: HttpMethod.GET,
|
||||
isShowLoading: false,
|
||||
);
|
||||
if (!baseResponse.isSuccess) {
|
||||
return left(
|
||||
HttpError(msg: baseResponse.retMsg, code: baseResponse.retCode));
|
||||
}
|
||||
|
||||
return right(baseResponse.model.list);
|
||||
}
|
||||
|
||||
Future<Either<HttpError, String>> kr_prePurchase(
|
||||
int planId, int quantity, String payment, String coupon) async {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
data['subscribe_id'] = planId;
|
||||
data['quantity'] = quantity;
|
||||
data['payment'] = payment;
|
||||
data['coupon'] = "";
|
||||
|
||||
BaseResponse<KRPurchaseOrderNo> baseResponse =
|
||||
await HttpUtil.getInstance().request<KRPurchaseOrderNo>(
|
||||
Api.kr_preOrder,
|
||||
data,
|
||||
method: HttpMethod.POST,
|
||||
isShowLoading: true,
|
||||
);
|
||||
if (!baseResponse.isSuccess) {
|
||||
return left(
|
||||
HttpError(msg: baseResponse.retMsg, code: baseResponse.retCode));
|
||||
}
|
||||
|
||||
return right(baseResponse.model.orderNo);
|
||||
}
|
||||
|
||||
/// 获取支付地址,跳转到付款地址
|
||||
Future<Either<HttpError, String>> kr_checkout(String orderId) async {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
data['orderNo'] = orderId;
|
||||
data['returnUrl'] = AppConfig.getInstance().baseUrl;
|
||||
|
||||
BaseResponse<KRPurchaseOrderUrl> baseResponse =
|
||||
await HttpUtil.getInstance().request<KRPurchaseOrderUrl>(
|
||||
Api.kr_checkout,
|
||||
data,
|
||||
method: HttpMethod.POST,
|
||||
isShowLoading: true,
|
||||
);
|
||||
if (!baseResponse.isSuccess) {
|
||||
return left(
|
||||
HttpError(msg: baseResponse.retMsg, code: baseResponse.retCode));
|
||||
}
|
||||
|
||||
return right(baseResponse.model.url);
|
||||
}
|
||||
|
||||
/// 重置订阅周期
|
||||
Future<Either<HttpError, bool>> kr_resetSubscribePeriod(
|
||||
int userSubscribeId) async {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
data['user_subscribe_id'] = userSubscribeId;
|
||||
BaseResponse<KRStatus> baseResponse =
|
||||
await HttpUtil.getInstance().request<KRStatus>(
|
||||
Api.kr_resetSubscribePeriod,
|
||||
data,
|
||||
method: HttpMethod.POST,
|
||||
isShowLoading: true,
|
||||
);
|
||||
if (!baseResponse.isSuccess) {
|
||||
return left(
|
||||
HttpError(msg: baseResponse.retMsg, code: baseResponse.retCode));
|
||||
}
|
||||
|
||||
return right(baseResponse.model.kr_bl);
|
||||
}
|
||||
}
|
||||
Executable
+56
@@ -0,0 +1,56 @@
|
||||
import 'package:fpdart/fpdart.dart';
|
||||
import 'package:kaer_with_panels/app/services/api_service/api.dart';
|
||||
import 'package:kaer_with_panels/app/model/response/kr_web_text.dart';
|
||||
import 'package:kaer_with_panels/app/network/base_response.dart';
|
||||
import 'package:kaer_with_panels/app/network/http_error.dart';
|
||||
import 'package:kaer_with_panels/app/network/http_util.dart';
|
||||
import 'package:kaer_with_panels/app/utils/kr_log_util.dart';
|
||||
|
||||
/// 网页相关 API
|
||||
class KRWebApi {
|
||||
/// 获取网页文本内容
|
||||
Future<Either<HttpError, String>> kr_getWebText(String url) async {
|
||||
final Map<String, dynamic> data = <String, dynamic>{};
|
||||
data['url'] = url;
|
||||
|
||||
BaseResponse<KRWebText> baseResponse = await HttpUtil.getInstance().request<KRWebText>(
|
||||
url,
|
||||
data,
|
||||
method: HttpMethod.GET,
|
||||
isShowLoading: false,
|
||||
);
|
||||
|
||||
if (!baseResponse.isSuccess) {
|
||||
return left(HttpError(msg: baseResponse.retMsg, code: baseResponse.retCode));
|
||||
}
|
||||
|
||||
// 根据 URL 返回对应的内容
|
||||
if (url.contains(Api.kr_getSitePrivacy)) {
|
||||
return right(baseResponse.model.privacyPolicy);
|
||||
} else if (url.contains(Api.kr_getSiteTos)) {
|
||||
return right(baseResponse.model.tosContent);
|
||||
} else {
|
||||
return right(baseResponse.model.privacyPolicy); // 默认返回隐私政策
|
||||
}
|
||||
}
|
||||
|
||||
/// 获取网页内容
|
||||
// Future<Either<String, String>> kr_getWebContent() async {
|
||||
// try {
|
||||
// // ... 其他代码 ...
|
||||
// } catch (e) {
|
||||
// KRLogUtil.kr_e('获取网页内容失败: $e', tag: 'WebApi');
|
||||
// return Left('获取网页内容失败: $e');
|
||||
// }
|
||||
// }
|
||||
|
||||
// /// 获取网页内容
|
||||
// Future<Either<String, String>> kr_getWebContentWithRetry() async {
|
||||
// try {
|
||||
// // ... 其他代码 ...
|
||||
// } catch (e) {
|
||||
// KRLogUtil.kr_e('获取网页内容失败: $e', tag: 'WebApi');
|
||||
// return Left('获取网页内容失败: $e');
|
||||
// }
|
||||
// }
|
||||
}
|
||||
Reference in New Issue
Block a user