my-uniapp-tools 1.0.2 → 1.0.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/package.json +1 -1
- package/src/index.js +0 -6
- package/src/utils/index.ts +0 -1
- package/src/utils/payment/index.ts +0 -153
package/package.json
CHANGED
package/src/index.js
CHANGED
package/src/utils/index.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './payment/index'
|
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 支付相关工具函数
|
|
3
|
-
*/
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* 支付提供商类型
|
|
7
|
-
*/
|
|
8
|
-
export type PaymentProvider = 'wxpay' | 'alipay';
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* 支付订单信息类型
|
|
12
|
-
* @description 根据不同支付方式,orderInfo 的类型和结构会有所不同:
|
|
13
|
-
* - 支付宝小程序:String 类型,表示支付宝交易号(tradeNO)
|
|
14
|
-
* - App端支付宝:String 类型,完整的订单字符串
|
|
15
|
-
* - App端微信:Object 类型,包含微信支付必需参数
|
|
16
|
-
*/
|
|
17
|
-
export type PaymentOrderInfo = string | {
|
|
18
|
-
/** 微信支付参数 (App端) */
|
|
19
|
-
appid?: string;
|
|
20
|
-
partnerid?: string;
|
|
21
|
-
prepayid?: string;
|
|
22
|
-
package?: string;
|
|
23
|
-
noncestr?: string;
|
|
24
|
-
timestamp?: string;
|
|
25
|
-
sign?: string;
|
|
26
|
-
|
|
27
|
-
/** 其他通用参数 */
|
|
28
|
-
[key: string]: any;
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
/**
|
|
32
|
-
* 支付结果接口
|
|
33
|
-
*/
|
|
34
|
-
export interface PaymentResult {
|
|
35
|
-
/** 支付是否成功 */
|
|
36
|
-
success: boolean;
|
|
37
|
-
/** 支付提供商 */
|
|
38
|
-
provider: PaymentProvider;
|
|
39
|
-
/** 订单信息 */
|
|
40
|
-
orderInfo: PaymentOrderInfo;
|
|
41
|
-
/** 支付时间戳 */
|
|
42
|
-
timestamp: number;
|
|
43
|
-
/** 错误信息(支付失败时) */
|
|
44
|
-
error?: any;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
/**
|
|
48
|
-
* 统一支付接口
|
|
49
|
-
* @param provider 支付提供商,默认为 'wxpay'
|
|
50
|
-
* @param orderInfo 订单信息对象
|
|
51
|
-
* @returns Promise<PaymentResult> 支付结果
|
|
52
|
-
* @description 封装 uni.requestPayment,提供统一的支付接口,支持多种支付方式
|
|
53
|
-
* @example
|
|
54
|
-
* ```typescript
|
|
55
|
-
* // 微信支付 (App端)
|
|
56
|
-
* const wxResult = await usePayment('wxpay', {
|
|
57
|
-
* appid: 'your_app_id',
|
|
58
|
-
* partnerid: 'your_partner_id',
|
|
59
|
-
* prepayid: 'your_prepay_id',
|
|
60
|
-
* package: 'Sign=WXPay',
|
|
61
|
-
* noncestr: 'random_string',
|
|
62
|
-
* timestamp: '1234567890',
|
|
63
|
-
* sign: 'your_sign'
|
|
64
|
-
* });
|
|
65
|
-
*
|
|
66
|
-
* // 支付宝支付 (小程序 - String类型)
|
|
67
|
-
* const alipayResult = await usePayment('alipay', 'your_trade_no_string');
|
|
68
|
-
*
|
|
69
|
-
* // 支付宝支付 (App端 - String类型)
|
|
70
|
-
* const alipayAppResult = await usePayment('alipay', 'your_order_string');
|
|
71
|
-
*
|
|
72
|
-
* // 检查支付结果
|
|
73
|
-
* if (wxResult.success) {
|
|
74
|
-
* console.log('支付成功');
|
|
75
|
-
* } else {
|
|
76
|
-
* console.error('支付失败:', wxResult.error);
|
|
77
|
-
* }
|
|
78
|
-
* ```
|
|
79
|
-
*/
|
|
80
|
-
export const usePayment = (
|
|
81
|
-
provider: PaymentProvider = 'wxpay',
|
|
82
|
-
orderInfo: PaymentOrderInfo = {}
|
|
83
|
-
): Promise<PaymentResult> => {
|
|
84
|
-
return new Promise<PaymentResult>((resolve, reject) => {
|
|
85
|
-
// 参数验证
|
|
86
|
-
if (!provider) {
|
|
87
|
-
const error = new Error('支付提供商不能为空');
|
|
88
|
-
reject(error);
|
|
89
|
-
return;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
// 根据不同平台验证 orderInfo 类型
|
|
93
|
-
if (orderInfo === null || orderInfo === undefined) {
|
|
94
|
-
const error = new Error('订单信息不能为空');
|
|
95
|
-
reject(error);
|
|
96
|
-
return;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
// 支付宝小程序和App端支付宝需要 String 类型
|
|
100
|
-
if ((provider === 'alipay') && typeof orderInfo !== 'string' && typeof orderInfo !== 'object') {
|
|
101
|
-
const error = new Error('支付宝支付的订单信息格式不正确');
|
|
102
|
-
reject(error);
|
|
103
|
-
return;
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
// 其他平台需要 Object 类型
|
|
107
|
-
if (provider !== 'alipay' && typeof orderInfo !== 'object') {
|
|
108
|
-
const error = new Error('订单信息必须是一个对象');
|
|
109
|
-
reject(error);
|
|
110
|
-
return;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
// 记录支付开始时间
|
|
114
|
-
const timestamp = Date.now();
|
|
115
|
-
|
|
116
|
-
// 调用 uni.requestPayment 进行支付
|
|
117
|
-
uni.requestPayment({
|
|
118
|
-
provider,
|
|
119
|
-
orderInfo,
|
|
120
|
-
success: () => {
|
|
121
|
-
// 支付成功,返回成功结果
|
|
122
|
-
const result: PaymentResult = {
|
|
123
|
-
success: true,
|
|
124
|
-
provider,
|
|
125
|
-
orderInfo,
|
|
126
|
-
timestamp,
|
|
127
|
-
};
|
|
128
|
-
resolve(result);
|
|
129
|
-
},
|
|
130
|
-
fail: (err) => {
|
|
131
|
-
// 支付失败,返回失败结果
|
|
132
|
-
const result: PaymentResult = {
|
|
133
|
-
success: false,
|
|
134
|
-
provider,
|
|
135
|
-
orderInfo,
|
|
136
|
-
timestamp,
|
|
137
|
-
error: err,
|
|
138
|
-
};
|
|
139
|
-
|
|
140
|
-
// 根据错误类型进行不同处理
|
|
141
|
-
if (err.errMsg && err.errMsg.includes('cancel')) {
|
|
142
|
-
console.log('用户取消支付');
|
|
143
|
-
} else {
|
|
144
|
-
console.error('支付失败:', err);
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
// 这里选择 resolve 而不是 reject,让调用者通过 result.success 判断支付结果
|
|
148
|
-
// 这样可以避免未捕获的 Promise 异常
|
|
149
|
-
resolve(result);
|
|
150
|
-
},
|
|
151
|
-
});
|
|
152
|
-
});
|
|
153
|
-
};
|