hm-tracking-sdk 0.1.2 → 0.1.4
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/README.md +145 -119
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -4,65 +4,76 @@
|
|
|
4
4
|
|
|
5
5
|
## 1. 安装
|
|
6
6
|
|
|
7
|
-
建议通过 npm/yarn 安装正式发布的包:
|
|
7
|
+
### 建议通过 npm/yarn 安装正式发布的包:
|
|
8
8
|
|
|
9
|
-
```bash
|
|
10
|
-
# 使用 yarn
|
|
11
|
-
yarn add hm-tracking-sdk axios crypto-js
|
|
12
|
-
|
|
13
|
-
# 或使用 npm
|
|
14
|
-
npm i hm-tracking-sdk axios crypto-js
|
|
15
|
-
```
|
|
9
|
+
```bash
|
|
10
|
+
# 使用 yarn
|
|
11
|
+
yarn add hm-tracking-sdk axios crypto-js
|
|
16
12
|
|
|
13
|
+
# 或使用 npm
|
|
14
|
+
npm i hm-tracking-sdk axios crypto-js
|
|
15
|
+
```
|
|
17
16
|
|
|
18
17
|
---
|
|
19
18
|
|
|
20
19
|
## 2. SDK 初始化
|
|
21
20
|
|
|
22
|
-
|
|
23
|
-
import { HmTrackingSDK, type SDKInitOptions } from "hm-tracking-sdk";
|
|
24
|
-
|
|
25
|
-
const options: SDKInitOptions = {
|
|
26
|
-
// 可选:不传则使用内置默认地址
|
|
27
|
-
baseURL: "https://your-api.example.com",
|
|
28
|
-
|
|
29
|
-
// 可选:本地存储 Key 前缀,避免项目间冲突
|
|
30
|
-
storageKeyPrefix: "your_app_prefix",
|
|
21
|
+
- 接口: init()
|
|
31
22
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
23
|
+
```ts
|
|
24
|
+
import { HmTrackingSDK, type SDKInitOptions } from "hm-tracking-sdk";
|
|
25
|
+
|
|
26
|
+
const options: SDKInitOptions = {
|
|
27
|
+
// 可选:不传则使用内置默认地址
|
|
28
|
+
baseURL: "https://your-api.example.com",
|
|
29
|
+
|
|
30
|
+
// 可选:本地存储 Key 前缀,避免项目间冲突
|
|
31
|
+
storageKeyPrefix: "your_app_prefix",
|
|
32
|
+
|
|
33
|
+
// 可选:浏览器环境下使用,可显式传入自定义用户
|
|
34
|
+
customUser: {
|
|
35
|
+
user: {
|
|
36
|
+
id: 123456789,
|
|
37
|
+
firstName: "Test",
|
|
38
|
+
lastName: "User",
|
|
39
|
+
username: "test_user",
|
|
40
|
+
languageCode: "zh-hans",
|
|
41
|
+
},
|
|
42
|
+
authDate: new Date().toISOString(),
|
|
43
|
+
hash: "your_hash_value",
|
|
40
44
|
},
|
|
41
|
-
|
|
42
|
-
hash: "your_hash_value",
|
|
43
|
-
},
|
|
44
|
-
};
|
|
45
|
+
};
|
|
45
46
|
|
|
46
|
-
const sdk = new HmTrackingSDK(options);
|
|
47
|
-
await sdk.init();
|
|
48
|
-
```
|
|
47
|
+
const sdk = new HmTrackingSDK(options);
|
|
48
|
+
await sdk.init();
|
|
49
|
+
```
|
|
49
50
|
|
|
50
51
|
- 函数说明:初始化 SDK,先创建 HmTrackingSDK 对象,然后调用 init 方法完成初始化。
|
|
51
|
-
-
|
|
52
|
-
|
|
53
|
-
|
|
52
|
+
- 参数说明: `SDKInitOptions` 初始化SDK时的可选参数,数据结构及内部结构说明为:
|
|
53
|
+
|
|
54
|
+
```ts
|
|
55
|
+
export interface SDKInitOptions {
|
|
56
|
+
/** 自定义接口地址(可选)。不传则使用默认正式环境 */
|
|
57
|
+
baseURL?: string;
|
|
58
|
+
/** 本地存储 Key 前缀,避免冲突 */
|
|
59
|
+
storageKeyPrefix?: string;
|
|
60
|
+
/** 自定义用户信息(可选) */
|
|
61
|
+
customUser?: TelegramUserInfo;
|
|
62
|
+
}
|
|
63
|
+
```
|
|
54
64
|
|
|
55
|
-
- baseURL(可选)
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
- storageKeyPrefix(可选)
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
- customUser(可选)
|
|
62
|
-
|
|
63
|
-
|
|
65
|
+
- baseURL(可选)
|
|
66
|
+
- 说明:后端服务地址;不传则使用 SDK 内置默认地址。
|
|
67
|
+
- 类型:`string`
|
|
68
|
+
- storageKeyPrefix(可选)
|
|
69
|
+
- 说明:本地缓存命名空间前缀;用于隔离不同项目的存储键。
|
|
70
|
+
- 类型:`string`
|
|
71
|
+
- customUser(可选)
|
|
72
|
+
- 说明:自定义用户数据,仅在非 Telegram 环境可用;若不传,SDK 会自动使用“匿名浏览器用户”(基于 Cookie 生成并持久化随机 userId),从而可以直接完成鉴权与后续请求。
|
|
73
|
+
- 类型:`TelegramUserInfo`
|
|
74
|
+
- 返回值:`Promise<void>`。
|
|
64
75
|
|
|
65
|
-
### 2.
|
|
76
|
+
### 2.1 环境
|
|
66
77
|
|
|
67
78
|
- Telegram 环境
|
|
68
79
|
- SDK 自动读取当前Telegram用户的信息。
|
|
@@ -73,47 +84,52 @@ await sdk.init();
|
|
|
73
84
|
- 便于无登录状态下完成鉴权,拿到 token 后再进行广告或调试。
|
|
74
85
|
- 自定义用户:也可传入 `customUser` 替代匿名用户。
|
|
75
86
|
|
|
76
|
-
### 2.
|
|
77
|
-
|
|
78
|
-
```ts
|
|
79
|
-
import { isTelegramEnv } from "hm-tracking-sdk";
|
|
87
|
+
### 2.2 环境判断
|
|
80
88
|
|
|
81
|
-
|
|
82
|
-
// Telegram WebApp 环境
|
|
83
|
-
} else {
|
|
84
|
-
// 浏览器/其他环境
|
|
85
|
-
}
|
|
86
|
-
```
|
|
89
|
+
- 接口: isTelegramEnv()
|
|
87
90
|
|
|
88
|
-
|
|
91
|
+
```ts
|
|
92
|
+
import { isTelegramEnv } from "hm-tracking-sdk";
|
|
89
93
|
|
|
90
|
-
|
|
94
|
+
if (isTelegramEnv()) {
|
|
95
|
+
// Telegram WebApp 环境
|
|
96
|
+
} else {
|
|
97
|
+
// 浏览器/其他环境
|
|
98
|
+
}
|
|
99
|
+
```
|
|
91
100
|
|
|
92
|
-
|
|
101
|
+
- 函数说明:判断是否是Telegram环境。
|
|
102
|
+
- 返回值:`boolean`。
|
|
93
103
|
|
|
94
|
-
|
|
95
|
-
import { getTelegramUserUnsafe, type TelegramUserInfo } from "hm-tracking-sdk";
|
|
104
|
+
---
|
|
96
105
|
|
|
97
|
-
|
|
98
|
-
|
|
106
|
+
## 3. 获取Telegram用户信息
|
|
107
|
+
|
|
108
|
+
- 接口: getTelegramUserUnsafe()
|
|
99
109
|
|
|
100
|
-
- 函数说明:在 Telegram 环境下读取 `WebApp.initDataUnsafe` 并返回 `TelegramUserInfo`;获取失败返回 `null`。
|
|
101
|
-
- 返回值:`TelegramUserInfo | null`,数据结构为:
|
|
102
|
-
|
|
103
110
|
```ts
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
last_name?: string;
|
|
108
|
-
username?: string;
|
|
109
|
-
language_code?: string;
|
|
110
|
-
allows_write_to_pm?: boolean;
|
|
111
|
-
auth_date?: number;
|
|
112
|
-
hash?: string;
|
|
113
|
-
[key: string]: unknown;
|
|
114
|
-
}
|
|
111
|
+
import { getTelegramUserUnsafe, type TelegramUserInfo } from "hm-tracking-sdk";
|
|
112
|
+
|
|
113
|
+
const user: TelegramUserInfo | null = getTelegramUserUnsafe();
|
|
115
114
|
```
|
|
116
115
|
|
|
116
|
+
- 函数说明:在 Telegram 环境下返回 `TelegramUserInfo`;获取失败返回 `null`。
|
|
117
|
+
- 返回值:`TelegramUserInfo | null`,数据结构为:
|
|
118
|
+
|
|
119
|
+
```ts
|
|
120
|
+
export interface TelegramUserInfo {
|
|
121
|
+
id?: number;
|
|
122
|
+
first_name?: string;
|
|
123
|
+
last_name?: string;
|
|
124
|
+
username?: string;
|
|
125
|
+
language_code?: string;
|
|
126
|
+
allows_write_to_pm?: boolean;
|
|
127
|
+
auth_date?: number;
|
|
128
|
+
hash?: string;
|
|
129
|
+
[key: string]: unknown;
|
|
130
|
+
}
|
|
131
|
+
```
|
|
132
|
+
|
|
117
133
|
- 环境要求:仅 Telegram WebApp 可用;在浏览器环境(非 Telegram)将返回 `null`。
|
|
118
134
|
|
|
119
135
|
---
|
|
@@ -122,9 +138,11 @@ const user: TelegramUserInfo | null = getTelegramUserUnsafe();
|
|
|
122
138
|
|
|
123
139
|
### 4.1 展示广告
|
|
124
140
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
```
|
|
141
|
+
- 接口: showHmAdByPosition()
|
|
142
|
+
|
|
143
|
+
```ts
|
|
144
|
+
await sdk.showHmAdByPosition(adPositionName);
|
|
145
|
+
```
|
|
128
146
|
|
|
129
147
|
- 函数说明:根据广告位名称展示广告。
|
|
130
148
|
- 参数说明
|
|
@@ -143,46 +161,52 @@ await sdk.showHmAdByPosition(adPositionName);
|
|
|
143
161
|
|
|
144
162
|
支付仅支持在 Telegram WebApp 内使用。
|
|
145
163
|
|
|
146
|
-
### 5.1 API
|
|
164
|
+
### 5.1 TON钱包相关API
|
|
147
165
|
|
|
148
|
-
#### 5.1.1
|
|
166
|
+
#### 5.1.1 钱包是否链接
|
|
149
167
|
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
```
|
|
168
|
+
- 接口: isWalletConnected()
|
|
169
|
+
|
|
170
|
+
```ts
|
|
171
|
+
sdk.isWalletConnected(): boolean
|
|
172
|
+
```
|
|
153
173
|
|
|
154
174
|
- 函数说明:同步检查是否已连接 TON 钱包;
|
|
155
175
|
- 返回值:`boolean`。
|
|
156
176
|
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
177
|
+
#### 5.1.2 链接钱包
|
|
178
|
+
|
|
179
|
+
- 接口: connectWallet()
|
|
180
|
+
|
|
181
|
+
```ts
|
|
182
|
+
sdk.connectWallet(): Promise<boolean>
|
|
183
|
+
```
|
|
160
184
|
|
|
161
185
|
- 函数说明:发起连接 TON 钱包;
|
|
162
186
|
- 返回值:`Promise<boolean>` 表示是否连接成功。
|
|
163
187
|
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
188
|
+
#### 5.1.3 断开钱包链接
|
|
189
|
+
|
|
190
|
+
- 接口: disconnectWallet()
|
|
191
|
+
|
|
192
|
+
```ts
|
|
193
|
+
sdk.disconnectWallet(): Promise<void>
|
|
194
|
+
```
|
|
167
195
|
|
|
168
196
|
- 函数说明:断开已连接的钱包;
|
|
169
197
|
- 返回值:`Promise<void>`。
|
|
170
198
|
|
|
171
|
-
|
|
172
|
-
sdk.ensureWalletConnected(): Promise<boolean>
|
|
173
|
-
```
|
|
174
|
-
|
|
175
|
-
- 函数说明:确保钱包已连接;若未连接则尝试连接;
|
|
176
|
-
- 返回值:`Promise<boolean>` 表示最终是否已连接。
|
|
199
|
+
### 5.2 支付
|
|
177
200
|
|
|
178
201
|
#### 5.2.1 获取支持的支付方式
|
|
179
202
|
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
```
|
|
203
|
+
- 接口: getSupportedPayModes()
|
|
204
|
+
|
|
205
|
+
```ts
|
|
206
|
+
sdk.getSupportedPayModes(): Promise<MerchantPayModeListData>
|
|
207
|
+
```
|
|
183
208
|
|
|
184
209
|
- 函数说明:获取当前支持的币种及汇率配置;
|
|
185
|
-
- 参数说明:无;
|
|
186
210
|
- 返回值说明:`Promise<MerchantPayModeListData>`,见下方类型定义。
|
|
187
211
|
|
|
188
212
|
```ts
|
|
@@ -201,20 +225,22 @@ sdk.getSupportedPayModes(): Promise<MerchantPayModeListData>
|
|
|
201
225
|
|
|
202
226
|
#### 5.2.2 创建并支付订单
|
|
203
227
|
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
228
|
+
- 接口: payByMerchant()
|
|
229
|
+
|
|
230
|
+
```ts
|
|
231
|
+
// 仅 TON/USDT 需要先连接钱包(STARS 无需)
|
|
232
|
+
await sdk.ensureWalletConnected();
|
|
233
|
+
|
|
234
|
+
// 创建并支付订单
|
|
235
|
+
const params: MerchantPayCreateRequest = {
|
|
236
|
+
currencyName: "TON", // "TON" | "USDT" | "STARS"
|
|
237
|
+
amount: 10.5, // 支付金额
|
|
238
|
+
outTradeNo: `order_${Date.now()}`, // 自定义订单号
|
|
239
|
+
notifyUrl: "https://your-server.com/payment-callback",
|
|
240
|
+
attach: JSON.stringify({ userId: "123", itemId: "456" })
|
|
241
|
+
};
|
|
242
|
+
const result: MerchantPayFinishResponseData = await sdk.payByMerchant(params);
|
|
243
|
+
```
|
|
218
244
|
|
|
219
245
|
- 函数说明:创建支付订单并根据币种发起支付流程(STARS、TON/USDT 链上交易);
|
|
220
246
|
|
|
@@ -268,9 +294,11 @@ const result: MerchantPayFinishResponseData = await sdk.payByMerchant(params);
|
|
|
268
294
|
|
|
269
295
|
#### 5.2.3 查询支付结果
|
|
270
296
|
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
```
|
|
297
|
+
- 接口: merchantPayQueryResult()
|
|
298
|
+
|
|
299
|
+
```ts
|
|
300
|
+
sdk.merchantPayQueryResult(data: MerchantPayQueryResultRequest): Promise<MerchantPayQueryResultResponseData>
|
|
301
|
+
```
|
|
274
302
|
|
|
275
303
|
- 函数说明:通过系统订单号 `orderSn` 或商户订单号 `outTradeNo` 查询订单最新结果;
|
|
276
304
|
- 参数说明:`MerchantPayQueryResultRequest`,见下方类型:
|
|
@@ -287,5 +315,3 @@ sdk.merchantPayQueryResult(data: MerchantPayQueryResultRequest): Promise<Merchan
|
|
|
287
315
|
```ts
|
|
288
316
|
type MerchantPayQueryResultResponseData = MerchantPayOrderBase;
|
|
289
317
|
```
|
|
290
|
-
|
|
291
|
-
|