@warriorteam/redai-zalo-sdk
Version:
Comprehensive TypeScript/JavaScript SDK for Zalo APIs - Official Account v3.0, ZNS with Full Type Safety, Consultation Service, Broadcast Service, Group Messaging with List APIs, Social APIs, Enhanced Article Management, Promotion Service v3.0 with Multip
209 lines • 9.49 kB
TypeScript
import { ZaloClient } from "../clients/zalo-client";
import { CreateOrderRequest, OrderData, ConfirmOrderRequest, ConfirmedOrderData, ProductInfo } from "../types/purchase";
/**
* Service xử lý các API mua sản phẩm/dịch vụ OA của Zalo
*
* ĐIỀU KIỆN SỬ DỤNG PURCHASE API:
*
* 1. QUYỀN TRUY CẬP:
* - Ứng dụng cần được cấp quyền quản lý "Mua sản phẩm dịch vụ OA"
* - OA phải được xác minh và có quyền bán sản phẩm/dịch vụ
*
* 2. THỜI GIAN TẠO ĐỚN:
* - Order chỉ được tạo từ 00:01 đến 23:54 hàng ngày
* - Không thể tạo đơn hàng trong khung giờ bảo trì (23:55 - 00:00)
*
* 3. SẢN PHẨM/DỊCH VỤ:
* - Sản phẩm phải có sẵn và được phép bán
* - Đối tượng thụ hưởng (beneficiary) phải phù hợp với sản phẩm
* - Có thể sử dụng product_id HOẶC redeem_code, không được dùng cả hai
*
* 4. THANH TOÁN:
* - Tài khoản ZCA phải có đủ số dư để thanh toán
* - Voucher code (nếu có) phải hợp lệ và chưa hết hạn
*
* 5. XÁC THỰC:
* - Mỗi đơn hàng sẽ có verified_token (OTT) để xác nhận thanh toán
* - OTT có hiệu lực trong vòng 5 phút kể từ khi tạo đơn
*
* LỖI THƯỜNG GẶP:
* - 1001: Beneficiary không hợp lệ
* - 1002: Product ID không tồn tại hoặc không khả dụng
* - 1003: Redeem code không hợp lệ hoặc đã được sử dụng
* - 1004: Voucher code không hợp lệ hoặc đã hết hạn
* - 1005: Sản phẩm không khả dụng cho đối tượng thụ hưởng
* - 1006: Số dư tài khoản không đủ
* - 1007: Ngoài thời gian cho phép tạo đơn hàng
* - 1008: Đơn hàng trùng lặp
* - 1009: Không có quyền truy cập
*/
export declare class PurchaseService {
private readonly client;
private readonly purchaseApiUrl;
constructor(client: ZaloClient);
/**
* Tạo đơn hàng mua sản phẩm/dịch vụ OA
* @param accessToken Access token của Official Account
* @param request Thông tin đơn hàng cần tạo
* @returns Thông tin đơn hàng đã tạo
*/
createOrder(accessToken: string, request: CreateOrderRequest): Promise<OrderData>;
/**
* Tạo đơn hàng với product_id
* @param accessToken Access token của Official Account
* @param beneficiary Đối tượng thụ hưởng (OA hoặc APP)
* @param productId ID sản phẩm
* @param voucherCode Mã giảm giá (tùy chọn)
* @returns Thông tin đơn hàng đã tạo
*/
createOrderWithProduct(accessToken: string, beneficiary: "OA" | "APP", productId: number, voucherCode?: string): Promise<OrderData>;
/**
* Tạo đơn hàng với redeem_code (mã quà tặng)
* @param accessToken Access token của Official Account
* @param beneficiary Đối tượng thụ hưởng (OA hoặc APP)
* @param redeemCode Mã quà tặng
* @param voucherCode Mã giảm giá (tùy chọn)
* @returns Thông tin đơn hàng đã tạo
*/
createOrderWithRedeemCode(accessToken: string, beneficiary: "OA" | "APP", redeemCode: string, voucherCode?: string): Promise<OrderData>;
/**
* Validate create order request
* @param request Request to validate
*/
private validateCreateOrderRequest;
/**
* Kiểm tra thời gian có thể tạo đơn hàng
* @returns true nếu trong thời gian cho phép tạo đơn hàng
*/
isOrderCreationTimeValid(): boolean;
/**
* Tính toán thời gian hết hạn của OTT (One Time Token)
* @param createdTime Thời gian tạo đơn hàng (milliseconds)
* @returns Thời gian hết hạn OTT (milliseconds)
*/
calculateOTTExpiration(createdTime: number): number;
/**
* Kiểm tra OTT còn hiệu lực hay không
* @param createdTime Thời gian tạo đơn hàng (milliseconds)
* @returns true nếu OTT còn hiệu lực
*/
isOTTValid(createdTime: number): boolean;
/**
* Xác nhận thanh toán đơn hàng
* @param accessToken Access token của Official Account
* @param request Thông tin xác nhận đơn hàng
* @returns Thông tin đơn hàng đã được xác nhận thanh toán
*/
confirmOrder(accessToken: string, request: ConfirmOrderRequest): Promise<ConfirmedOrderData>;
/**
* Xác nhận thanh toán đơn hàng với order ID và verified token
* @param accessToken Access token của Official Account
* @param orderId ID đơn hàng
* @param verifiedToken OTT token để xác nhận
* @returns Thông tin đơn hàng đã được xác nhận thanh toán
*/
confirmOrderById(accessToken: string, orderId: string, verifiedToken: string): Promise<ConfirmedOrderData>;
/**
* Lấy thông tin sản phẩm theo ID
* @param productId ID sản phẩm
* @returns Thông tin sản phẩm hoặc undefined nếu không tìm thấy
*/
getProductInfo(productId: number): ProductInfo | undefined;
/**
* Lấy danh sách tất cả sản phẩm có sẵn
* @returns Danh sách thông tin sản phẩm
*/
getAllProducts(): ProductInfo[];
/**
* Lấy danh sách sản phẩm theo loại
* @param category Loại sản phẩm
* @returns Danh sách sản phẩm thuộc loại đó
*/
getProductsByCategory(category: 'subscription' | 'gmf' | 'quota'): ProductInfo[];
/**
* Lấy danh sách sản phẩm theo đối tượng thụ hưởng
* @param beneficiary Đối tượng thụ hưởng
* @returns Danh sách sản phẩm phù hợp với đối tượng thụ hưởng
*/
getProductsByBeneficiary(beneficiary: "OA" | "APP"): ProductInfo[];
/**
* Kiểm tra sản phẩm có phù hợp với đối tượng thụ hưởng không
* @param productId ID sản phẩm
* @param beneficiary Đối tượng thụ hưởng
* @returns true nếu sản phẩm phù hợp với đối tượng thụ hưởng
*/
isProductCompatibleWithBeneficiary(productId: number, beneficiary: "OA" | "APP"): boolean;
/**
* Tạo đơn hàng gói OA Subscription
* @param accessToken Access token của Official Account
* @param subscriptionType Loại gói subscription
* @param voucherCode Mã giảm giá (tùy chọn)
* @returns Thông tin đơn hàng đã tạo
*/
createOASubscriptionOrder(accessToken: string, subscriptionType: 'advanced_6m' | 'advanced_12m' | 'premium_6m' | 'premium_12m', voucherCode?: string): Promise<OrderData>;
/**
* Tạo đơn hàng gói GMF (Group Message Framework)
* @param accessToken Access token của Official Account
* @param memberLimit Giới hạn số thành viên
* @param voucherCode Mã giảm giá (tùy chọn)
* @returns Thông tin đơn hàng đã tạo
*/
createGMFOrder(accessToken: string, memberLimit: 10 | 50 | 100 | 1000, voucherCode?: string): Promise<OrderData>;
/**
* Tạo đơn hàng gói quota tin nhắn giao dịch
* @param accessToken Access token của Official Account
* @param beneficiary Đối tượng thụ hưởng (OA hoặc APP)
* @param quotaSize Kích thước gói quota
* @param voucherCode Mã giảm giá (tùy chọn)
* @returns Thông tin đơn hàng đã tạo
*/
createTransactionQuotaOrder(accessToken: string, beneficiary: "OA" | "APP", quotaSize: '5k' | '50k' | '500k', voucherCode?: string): Promise<OrderData>;
/**
* Tạo nhiều đơn hàng cùng lúc (batch operation)
* @param accessToken Access token của Official Account
* @param orders Danh sách đơn hàng cần tạo
* @returns Danh sách kết quả tạo đơn hàng
*/
createMultipleOrders(accessToken: string, orders: CreateOrderRequest[]): Promise<Array<{
success: boolean;
data?: OrderData;
error?: string;
}>>;
/**
* Tạo combo đơn hàng OA Premium + GMF
* @param accessToken Access token của Official Account
* @param premiumDuration Thời hạn gói Premium
* @param gmfMemberLimit Giới hạn thành viên GMF
* @param voucherCode Mã giảm giá (tùy chọn)
* @returns Danh sách kết quả tạo đơn hàng
*/
createOAPremiumGMFCombo(accessToken: string, premiumDuration: '6m' | '12m', gmfMemberLimit: 10 | 50 | 100 | 1000, voucherCode?: string): Promise<{
premium: {
success: boolean;
data?: OrderData;
error?: string;
};
gmf: {
success: boolean;
data?: OrderData;
error?: string;
};
}>;
/**
* Gợi ý sản phẩm dựa trên nhu cầu
* @param requirements Yêu cầu của khách hàng
* @returns Danh sách sản phẩm được gợi ý
*/
recommendProducts(requirements: {
beneficiary: "OA" | "APP";
budget?: 'low' | 'medium' | 'high';
features?: ('subscription' | 'group_messaging' | 'transaction_quota')[];
duration?: 'short' | 'long';
}): ProductInfo[];
/**
* Validate confirm order request
* @param request Request to validate
*/
private validateConfirmOrderRequest;
}
//# sourceMappingURL=purchase.service.d.ts.map