Files
juip-web/src/api/shuidi.ts
2026-10-19 14:32:07 +08:00

114 lines
3.1 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import type { ApiResponse } from "@/lib/api"
import type {
ShuidiGame,
ShuidiOrderInfo,
ShuidiOrderResult,
ShuidiPackageList,
ShuidiRegion,
} from "@/lib/models/shuidi"
import { phpFetch, phpPost } from "./http"
// ==================== 水滴静态/固态(jinyou) ====================
// - 游戏列表:POST /jinyou/api/gameList(不带 cookie)
// - 套餐列表:POST /jinyou/Jinyoujt/getPackage?type=1(1:静态 2:固态),需带 cookie
// - 线路列表:GET /jinyou/api/regionSurplusOuts?product_id=&is_unshar=&game_id=(不带 cookie)
type JinyouResult<T> = {
code: number
msg?: string
data?: T
}
export async function fetchShuidiGameList(): Promise<
ApiResponse<ShuidiGame[]>
> {
const res = await phpFetch<JinyouResult<ShuidiGame[]>>(
"POST",
"/jinyou/api/gameList",
)
if (!res.success) return res
const data = res.data?.data
return {
success: true,
data: Array.isArray(data) ? data : [],
}
}
export async function fetchShuidiPackages(
type: 1 | 2 = 1,
): Promise<ApiResponse<ShuidiPackageList>> {
const res = await phpPost<JinyouResult<ShuidiPackageList>>(
`/jinyou/Jinyoujt/getPackage?type=${type}`,
{ cookie: document.cookie },
)
if (!res.success) return res
const data = res.data?.data
if (!data || typeof data !== "object") {
return { success: true, data: { game: {}, line: {} } }
}
return {
success: true,
data: {
game: data.game ?? {},
line: data.line ?? {},
},
}
}
export async function fetchShuidiRegions(params: {
product_id: number
is_unshar: 0 | 1
game_id: number | ""
}): Promise<ApiResponse<ShuidiRegion>> {
const query = new URLSearchParams({
product_id: String(params.product_id),
is_unshar: String(params.is_unshar),
game_id: String(params.game_id),
})
// 余量数据时效性强,禁止浏览器缓存
const res = await phpFetch<JinyouResult<{ region?: ShuidiRegion }>>(
"GET",
`/jinyou/api/regionSurplusOuts?${query.toString()}`,
undefined,
{ cache: "no-store" },
)
if (!res.success) return res
const region = res.data?.data?.region
if (!region || typeof region !== "object") {
return {
success: true,
data: { province_surplus_outs: {} },
}
}
return {
success: true,
data: {
surplus_out_total: region.surplus_out_total,
province_surplus_outs: region.province_surplus_outs ?? {},
},
}
}
// ==================== 下单 ====================
// 与 juipnet Index.cshtml pay() 一致:body 为 { cookie, order_info }
// code 1-开通成功 2-返回支付宝支付主体 3-返回微信支付主体 -1-错误
export async function createShuidiOrder(
orderInfo: ShuidiOrderInfo,
): Promise<ApiResponse<ShuidiOrderResult>> {
const res = await phpPost<Record<string, unknown>>(
"/jinyou/jinyoujt/create_order",
{ cookie: document.cookie, order_info: orderInfo },
)
if (!res.success) return res
const raw = res.data ?? {}
return {
success: true,
data: {
code: Number(raw.code) || 0,
msg: typeof raw.msg === "string" ? raw.msg : undefined,
data: typeof raw.data === "string" ? raw.data : undefined,
},
}
}