XSeri/XSeri/Base/Networking/API/XSStoreAPI.swift
2026-03-17 17:07:31 +08:00

132 lines
4.4 KiB
Swift

//
// XSStoreAPI.swift
// XSeri
//
// Created by 鸿 on 2026/3/17.
//
import UIKit
import SmartCodable
import JXIAPManager
struct XSStoreAPI {
enum BuyType: String, SmartCaseDefaultable {
case coins = "coins"
case subVip = "sub_vip"
case subCoins = "sub_coins"
case vip = "vip"
}
///
static func requestCreateOrder(payId: String, shortPlayId: String, videoId: String, isDiscount: Bool = false, identifierDiscount: String? = nil) async -> XSIapOrderModel? {
let parameters: [String : Any] = [
"payment_channel" : "apple",
"short_play_id" : shortPlayId,
"video_id" : videoId,
"pay_setting_id" : payId,
"is_discount" : isDiscount ? 1 : 0,
"product_discount" : identifierDiscount ?? "",
]
var param = XSNetwork.Parameters(path: "/createOrder")
param.method = .post
param.isLoding = false
param.isToast = false
param.parameters = parameters
let response: XSNetwork.Response<XSIapOrderModel> = await XSNetwork.request(parameters: param)
guard let data = response.data else {
XSToast.show("network_error_2".localized)
return nil
}
if let message = data.message, message.count > 0 {
if response.data?.code == 30007 {
XSToast.show("pay_error_1".localized)
} else {
XSToast.show(message)
}
return nil
} else {
return response.data
}
}
///
static func requestVerifyOrder(_ parameters: [String : Any]) async -> XSNetwork.Response<XSIapVerifyModel> {
var param = XSNetwork.Parameters(path: "/applePaid")
param.method = .post
param.isLoding = false
param.parameters = parameters
let response: XSNetwork.Response<XSIapVerifyModel> = await XSNetwork.request(parameters: param)
return response
}
///
static func requestPayTemplate(isLoding: Bool = false, isToast: Bool = true) async -> XSPayDateModel? {
let parameters = [
"discount" : "1",
"purchases_token" : JXIAPManager.manager.getAppStoreReceipt() ?? "",
]
var param = XSNetwork.Parameters(path: "/paySettingsV4")
param.method = .post
param.isLoding = isLoding
param.isToast = isToast
param.parameters = parameters
let response: XSNetwork.Response<XSPayDateModel> = await XSNetwork.request(parameters: param)
return response.data
}
///
static func requestPayRetainInfo() async -> XSPayDateModel? {
let parameters = [
"purchases_token" : JXIAPManager.manager.getAppStoreReceipt() ?? "",
"discount" : "1",
]
var param = XSNetwork.Parameters(path: "/payRetrieveSettings")
param.method = .post
param.isLoding = false
param.isToast = false
param.parameters = parameters
let response: XSNetwork.Response<XSPayDateModel> = await XSNetwork.request(parameters: param)
if (response.data?.list_coins?.count ?? 0) > 0 || (response.data?.list_sub_vip?.count ?? 0) > 0 {
return response.data
} else {
return nil
}
}
static func requestBuyRecords(page: Int) async -> XSNetwork.List<XSBuyRecordsModel>? {
let parameters = [
"page_size" : 20,
"current_page" : page,
]
var param = XSNetwork.Parameters(path: "/getCustomerBuyRecords")
param.method = .get
param.parameters = parameters
let response: XSNetwork.Response<XSNetwork.List<XSBuyRecordsModel>> = await XSNetwork.request(parameters: param)
return response.data
}
static func reuqestSendCoinRecord(page: Int) async -> XSNetwork.List<XSSendCoinRecordModel>? {
let parameters = [
"page_size" : 20,
"current_page" : page,
]
var param = XSNetwork.Parameters(path: "/sendCoinList")
param.method = .post
param.parameters = parameters
let response: XSNetwork.Response<XSNetwork.List<XSSendCoinRecordModel>> = await XSNetwork.request(parameters: param)
return response.data
}
}