@warriorteam/redai-zalo-sdk 1.30.0 → 1.31.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +71 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/services/purchase.service.d.ts +209 -0
- package/dist/services/purchase.service.d.ts.map +1 -0
- package/dist/services/purchase.service.js +417 -0
- package/dist/services/purchase.service.js.map +1 -0
- package/dist/types/purchase.d.ts +268 -0
- package/dist/types/purchase.d.ts.map +1 -0
- package/dist/types/purchase.js +137 -0
- package/dist/types/purchase.js.map +1 -0
- package/dist/zalo-sdk.d.ts +2 -0
- package/dist/zalo-sdk.d.ts.map +1 -1
- package/dist/zalo-sdk.js +2 -0
- package/dist/zalo-sdk.js.map +1 -1
- package/package.json +16 -3
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,77 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## [1.31.0] - 2025-01-05
|
|
6
|
+
|
|
7
|
+
### ✨ Added - Complete Purchase API Support
|
|
8
|
+
|
|
9
|
+
#### 🛒 New Purchase Service
|
|
10
|
+
- **`PurchaseService`** - Complete service for Zalo OA Purchase API v3.0
|
|
11
|
+
- Full support for creating and confirming orders for OA products and services
|
|
12
|
+
- Type-safe order management with comprehensive validation
|
|
13
|
+
|
|
14
|
+
#### 🎯 Core Purchase Functions
|
|
15
|
+
- **`createOrder()`** - Create orders with product_id or redeem_code
|
|
16
|
+
- **`confirmOrder()`** - Confirm order payment with OTT (One Time Token)
|
|
17
|
+
- **`createOrderWithProduct()`** - Create order with specific product ID
|
|
18
|
+
- **`createOrderWithRedeemCode()`** - Create order with gift/redeem code
|
|
19
|
+
- **`confirmOrderById()`** - Confirm order with separate order ID and token
|
|
20
|
+
|
|
21
|
+
#### 🏷️ Specialized Product APIs
|
|
22
|
+
- **`createOASubscriptionOrder()`** - Create OA subscription orders (Advanced/Premium 6m/12m)
|
|
23
|
+
- **`createGMFOrder()`** - Create Group Message Framework orders (10/50/100/1000 members)
|
|
24
|
+
- **`createTransactionQuotaOrder()`** - Create transaction message quota orders (5k/50k/500k)
|
|
25
|
+
|
|
26
|
+
#### 📦 Batch & Combo Operations
|
|
27
|
+
- **`createMultipleOrders()`** - Create multiple orders in batch with error isolation
|
|
28
|
+
- **`createOAPremiumGMFCombo()`** - Create Premium + GMF combo packages
|
|
29
|
+
- **`recommendProducts()`** - Smart product recommendation system
|
|
30
|
+
|
|
31
|
+
#### 🗂️ Product Management
|
|
32
|
+
- **`getProductInfo()`** - Get detailed product information by ID
|
|
33
|
+
- **`getAllProducts()`** - Get all available products
|
|
34
|
+
- **`getProductsByCategory()`** - Filter products by category (subscription/gmf/quota)
|
|
35
|
+
- **`getProductsByBeneficiary()`** - Filter products by beneficiary (OA/APP)
|
|
36
|
+
- **`isProductCompatibleWithBeneficiary()`** - Validate product compatibility
|
|
37
|
+
|
|
38
|
+
#### 🕐 Order Timing & Validation
|
|
39
|
+
- **`isOrderCreationTimeValid()`** - Check if current time allows order creation (00:01-23:54)
|
|
40
|
+
- **`calculateOTTExpiration()`** - Calculate OTT expiration time (5 minutes)
|
|
41
|
+
- **`isOTTValid()`** - Check if OTT is still valid
|
|
42
|
+
|
|
43
|
+
#### 📋 TypeScript Interfaces & Types
|
|
44
|
+
- **`CreateOrderRequest`** - Union type for product_id or redeem_code orders
|
|
45
|
+
- **`CreateOrderWithProductRequest`** - Interface for product-based orders
|
|
46
|
+
- **`CreateOrderWithRedeemRequest`** - Interface for redeem code orders
|
|
47
|
+
- **`ConfirmOrderRequest`** - Interface for order confirmation
|
|
48
|
+
- **`OrderData`** - Complete order data with verified_token (OTT)
|
|
49
|
+
- **`ConfirmedOrderData`** - Confirmed order data (without OTT)
|
|
50
|
+
- **`ProductInfo`** - Product information interface
|
|
51
|
+
- **`BeneficiaryType`** - Type for OA/APP beneficiaries
|
|
52
|
+
|
|
53
|
+
#### 🏪 Complete Product Catalog
|
|
54
|
+
- **OA Subscription Products**:
|
|
55
|
+
- OA Advanced 6/12 months
|
|
56
|
+
- OA Premium 6/12 months
|
|
57
|
+
- **GMF Products**:
|
|
58
|
+
- GMF 10/50/100/1000 members
|
|
59
|
+
- **Transaction Quota Products**:
|
|
60
|
+
- 5k/50k/500k transaction messages (1 month)
|
|
61
|
+
|
|
62
|
+
#### ✅ Advanced Features
|
|
63
|
+
- **Automatic Validation**: Product-beneficiary compatibility checking
|
|
64
|
+
- **Error Isolation**: Batch operations continue on individual failures
|
|
65
|
+
- **Smart Recommendations**: AI-powered product suggestions based on requirements
|
|
66
|
+
- **Time Validation**: Automatic order creation time window checking
|
|
67
|
+
- **OTT Management**: Complete One Time Token lifecycle management
|
|
68
|
+
- **Type Safety**: Full TypeScript support with compile-time validation
|
|
69
|
+
|
|
70
|
+
#### 🔧 Error Handling & Validation
|
|
71
|
+
- Comprehensive error codes for all purchase scenarios
|
|
72
|
+
- Detailed validation for all request parameters
|
|
73
|
+
- Graceful error handling in batch operations
|
|
74
|
+
- Clear error messages with context information
|
|
75
|
+
|
|
5
76
|
## [1.30.0] - 2025-01-05
|
|
6
77
|
|
|
7
78
|
### ✨ Added - Template Message Support for ConsultationService
|
package/dist/index.d.ts
CHANGED
|
@@ -17,6 +17,7 @@ export * from "./types/article";
|
|
|
17
17
|
export * from "./types/broadcast";
|
|
18
18
|
export * from "./types/promotion";
|
|
19
19
|
export * from "./types/consultation";
|
|
20
|
+
export * from "./types/purchase";
|
|
20
21
|
export * from "./constants/zns.constants";
|
|
21
22
|
export type { BaseMessage, TextMessage, ImageMessage, FileMessage, StickerMessage, TemplateMessage as MessageTemplateMessage, ReactionMessage as MessageReactionMessage, Message, MessageRecipient, SendMessageRequest, SendMessageResponse, UploadFileResponse, MessageStatus, MessageEvent, ConsultationTextMessage, ConsultationImageMessage, ConsultationFileMessage, ConsultationStickerMessage, ConsultationQuoteMessage, ConsultationRequestInfoMessage, TransactionMessage, AnonymousTextMessage, AnonymousImageMessage, AnonymousFileMessage, AnonymousStickerMessage, MiniAppMessage, ExtendedMessage, } from "./types/message";
|
|
22
23
|
export * from "./types/webhook";
|
|
@@ -40,6 +41,7 @@ export { PromotionService } from "./services/promotion.service";
|
|
|
40
41
|
export { GeneralMessageService } from "./services/general-message.service";
|
|
41
42
|
export { MessageManagementService, UploadFileResult, UploadImageResult, MessageQuotaInfo, ConversationMessage, Conversation, MessagePagination } from "./services/message-management.service";
|
|
42
43
|
export { BroadcastService } from "./services/broadcast.service";
|
|
44
|
+
export { PurchaseService } from "./services/purchase.service";
|
|
43
45
|
export { ZaloSDK } from "./zalo-sdk";
|
|
44
46
|
export { ZaloSDK as default } from "./zalo-sdk";
|
|
45
47
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,cAAc,gBAAgB,CAAC;AAC/B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AAGjC,cAAc,2BAA2B,CAAC;AAG1C,YAAY,EACV,WAAW,EACX,WAAW,EACX,YAAY,EACZ,WAAW,EACX,cAAc,EACd,eAAe,IAAI,sBAAsB,EACzC,eAAe,IAAI,sBAAsB,EACzC,OAAO,EACP,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EACb,YAAY,EACZ,uBAAuB,EACvB,wBAAwB,EACxB,uBAAuB,EACvB,0BAA0B,EAC1B,wBAAwB,EACxB,8BAA8B,EAC9B,kBAAkB,EAElB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,uBAAuB,EACvB,cAAc,EACd,eAAe,GAChB,MAAM,iBAAiB,CAAC;AAGzB,cAAc,iBAAiB,CAAC;AAGhC,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACxB,yBAAyB,EACzB,yBAAyB,EACzB,yBAAyB,EACzB,wBAAwB,EACxB,uBAAuB,EACvB,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,gBAAgB,EAChB,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,EACzB,qBAAqB,EACrB,WAAW,EACX,cAAc,GACf,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,EACtB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AAGzB,YAAY,EACV,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,EAClB,SAAS,IAAI,mBAAmB,EAChC,WAAW,EACX,eAAe,EACf,aAAa,EACb,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,oBAAoB,EACpB,cAAc,EACd,eAAe,EACf,iBAAiB,IAAI,2BAA2B,EAChD,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,mBAAmB,EACnB,yBAAyB,EACzB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,wBAAwB,EACxB,wBAAwB,EACxB,wBAAwB,EACxB,uBAAuB,EACvB,kBAAkB,EAClB,kBAAkB,EAClB,UAAU,EACV,eAAe,EACf,eAAe,EACf,wBAAwB,EACxB,kBAAkB,EAClB,mBAAmB,EACnB,2BAA2B,EAC3B,gCAAgC,EAChC,iCAAiC,EACjC,yBAAyB,EACzB,0BAA0B,EAC1B,oBAAoB,EACpB,wBAAwB,EACxB,yBAAyB,EACzB,uBAAuB,EACvB,qBAAqB,EACrB,mBAAmB,EACnB,kCAAkC,EAClC,gCAAgC,GACjC,MAAM,eAAe,CAAC;AAEvB,YAAY,EACV,WAAW,IAAI,qBAAqB,EACpC,QAAQ,IAAI,kBAAkB,EAC9B,OAAO,EACP,WAAW,EACX,QAAQ,EACR,eAAe,EACf,aAAa,EACb,WAAW,EACX,eAAe,EACf,oBAAoB,EACpB,YAAY,EACZ,WAAW,EACX,cAAc,EACd,YAAY,EACZ,UAAU,EACV,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAGnD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AACvE,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAGrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EACL,wBAAwB,EACxB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,YAAY,EACZ,iBAAiB,EAClB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAG9D,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAGrC,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -24,7 +24,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
24
24
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
25
25
|
};
|
|
26
26
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
|
-
exports.default = exports.ZaloSDK = exports.BroadcastService = exports.MessageManagementService = exports.GeneralMessageService = exports.PromotionService = exports.TransactionService = exports.ConsultationService = exports.VideoUploadService = exports.ArticleService = exports.GroupManagementService = exports.GroupMessageService = exports.ZNSService = exports.UserService = exports.OAService = exports.AuthService = exports.ZaloClient = exports.BaseClient = exports.getMessageDirection = exports.isOAToGroupMessageEvent = exports.isOAToUserMessageEvent = exports.isGroupMessageEvent = exports.isUserMessageEvent = exports.isFromPersonal = exports.isFromGroup = exports.isOASendGroupGifEvent = exports.isOASendGroupStickerEvent = exports.isOASendGroupFileEvent = exports.isOASendGroupImageEvent = exports.isOASendGroupTextEvent = exports.isOASendGifEvent = exports.isOASendStickerEvent = exports.isOASendFileEvent = exports.isOASendImageEvent = exports.isOASendTextEvent = exports.isUserGroupMessageEvent = exports.isUserSendGroupFileEvent = exports.isUserSendGroupAudioEvent = exports.isUserSendGroupVideoEvent = exports.isUserSendGroupImageEvent = exports.isUserSendGroupTextEvent = void 0;
|
|
27
|
+
exports.default = exports.ZaloSDK = exports.PurchaseService = exports.BroadcastService = exports.MessageManagementService = exports.GeneralMessageService = exports.PromotionService = exports.TransactionService = exports.ConsultationService = exports.VideoUploadService = exports.ArticleService = exports.GroupManagementService = exports.GroupMessageService = exports.ZNSService = exports.UserService = exports.OAService = exports.AuthService = exports.ZaloClient = exports.BaseClient = exports.getMessageDirection = exports.isOAToGroupMessageEvent = exports.isOAToUserMessageEvent = exports.isGroupMessageEvent = exports.isUserMessageEvent = exports.isFromPersonal = exports.isFromGroup = exports.isOASendGroupGifEvent = exports.isOASendGroupStickerEvent = exports.isOASendGroupFileEvent = exports.isOASendGroupImageEvent = exports.isOASendGroupTextEvent = exports.isOASendGifEvent = exports.isOASendStickerEvent = exports.isOASendFileEvent = exports.isOASendImageEvent = exports.isOASendTextEvent = exports.isUserGroupMessageEvent = exports.isUserSendGroupFileEvent = exports.isUserSendGroupAudioEvent = exports.isUserSendGroupVideoEvent = exports.isUserSendGroupImageEvent = exports.isUserSendGroupTextEvent = void 0;
|
|
28
28
|
// Export types
|
|
29
29
|
__exportStar(require("./types/common"), exports);
|
|
30
30
|
__exportStar(require("./types/auth"), exports);
|
|
@@ -35,6 +35,7 @@ __exportStar(require("./types/article"), exports);
|
|
|
35
35
|
__exportStar(require("./types/broadcast"), exports);
|
|
36
36
|
__exportStar(require("./types/promotion"), exports);
|
|
37
37
|
__exportStar(require("./types/consultation"), exports);
|
|
38
|
+
__exportStar(require("./types/purchase"), exports);
|
|
38
39
|
// Export ZNS constants and helpers
|
|
39
40
|
__exportStar(require("./constants/zns.constants"), exports);
|
|
40
41
|
// Export webhook types (avoiding conflicts with message and group types)
|
|
@@ -103,6 +104,8 @@ var message_management_service_1 = require("./services/message-management.servic
|
|
|
103
104
|
Object.defineProperty(exports, "MessageManagementService", { enumerable: true, get: function () { return message_management_service_1.MessageManagementService; } });
|
|
104
105
|
var broadcast_service_1 = require("./services/broadcast.service");
|
|
105
106
|
Object.defineProperty(exports, "BroadcastService", { enumerable: true, get: function () { return broadcast_service_1.BroadcastService; } });
|
|
107
|
+
var purchase_service_1 = require("./services/purchase.service");
|
|
108
|
+
Object.defineProperty(exports, "PurchaseService", { enumerable: true, get: function () { return purchase_service_1.PurchaseService; } });
|
|
106
109
|
// Export main SDK class
|
|
107
110
|
var zalo_sdk_1 = require("./zalo-sdk");
|
|
108
111
|
Object.defineProperty(exports, "ZaloSDK", { enumerable: true, get: function () { return zalo_sdk_1.ZaloSDK; } });
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;;;;;;;;;;;;;;;AAEH,eAAe;AACf,iDAA+B;AAC/B,+CAA6B;AAC7B,6CAA2B;AAC3B,+CAA6B;AAC7B,8CAA4B;AAC5B,kDAAgC;AAChC,oDAAkC;AAClC,oDAAkC;AAClC,uDAAqC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;;;;;;;;;;;;;;;;AAEH,eAAe;AACf,iDAA+B;AAC/B,+CAA6B;AAC7B,6CAA2B;AAC3B,+CAA6B;AAC7B,8CAA4B;AAC5B,kDAAgC;AAChC,oDAAkC;AAClC,oDAAkC;AAClC,uDAAqC;AACrC,mDAAiC;AAEjC,mCAAmC;AACnC,4DAA0C;AAkC1C,yEAAyE;AACzE,kDAAgC;AAEhC,yEAAyE;AACzE,mDAoB6B;AAlB3B,uHAAA,wBAAwB,OAAA;AACxB,wHAAA,yBAAyB,OAAA;AACzB,wHAAA,yBAAyB,OAAA;AACzB,wHAAA,yBAAyB,OAAA;AACzB,uHAAA,wBAAwB,OAAA;AACxB,sHAAA,uBAAuB,OAAA;AACvB,gHAAA,iBAAiB,OAAA;AACjB,iHAAA,kBAAkB,OAAA;AAClB,gHAAA,iBAAiB,OAAA;AACjB,mHAAA,oBAAoB,OAAA;AACpB,+GAAA,gBAAgB,OAAA;AAChB,qHAAA,sBAAsB,OAAA;AACtB,sHAAA,uBAAuB,OAAA;AACvB,qHAAA,sBAAsB,OAAA;AACtB,wHAAA,yBAAyB,OAAA;AACzB,oHAAA,qBAAqB,OAAA;AACrB,0GAAA,WAAW,OAAA;AACX,6GAAA,cAAc,OAAA;AAEhB,kCAAkC;AAClC,2CAMyB;AALvB,6GAAA,kBAAkB,OAAA;AAClB,8GAAA,mBAAmB,OAAA;AACnB,iHAAA,sBAAsB,OAAA;AACtB,kHAAA,uBAAuB,OAAA;AACvB,8GAAA,mBAAmB,OAAA;AAoFrB,iBAAiB;AACjB,qDAAmD;AAA1C,yGAAA,UAAU,OAAA;AACnB,qDAAmD;AAA1C,yGAAA,UAAU,OAAA;AAEnB,kBAAkB;AAClB,wDAAsD;AAA7C,2GAAA,WAAW,OAAA;AACpB,oDAAkD;AAAzC,uGAAA,SAAS,OAAA;AAClB,2GAA2G;AAC3G,wDAAsD;AAA7C,2GAAA,WAAW,OAAA;AACpB,+DAA+D;AAC/D,sDAAoD;AAA3C,yGAAA,UAAU,OAAA;AACnB,0EAAuE;AAA9D,4HAAA,mBAAmB,OAAA;AAC5B,gFAA6E;AAApE,kIAAA,sBAAsB,OAAA;AAC/B,8DAA4D;AAAnD,iHAAA,cAAc,OAAA;AACvB,wEAAqE;AAA5D,0HAAA,kBAAkB,OAAA;AAE3B,iDAAiD;AACjD,wEAAsE;AAA7D,2HAAA,mBAAmB,OAAA;AAC5B,sEAAoE;AAA3D,yHAAA,kBAAkB,OAAA;AAC3B,kEAAgE;AAAvD,qHAAA,gBAAgB,OAAA;AACzB,8EAA2E;AAAlE,gIAAA,qBAAqB,OAAA;AAC9B,oFAQ+C;AAP7C,sIAAA,wBAAwB,OAAA;AAQ1B,kEAAgE;AAAvD,qHAAA,gBAAgB,OAAA;AACzB,gEAA8D;AAArD,mHAAA,eAAe,OAAA;AAExB,wBAAwB;AACxB,uCAAqC;AAA5B,mGAAA,OAAO,OAAA;AAEhB,iBAAiB;AACjB,uCAAgD;AAAvC,mGAAA,OAAO,OAAW"}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
import { ZaloClient } from "../clients/zalo-client";
|
|
2
|
+
import { CreateOrderRequest, OrderData, ConfirmOrderRequest, ConfirmedOrderData, ProductInfo } from "../types/purchase";
|
|
3
|
+
/**
|
|
4
|
+
* Service xử lý các API mua sản phẩm/dịch vụ OA của Zalo
|
|
5
|
+
*
|
|
6
|
+
* ĐIỀU KIỆN SỬ DỤNG PURCHASE API:
|
|
7
|
+
*
|
|
8
|
+
* 1. QUYỀN TRUY CẬP:
|
|
9
|
+
* - Ứng dụng cần được cấp quyền quản lý "Mua sản phẩm dịch vụ OA"
|
|
10
|
+
* - OA phải được xác minh và có quyền bán sản phẩm/dịch vụ
|
|
11
|
+
*
|
|
12
|
+
* 2. THỜI GIAN TẠO ĐỚN:
|
|
13
|
+
* - Order chỉ được tạo từ 00:01 đến 23:54 hàng ngày
|
|
14
|
+
* - Không thể tạo đơn hàng trong khung giờ bảo trì (23:55 - 00:00)
|
|
15
|
+
*
|
|
16
|
+
* 3. SẢN PHẨM/DỊCH VỤ:
|
|
17
|
+
* - Sản phẩm phải có sẵn và được phép bán
|
|
18
|
+
* - Đối tượng thụ hưởng (beneficiary) phải phù hợp với sản phẩm
|
|
19
|
+
* - Có thể sử dụng product_id HOẶC redeem_code, không được dùng cả hai
|
|
20
|
+
*
|
|
21
|
+
* 4. THANH TOÁN:
|
|
22
|
+
* - Tài khoản ZCA phải có đủ số dư để thanh toán
|
|
23
|
+
* - Voucher code (nếu có) phải hợp lệ và chưa hết hạn
|
|
24
|
+
*
|
|
25
|
+
* 5. XÁC THỰC:
|
|
26
|
+
* - Mỗi đơn hàng sẽ có verified_token (OTT) để xác nhận thanh toán
|
|
27
|
+
* - OTT có hiệu lực trong vòng 5 phút kể từ khi tạo đơn
|
|
28
|
+
*
|
|
29
|
+
* LỖI THƯỜNG GẶP:
|
|
30
|
+
* - 1001: Beneficiary không hợp lệ
|
|
31
|
+
* - 1002: Product ID không tồn tại hoặc không khả dụng
|
|
32
|
+
* - 1003: Redeem code không hợp lệ hoặc đã được sử dụng
|
|
33
|
+
* - 1004: Voucher code không hợp lệ hoặc đã hết hạn
|
|
34
|
+
* - 1005: Sản phẩm không khả dụng cho đối tượng thụ hưởng
|
|
35
|
+
* - 1006: Số dư tài khoản không đủ
|
|
36
|
+
* - 1007: Ngoài thời gian cho phép tạo đơn hàng
|
|
37
|
+
* - 1008: Đơn hàng trùng lặp
|
|
38
|
+
* - 1009: Không có quyền truy cập
|
|
39
|
+
*/
|
|
40
|
+
export declare class PurchaseService {
|
|
41
|
+
private readonly client;
|
|
42
|
+
private readonly purchaseApiUrl;
|
|
43
|
+
constructor(client: ZaloClient);
|
|
44
|
+
/**
|
|
45
|
+
* Tạo đơn hàng mua sản phẩm/dịch vụ OA
|
|
46
|
+
* @param accessToken Access token của Official Account
|
|
47
|
+
* @param request Thông tin đơn hàng cần tạo
|
|
48
|
+
* @returns Thông tin đơn hàng đã tạo
|
|
49
|
+
*/
|
|
50
|
+
createOrder(accessToken: string, request: CreateOrderRequest): Promise<OrderData>;
|
|
51
|
+
/**
|
|
52
|
+
* Tạo đơn hàng với product_id
|
|
53
|
+
* @param accessToken Access token của Official Account
|
|
54
|
+
* @param beneficiary Đối tượng thụ hưởng (OA hoặc APP)
|
|
55
|
+
* @param productId ID sản phẩm
|
|
56
|
+
* @param voucherCode Mã giảm giá (tùy chọn)
|
|
57
|
+
* @returns Thông tin đơn hàng đã tạo
|
|
58
|
+
*/
|
|
59
|
+
createOrderWithProduct(accessToken: string, beneficiary: "OA" | "APP", productId: number, voucherCode?: string): Promise<OrderData>;
|
|
60
|
+
/**
|
|
61
|
+
* Tạo đơn hàng với redeem_code (mã quà tặng)
|
|
62
|
+
* @param accessToken Access token của Official Account
|
|
63
|
+
* @param beneficiary Đối tượng thụ hưởng (OA hoặc APP)
|
|
64
|
+
* @param redeemCode Mã quà tặng
|
|
65
|
+
* @param voucherCode Mã giảm giá (tùy chọn)
|
|
66
|
+
* @returns Thông tin đơn hàng đã tạo
|
|
67
|
+
*/
|
|
68
|
+
createOrderWithRedeemCode(accessToken: string, beneficiary: "OA" | "APP", redeemCode: string, voucherCode?: string): Promise<OrderData>;
|
|
69
|
+
/**
|
|
70
|
+
* Validate create order request
|
|
71
|
+
* @param request Request to validate
|
|
72
|
+
*/
|
|
73
|
+
private validateCreateOrderRequest;
|
|
74
|
+
/**
|
|
75
|
+
* Kiểm tra thời gian có thể tạo đơn hàng
|
|
76
|
+
* @returns true nếu trong thời gian cho phép tạo đơn hàng
|
|
77
|
+
*/
|
|
78
|
+
isOrderCreationTimeValid(): boolean;
|
|
79
|
+
/**
|
|
80
|
+
* Tính toán thời gian hết hạn của OTT (One Time Token)
|
|
81
|
+
* @param createdTime Thời gian tạo đơn hàng (milliseconds)
|
|
82
|
+
* @returns Thời gian hết hạn OTT (milliseconds)
|
|
83
|
+
*/
|
|
84
|
+
calculateOTTExpiration(createdTime: number): number;
|
|
85
|
+
/**
|
|
86
|
+
* Kiểm tra OTT còn hiệu lực hay không
|
|
87
|
+
* @param createdTime Thời gian tạo đơn hàng (milliseconds)
|
|
88
|
+
* @returns true nếu OTT còn hiệu lực
|
|
89
|
+
*/
|
|
90
|
+
isOTTValid(createdTime: number): boolean;
|
|
91
|
+
/**
|
|
92
|
+
* Xác nhận thanh toán đơn hàng
|
|
93
|
+
* @param accessToken Access token của Official Account
|
|
94
|
+
* @param request Thông tin xác nhận đơn hàng
|
|
95
|
+
* @returns Thông tin đơn hàng đã được xác nhận thanh toán
|
|
96
|
+
*/
|
|
97
|
+
confirmOrder(accessToken: string, request: ConfirmOrderRequest): Promise<ConfirmedOrderData>;
|
|
98
|
+
/**
|
|
99
|
+
* Xác nhận thanh toán đơn hàng với order ID và verified token
|
|
100
|
+
* @param accessToken Access token của Official Account
|
|
101
|
+
* @param orderId ID đơn hàng
|
|
102
|
+
* @param verifiedToken OTT token để xác nhận
|
|
103
|
+
* @returns Thông tin đơn hàng đã được xác nhận thanh toán
|
|
104
|
+
*/
|
|
105
|
+
confirmOrderById(accessToken: string, orderId: string, verifiedToken: string): Promise<ConfirmedOrderData>;
|
|
106
|
+
/**
|
|
107
|
+
* Lấy thông tin sản phẩm theo ID
|
|
108
|
+
* @param productId ID sản phẩm
|
|
109
|
+
* @returns Thông tin sản phẩm hoặc undefined nếu không tìm thấy
|
|
110
|
+
*/
|
|
111
|
+
getProductInfo(productId: number): ProductInfo | undefined;
|
|
112
|
+
/**
|
|
113
|
+
* Lấy danh sách tất cả sản phẩm có sẵn
|
|
114
|
+
* @returns Danh sách thông tin sản phẩm
|
|
115
|
+
*/
|
|
116
|
+
getAllProducts(): ProductInfo[];
|
|
117
|
+
/**
|
|
118
|
+
* Lấy danh sách sản phẩm theo loại
|
|
119
|
+
* @param category Loại sản phẩm
|
|
120
|
+
* @returns Danh sách sản phẩm thuộc loại đó
|
|
121
|
+
*/
|
|
122
|
+
getProductsByCategory(category: 'subscription' | 'gmf' | 'quota'): ProductInfo[];
|
|
123
|
+
/**
|
|
124
|
+
* Lấy danh sách sản phẩm theo đối tượng thụ hưởng
|
|
125
|
+
* @param beneficiary Đối tượng thụ hưởng
|
|
126
|
+
* @returns Danh sách sản phẩm phù hợp với đối tượng thụ hưởng
|
|
127
|
+
*/
|
|
128
|
+
getProductsByBeneficiary(beneficiary: "OA" | "APP"): ProductInfo[];
|
|
129
|
+
/**
|
|
130
|
+
* Kiểm tra sản phẩm có phù hợp với đối tượng thụ hưởng không
|
|
131
|
+
* @param productId ID sản phẩm
|
|
132
|
+
* @param beneficiary Đối tượng thụ hưởng
|
|
133
|
+
* @returns true nếu sản phẩm phù hợp với đối tượng thụ hưởng
|
|
134
|
+
*/
|
|
135
|
+
isProductCompatibleWithBeneficiary(productId: number, beneficiary: "OA" | "APP"): boolean;
|
|
136
|
+
/**
|
|
137
|
+
* Tạo đơn hàng gói OA Subscription
|
|
138
|
+
* @param accessToken Access token của Official Account
|
|
139
|
+
* @param subscriptionType Loại gói subscription
|
|
140
|
+
* @param voucherCode Mã giảm giá (tùy chọn)
|
|
141
|
+
* @returns Thông tin đơn hàng đã tạo
|
|
142
|
+
*/
|
|
143
|
+
createOASubscriptionOrder(accessToken: string, subscriptionType: 'advanced_6m' | 'advanced_12m' | 'premium_6m' | 'premium_12m', voucherCode?: string): Promise<OrderData>;
|
|
144
|
+
/**
|
|
145
|
+
* Tạo đơn hàng gói GMF (Group Message Framework)
|
|
146
|
+
* @param accessToken Access token của Official Account
|
|
147
|
+
* @param memberLimit Giới hạn số thành viên
|
|
148
|
+
* @param voucherCode Mã giảm giá (tùy chọn)
|
|
149
|
+
* @returns Thông tin đơn hàng đã tạo
|
|
150
|
+
*/
|
|
151
|
+
createGMFOrder(accessToken: string, memberLimit: 10 | 50 | 100 | 1000, voucherCode?: string): Promise<OrderData>;
|
|
152
|
+
/**
|
|
153
|
+
* Tạo đơn hàng gói quota tin nhắn giao dịch
|
|
154
|
+
* @param accessToken Access token của Official Account
|
|
155
|
+
* @param beneficiary Đối tượng thụ hưởng (OA hoặc APP)
|
|
156
|
+
* @param quotaSize Kích thước gói quota
|
|
157
|
+
* @param voucherCode Mã giảm giá (tùy chọn)
|
|
158
|
+
* @returns Thông tin đơn hàng đã tạo
|
|
159
|
+
*/
|
|
160
|
+
createTransactionQuotaOrder(accessToken: string, beneficiary: "OA" | "APP", quotaSize: '5k' | '50k' | '500k', voucherCode?: string): Promise<OrderData>;
|
|
161
|
+
/**
|
|
162
|
+
* Tạo nhiều đơn hàng cùng lúc (batch operation)
|
|
163
|
+
* @param accessToken Access token của Official Account
|
|
164
|
+
* @param orders Danh sách đơn hàng cần tạo
|
|
165
|
+
* @returns Danh sách kết quả tạo đơn hàng
|
|
166
|
+
*/
|
|
167
|
+
createMultipleOrders(accessToken: string, orders: CreateOrderRequest[]): Promise<Array<{
|
|
168
|
+
success: boolean;
|
|
169
|
+
data?: OrderData;
|
|
170
|
+
error?: string;
|
|
171
|
+
}>>;
|
|
172
|
+
/**
|
|
173
|
+
* Tạo combo đơn hàng OA Premium + GMF
|
|
174
|
+
* @param accessToken Access token của Official Account
|
|
175
|
+
* @param premiumDuration Thời hạn gói Premium
|
|
176
|
+
* @param gmfMemberLimit Giới hạn thành viên GMF
|
|
177
|
+
* @param voucherCode Mã giảm giá (tùy chọn)
|
|
178
|
+
* @returns Danh sách kết quả tạo đơn hàng
|
|
179
|
+
*/
|
|
180
|
+
createOAPremiumGMFCombo(accessToken: string, premiumDuration: '6m' | '12m', gmfMemberLimit: 10 | 50 | 100 | 1000, voucherCode?: string): Promise<{
|
|
181
|
+
premium: {
|
|
182
|
+
success: boolean;
|
|
183
|
+
data?: OrderData;
|
|
184
|
+
error?: string;
|
|
185
|
+
};
|
|
186
|
+
gmf: {
|
|
187
|
+
success: boolean;
|
|
188
|
+
data?: OrderData;
|
|
189
|
+
error?: string;
|
|
190
|
+
};
|
|
191
|
+
}>;
|
|
192
|
+
/**
|
|
193
|
+
* Gợi ý sản phẩm dựa trên nhu cầu
|
|
194
|
+
* @param requirements Yêu cầu của khách hàng
|
|
195
|
+
* @returns Danh sách sản phẩm được gợi ý
|
|
196
|
+
*/
|
|
197
|
+
recommendProducts(requirements: {
|
|
198
|
+
beneficiary: "OA" | "APP";
|
|
199
|
+
budget?: 'low' | 'medium' | 'high';
|
|
200
|
+
features?: ('subscription' | 'group_messaging' | 'transaction_quota')[];
|
|
201
|
+
duration?: 'short' | 'long';
|
|
202
|
+
}): ProductInfo[];
|
|
203
|
+
/**
|
|
204
|
+
* Validate confirm order request
|
|
205
|
+
* @param request Request to validate
|
|
206
|
+
*/
|
|
207
|
+
private validateConfirmOrderRequest;
|
|
208
|
+
}
|
|
209
|
+
//# sourceMappingURL=purchase.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"purchase.service.d.ts","sourceRoot":"","sources":["../../src/services/purchase.service.ts"],"names":[],"mappings":"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"}
|