Files
cozsweet-frontend-nextjs/src/data/services/api/payment_api.ts
T

80 lines
1.8 KiB
TypeScript

/**
* Payment API
*
* 付费墙 / 充值相关接口
*/
import {
CreatePaymentOrderRequest,
CreatePaymentOrderResponse,
PaymentOrderStatusResponse,
PaymentPlansResponse,
TipPaymentPlansResponse,
} from "@/data/schemas/payment";
import { ApiPath } from "./api_path";
import { httpClient } from "./http_client";
import { ApiEnvelope, unwrap } from "./response_helper";
export class PaymentApi {
/**
* 获取套餐列表
*/
async getPlans(): Promise<PaymentPlansResponse> {
const env = await httpClient<ApiEnvelope<unknown>>(ApiPath.paymentPlans);
return PaymentPlansResponse.fromJson(
unwrap(env) as Record<string, unknown>,
);
}
/** 获取咖啡打赏套餐列表。 */
async getTipPlans(): Promise<TipPaymentPlansResponse> {
const env = await httpClient<ApiEnvelope<unknown>>(
ApiPath.paymentTipPlans,
);
return TipPaymentPlansResponse.fromJson(
unwrap(env) as Record<string, unknown>,
);
}
/**
* 创建支付订单
*/
async createOrder(
body: CreatePaymentOrderRequest,
): Promise<CreatePaymentOrderResponse> {
const env = await httpClient<ApiEnvelope<unknown>>(
ApiPath.paymentCreateOrder,
{
method: "POST",
body: body.toJson(),
},
);
return CreatePaymentOrderResponse.fromJson(
unwrap(env) as Record<string, unknown>,
);
}
/**
* 查询支付订单状态
*/
async getOrderStatus(
orderId: string,
): Promise<PaymentOrderStatusResponse> {
const env = await httpClient<ApiEnvelope<unknown>>(
ApiPath.paymentOrderStatus,
{
query: { order_id: orderId },
},
);
return PaymentOrderStatusResponse.fromJson(
unwrap(env) as Record<string, unknown>,
);
}
}
/**
* 全局单例
*/
export const paymentApi = new PaymentApi();