weixin-server-sdk 1.0.2
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/dist/Error.d.ts +5 -0
- package/dist/Error.d.ts.map +1 -0
- package/dist/Error.js +8 -0
- package/dist/Error.js.map +1 -0
- package/dist/index.d.ts +34 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +37 -0
- package/dist/index.js.map +1 -0
- package/dist/types/global.d.ts +4 -0
- package/dist/types/global.d.ts.map +1 -0
- package/dist/types/global.js +2 -0
- package/dist/types/global.js.map +1 -0
- package/dist/utils/callMaybeAsync.d.ts +3 -0
- package/dist/utils/callMaybeAsync.d.ts.map +1 -0
- package/dist/utils/callMaybeAsync.js +11 -0
- package/dist/utils/callMaybeAsync.js.map +1 -0
- package/dist/utils/isPromise.d.ts +7 -0
- package/dist/utils/isPromise.d.ts.map +1 -0
- package/dist/utils/isPromise.js +9 -0
- package/dist/utils/isPromise.js.map +1 -0
- package/dist//345/205/254/345/205/261/346/226/271/346/263/225/PublicUtils.d.ts +37 -0
- package/dist//345/205/254/345/205/261/346/226/271/346/263/225/PublicUtils.d.ts.map +1 -0
- package/dist//345/205/254/345/205/261/346/226/271/346/263/225/PublicUtils.js +104 -0
- package/dist//345/205/254/345/205/261/346/226/271/346/263/225/PublicUtils.js.map +1 -0
- package/dist//345/205/254/345/205/261/346/226/271/346/263/225//346/216/245/345/217/243/350/260/203/347/224/250/345/207/255/350/257/201.d.ts +17 -0
- package/dist//345/205/254/345/205/261/346/226/271/346/263/225//346/216/245/345/217/243/350/260/203/347/224/250/345/207/255/350/257/201.d.ts.map +1 -0
- package/dist//345/205/254/345/205/261/346/226/271/346/263/225//346/216/245/345/217/243/350/260/203/347/224/250/345/207/255/350/257/201.js +36 -0
- package/dist//345/205/254/345/205/261/346/226/271/346/263/225//346/216/245/345/217/243/350/260/203/347/224/250/345/207/255/350/257/201.js.map +1 -0
- package/dist//345/205/254/345/205/261/346/226/271/346/263/225//347/255/276/345/220/215/350/256/244/350/257/201.d.ts +11 -0
- package/dist//345/205/254/345/205/261/346/226/271/346/263/225//347/255/276/345/220/215/350/256/244/350/257/201.d.ts.map +1 -0
- package/dist//345/205/254/345/205/261/346/226/271/346/263/225//347/255/276/345/220/215/350/256/244/350/257/201.js +26 -0
- package/dist//345/205/254/345/205/261/346/226/271/346/263/225//347/255/276/345/220/215/350/256/244/350/257/201.js.map +1 -0
- package/dist//345/260/217/347/250/213/345/272/217/WXMP.d.ts +11 -0
- package/dist//345/260/217/347/250/213/345/272/217/WXMP.d.ts.map +1 -0
- package/dist//345/260/217/347/250/213/345/272/217/WXMP.js +14 -0
- package/dist//345/260/217/347/250/213/345/272/217/WXMP.js.map +1 -0
- package/dist//345/260/217/347/250/213/345/272/217//345/260/217/347/250/213/345/272/217/347/231/273/345/275/225.d.ts +17 -0
- package/dist//345/260/217/347/250/213/345/272/217//345/260/217/347/250/213/345/272/217/347/231/273/345/275/225.d.ts.map +1 -0
- package/dist//345/260/217/347/250/213/345/272/217//345/260/217/347/250/213/345/272/217/347/231/273/345/275/225.js +30 -0
- package/dist//345/260/217/347/250/213/345/272/217//345/260/217/347/250/213/345/272/217/347/231/273/345/275/225.js.map +1 -0
- package/dist//345/260/217/347/250/213/345/272/217//345/260/217/347/250/213/345/272/217/347/240/201/344/270/216/345/260/217/347/250/213/345/272/217/351/223/276/346/216/245.d.ts +51 -0
- package/dist//345/260/217/347/250/213/345/272/217//345/260/217/347/250/213/345/272/217/347/240/201/344/270/216/345/260/217/347/250/213/345/272/217/351/223/276/346/216/245.d.ts.map +1 -0
- package/dist//345/260/217/347/250/213/345/272/217//345/260/217/347/250/213/345/272/217/347/240/201/344/270/216/345/260/217/347/250/213/345/272/217/351/223/276/346/216/245.js +86 -0
- package/dist//345/260/217/347/250/213/345/272/217//345/260/217/347/250/213/345/272/217/347/240/201/344/270/216/345/260/217/347/250/213/345/272/217/351/223/276/346/216/245.js.map +1 -0
- package/dist//345/260/217/347/250/213/345/272/217//346/211/213/346/234/272/345/217/267.d.ts +22 -0
- package/dist//345/260/217/347/250/213/345/272/217//346/211/213/346/234/272/345/217/267.d.ts.map +1 -0
- package/dist//345/260/217/347/250/213/345/272/217//346/211/213/346/234/272/345/217/267.js +31 -0
- package/dist//345/260/217/347/250/213/345/272/217//346/211/213/346/234/272/345/217/267.js.map +1 -0
- package/dist//345/260/217/347/250/213/345/272/217//347/224/250/346/210/267/344/277/241/346/201/257.d.ts +2 -0
- package/dist//345/260/217/347/250/213/345/272/217//347/224/250/346/210/267/344/277/241/346/201/257.d.ts.map +1 -0
- package/dist//345/260/217/347/250/213/345/272/217//347/224/250/346/210/267/344/277/241/346/201/257.js +4 -0
- package/dist//345/260/217/347/250/213/345/272/217//347/224/250/346/210/267/344/277/241/346/201/257.js.map +1 -0
- package/dist//345/260/217/347/250/213/345/272/217//347/275/221/347/273/234.d.ts +2 -0
- package/dist//345/260/217/347/250/213/345/272/217//347/275/221/347/273/234.d.ts.map +1 -0
- package/dist//345/260/217/347/250/213/345/272/217//347/275/221/347/273/234.js +2 -0
- package/dist//345/260/217/347/250/213/345/272/217//347/275/221/347/273/234.js.map +1 -0
- package/dist//345/276/256/344/277/241/346/224/257/344/273/230/JSAPI.d.ts +120 -0
- package/dist//345/276/256/344/277/241/346/224/257/344/273/230/JSAPI.d.ts.map +1 -0
- package/dist//345/276/256/344/277/241/346/224/257/344/273/230/JSAPI.js +87 -0
- package/dist//345/276/256/344/277/241/346/224/257/344/273/230/JSAPI.js.map +1 -0
- package/dist//345/276/256/344/277/241/346/224/257/344/273/230/Pay.d.ts +11 -0
- package/dist//345/276/256/344/277/241/346/224/257/344/273/230/Pay.d.ts.map +1 -0
- package/dist//345/276/256/344/277/241/346/224/257/344/273/230/Pay.js +13 -0
- package/dist//345/276/256/344/277/241/346/224/257/344/273/230/Pay.js.map +1 -0
- package/dist//345/276/256/344/277/241/346/224/257/344/273/230//346/224/257/344/273/230/344/272/247/345/223/201/JSAPI.d.ts +382 -0
- package/dist//345/276/256/344/277/241/346/224/257/344/273/230//346/224/257/344/273/230/344/272/247/345/223/201/JSAPI.d.ts.map +1 -0
- package/dist//345/276/256/344/277/241/346/224/257/344/273/230//346/224/257/344/273/230/344/272/247/345/223/201/JSAPI.js +343 -0
- package/dist//345/276/256/344/277/241/346/224/257/344/273/230//346/224/257/344/273/230/344/272/247/345/223/201/JSAPI.js.map +1 -0
- package/dist//345/276/256/344/277/241/346/224/257/344/273/230//350/277/220/350/220/245/345/267/245/345/205/267/MerchantTransfer.d.ts +82 -0
- package/dist//345/276/256/344/277/241/346/224/257/344/273/230//350/277/220/350/220/245/345/267/245/345/205/267/MerchantTransfer.d.ts.map +1 -0
- package/dist//345/276/256/344/277/241/346/224/257/344/273/230//350/277/220/350/220/245/345/267/245/345/205/267/MerchantTransfer.js +132 -0
- package/dist//345/276/256/344/277/241/346/224/257/344/273/230//350/277/220/350/220/245/345/267/245/345/205/267/MerchantTransfer.js.map +1 -0
- package/package.json +28 -0
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
import { WeixinSDKErr } from "../../Error.js";
|
|
2
|
+
import WeixinSDK from "../../index.js";
|
|
3
|
+
import * as crypto from 'crypto';
|
|
4
|
+
export default class JSAPI {
|
|
5
|
+
weixinSDK;
|
|
6
|
+
constructor(weixinSDK) {
|
|
7
|
+
this.weixinSDK = weixinSDK;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* 创建JSAPI支付订单
|
|
11
|
+
* @param wxOrder
|
|
12
|
+
* @returns prepay_id
|
|
13
|
+
*/
|
|
14
|
+
async placeOrder(wxOrder) {
|
|
15
|
+
let body = JSON.stringify(wxOrder);
|
|
16
|
+
let authorization = this.weixinSDK.publicUtils.authorization.createAuthorization({
|
|
17
|
+
method: "POST",
|
|
18
|
+
path: "/v3/pay/transactions/jsapi",
|
|
19
|
+
body
|
|
20
|
+
});
|
|
21
|
+
let response = await fetch('https://api.mch.weixin.qq.com/v3/pay/transactions/jsapi', {
|
|
22
|
+
method: 'POST',
|
|
23
|
+
headers: {
|
|
24
|
+
"Authorization": authorization,
|
|
25
|
+
"Accept": 'application/json',
|
|
26
|
+
'Content-Type': 'application/json',
|
|
27
|
+
},
|
|
28
|
+
body: body
|
|
29
|
+
});
|
|
30
|
+
if (response.ok == false) {
|
|
31
|
+
let { code, message } = await response.json();
|
|
32
|
+
throw new WeixinSDKErr(`code:${code}, message:${message}`);
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
let { prepay_id } = await response.json();
|
|
36
|
+
return prepay_id;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* 调起支付
|
|
41
|
+
* @param prepay_id
|
|
42
|
+
* @returns 调起支付方法需要的参数对象
|
|
43
|
+
*/
|
|
44
|
+
invokePayment(prepay_id) {
|
|
45
|
+
//返回预支付交易会话标识, requestPayment小程序调起支付方法参数对象
|
|
46
|
+
let nonceStr = crypto.randomBytes(16).toString('hex');
|
|
47
|
+
let currentTime = Date.now() / 1000;
|
|
48
|
+
let signStr = `${this.weixinSDK.config.WXMP_APPID}\n${currentTime}\n${nonceStr}\nprepay_id=${prepay_id}\n`;
|
|
49
|
+
const signedStr = crypto.createSign('RSA-SHA256').update(signStr).sign(this.weixinSDK.config.WXPAY_mchApiCert_privateKeyPem, 'base64');
|
|
50
|
+
return {
|
|
51
|
+
appid: this.weixinSDK.config.WXMP_APPID,
|
|
52
|
+
timeStamp: currentTime,
|
|
53
|
+
nonceStr: nonceStr,
|
|
54
|
+
package: `prepay_id=${prepay_id}`,
|
|
55
|
+
signType: 'RSA',
|
|
56
|
+
paySign: signedStr
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* 微信支付订单号查询交易订单
|
|
61
|
+
* @param options
|
|
62
|
+
* @returns 交易订单数据
|
|
63
|
+
*/
|
|
64
|
+
async findOneTransactionOrder_by_transactionId(options) {
|
|
65
|
+
let path = `/v3/pay/transactions/id/${options.transaction_id}?mchid=${options.mchid}`;
|
|
66
|
+
let authorization = this.weixinSDK.publicUtils.authorization.createAuthorization({
|
|
67
|
+
method: "GET",
|
|
68
|
+
path: path,
|
|
69
|
+
});
|
|
70
|
+
let response = await fetch(`https://api.mch.weixin.qq.com${path}`, {
|
|
71
|
+
method: 'GET',
|
|
72
|
+
headers: {
|
|
73
|
+
"Authorization": authorization,
|
|
74
|
+
"Accept": 'application/json',
|
|
75
|
+
'Content-Type': 'application/json',
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
if (response.ok == false) {
|
|
79
|
+
let { code, message } = await response.json();
|
|
80
|
+
throw new WeixinSDKErr(`code:${code}, message:${message}`);
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
let data = await response.json();
|
|
84
|
+
return data;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* 商户订单号查询交易订单
|
|
89
|
+
* @param options
|
|
90
|
+
* @returns 交易订单数据
|
|
91
|
+
*/
|
|
92
|
+
async findOneTransactionOrder_by_outTradeNo(options) {
|
|
93
|
+
let path = `/v3/pay/transactions/out_trade_no/${options.out_trade_no}?mchid=${options.mchid}`;
|
|
94
|
+
let authorization = this.weixinSDK.publicUtils.authorization.createAuthorization({
|
|
95
|
+
method: "GET",
|
|
96
|
+
path: path,
|
|
97
|
+
});
|
|
98
|
+
let response = await fetch(`https://api.mch.weixin.qq.com${path}`, {
|
|
99
|
+
method: 'GET',
|
|
100
|
+
headers: {
|
|
101
|
+
"Authorization": authorization,
|
|
102
|
+
"Accept": 'application/json',
|
|
103
|
+
'Content-Type': 'application/json',
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
if (response.ok == false) {
|
|
107
|
+
let { code, message } = await response.json();
|
|
108
|
+
throw new WeixinSDKErr(`code:${code}, message:${message}`);
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
let data = await response.json();
|
|
112
|
+
return data;
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* 关闭交易订单
|
|
117
|
+
* @param out_trade_no
|
|
118
|
+
*/
|
|
119
|
+
async closeTransactionOrder(out_trade_no) {
|
|
120
|
+
let body = JSON.stringify({
|
|
121
|
+
mchid: this.weixinSDK.config.WXPAY_MCHID
|
|
122
|
+
});
|
|
123
|
+
let authorization = this.weixinSDK.publicUtils.authorization.createAuthorization({
|
|
124
|
+
method: "POST",
|
|
125
|
+
path: `/v3/pay/transactions/out-trade-no/${out_trade_no}/close`,
|
|
126
|
+
body
|
|
127
|
+
});
|
|
128
|
+
let response = await fetch(`https://api.mch.weixin.qq.com/v3/pay/transactions/out-trade-no/${out_trade_no}/close`, {
|
|
129
|
+
method: "POST",
|
|
130
|
+
headers: {
|
|
131
|
+
"Authorization": authorization,
|
|
132
|
+
"Accept": 'application/json',
|
|
133
|
+
'Content-Type': 'application/json',
|
|
134
|
+
},
|
|
135
|
+
body: body
|
|
136
|
+
});
|
|
137
|
+
if (response.ok === true) {
|
|
138
|
+
return true;
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
let { code, message } = await response.json();
|
|
142
|
+
throw new WeixinSDKErr(`code:${code}, message:${message}`);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* 退款申请
|
|
147
|
+
* @param options
|
|
148
|
+
* @returns
|
|
149
|
+
*/
|
|
150
|
+
async applyRefund(options) {
|
|
151
|
+
//退款
|
|
152
|
+
let body = JSON.stringify(options);
|
|
153
|
+
let authorization = this.weixinSDK.publicUtils.authorization.createAuthorization({
|
|
154
|
+
method: "POST",
|
|
155
|
+
path: '/v3/refund/domestic/refunds',
|
|
156
|
+
body: body
|
|
157
|
+
});
|
|
158
|
+
let response = await fetch('https://api.mch.weixin.qq.com/v3/refund/domestic/refunds', {
|
|
159
|
+
method: "POST",
|
|
160
|
+
headers: {
|
|
161
|
+
"Authorization": authorization,
|
|
162
|
+
"Accept": 'application/json',
|
|
163
|
+
'Content-Type': 'application/json',
|
|
164
|
+
},
|
|
165
|
+
body: body
|
|
166
|
+
});
|
|
167
|
+
if (response.ok === true) {
|
|
168
|
+
let data = await response.json();
|
|
169
|
+
return data;
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
let { code, message } = await response.json();
|
|
173
|
+
throw new WeixinSDKErr(`applyRefund: code: ${code}: message: ${message}`);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* 查询单笔退款(通过商户退款单号)
|
|
178
|
+
* @param options
|
|
179
|
+
* @returns 交易订单数据
|
|
180
|
+
*/
|
|
181
|
+
async findOneRefundOrder_by_outRefundNo(options) {
|
|
182
|
+
let path = `/v3/refund/domestic/refunds/${options.out_refund_no}`;
|
|
183
|
+
let authorization = this.weixinSDK.publicUtils.authorization.createAuthorization({
|
|
184
|
+
method: "GET",
|
|
185
|
+
path: path,
|
|
186
|
+
});
|
|
187
|
+
let response = await fetch(`https://api.mch.weixin.qq.com${path}`, {
|
|
188
|
+
method: 'GET',
|
|
189
|
+
headers: {
|
|
190
|
+
"Authorization": authorization,
|
|
191
|
+
"Accept": 'application/json',
|
|
192
|
+
'Content-Type': 'application/json',
|
|
193
|
+
}
|
|
194
|
+
});
|
|
195
|
+
if (response.ok == false) {
|
|
196
|
+
let { code, message } = await response.json();
|
|
197
|
+
throw new WeixinSDKErr(`findOneRefundOrder_by_outRefundNo: code:${code}, message:${message}`);
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
let data = await response.json();
|
|
201
|
+
return data;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* 发起异常退款
|
|
206
|
+
* @param options
|
|
207
|
+
* @returns 交易订单数据
|
|
208
|
+
*/
|
|
209
|
+
async applyAbnormalRefund(refund_id, options) {
|
|
210
|
+
let path = `/v3/refund/domestic/refunds/${refund_id}/apply-abnormal-refund`;
|
|
211
|
+
if (options.bank_account) {
|
|
212
|
+
options.bank_account = this.weixinSDK.publicUtils.encryptSensitiveInfo(options.bank_account);
|
|
213
|
+
}
|
|
214
|
+
if (options.real_name) {
|
|
215
|
+
options.real_name = this.weixinSDK.publicUtils.encryptSensitiveInfo(options.real_name);
|
|
216
|
+
}
|
|
217
|
+
let body = JSON.stringify(options);
|
|
218
|
+
let authorization = this.weixinSDK.publicUtils.authorization.createAuthorization({
|
|
219
|
+
method: "POST",
|
|
220
|
+
path: path,
|
|
221
|
+
body
|
|
222
|
+
});
|
|
223
|
+
let response = await fetch(`https://api.mch.weixin.qq.com${path}`, {
|
|
224
|
+
method: 'GET',
|
|
225
|
+
headers: {
|
|
226
|
+
"Authorization": authorization,
|
|
227
|
+
"Accept": 'application/json',
|
|
228
|
+
'Content-Type': 'application/json',
|
|
229
|
+
},
|
|
230
|
+
body
|
|
231
|
+
});
|
|
232
|
+
if (response.ok == false) {
|
|
233
|
+
let { code, message } = await response.json();
|
|
234
|
+
throw new WeixinSDKErr(`applyAbnormalRefund: code:${code}, message:${message}`);
|
|
235
|
+
}
|
|
236
|
+
else {
|
|
237
|
+
let data = await response.json();
|
|
238
|
+
return data;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* 申请交易账单
|
|
243
|
+
* @param options
|
|
244
|
+
* @returns 交易订单数据
|
|
245
|
+
*/
|
|
246
|
+
async applyTradeBill(options) {
|
|
247
|
+
let path = `/v3/bill/tradebill?bill_date=${options.bill_date}&bill_type=${options.bill_type}&tar_type=${options.tar_type}`;
|
|
248
|
+
let authorization = this.weixinSDK.publicUtils.authorization.createAuthorization({
|
|
249
|
+
method: "GET",
|
|
250
|
+
path: path,
|
|
251
|
+
});
|
|
252
|
+
let response = await fetch(`https://api.mch.weixin.qq.com${path}`, {
|
|
253
|
+
method: 'GET',
|
|
254
|
+
headers: {
|
|
255
|
+
"Authorization": authorization,
|
|
256
|
+
"Accept": 'application/json',
|
|
257
|
+
'Content-Type': 'application/json',
|
|
258
|
+
},
|
|
259
|
+
});
|
|
260
|
+
if (response.ok == false) {
|
|
261
|
+
let { code, message } = await response.json();
|
|
262
|
+
throw new WeixinSDKErr(`applyTradeBill: code:${code}, message:${message}`);
|
|
263
|
+
}
|
|
264
|
+
else {
|
|
265
|
+
let data = await response.json();
|
|
266
|
+
return data;
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* 申请资金账单
|
|
271
|
+
*/
|
|
272
|
+
async applyFundflowbill(options) {
|
|
273
|
+
let path = `/v3/bill/fundflowbill?bill_date=${options.bill_date}&account_type=${options.account_type}&tar_type=${options.tar_type}`;
|
|
274
|
+
let authorization = this.weixinSDK.publicUtils.authorization.createAuthorization({
|
|
275
|
+
method: "GET",
|
|
276
|
+
path: path,
|
|
277
|
+
});
|
|
278
|
+
let response = await fetch(`https://api.mch.weixin.qq.com${path}`, {
|
|
279
|
+
method: 'GET',
|
|
280
|
+
headers: {
|
|
281
|
+
"Authorization": authorization,
|
|
282
|
+
"Accept": 'application/json',
|
|
283
|
+
'Content-Type': 'application/json',
|
|
284
|
+
},
|
|
285
|
+
});
|
|
286
|
+
if (response.ok == false) {
|
|
287
|
+
let { code, message } = await response.json();
|
|
288
|
+
throw new WeixinSDKErr(`applyFundflowbill: code:${code}, message:${message}`);
|
|
289
|
+
}
|
|
290
|
+
else {
|
|
291
|
+
let data = await response.json();
|
|
292
|
+
return data;
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
/**
|
|
296
|
+
* 下载账单
|
|
297
|
+
*/
|
|
298
|
+
async downloadBill(options) {
|
|
299
|
+
const { hash_type, hash_value, download_url } = options;
|
|
300
|
+
const url = new URL(download_url);
|
|
301
|
+
const path = url.pathname + url.search;
|
|
302
|
+
let authorization = this.weixinSDK.publicUtils.authorization.createAuthorization({
|
|
303
|
+
method: "GET",
|
|
304
|
+
path: path,
|
|
305
|
+
});
|
|
306
|
+
let response = await fetch(download_url, {
|
|
307
|
+
method: 'GET',
|
|
308
|
+
headers: {
|
|
309
|
+
"Authorization": authorization,
|
|
310
|
+
},
|
|
311
|
+
});
|
|
312
|
+
const contentType = response.headers.get('content-type') || '';
|
|
313
|
+
if (response.ok == false) {
|
|
314
|
+
if (contentType.includes('application/json')) {
|
|
315
|
+
let { code, message } = await response.json();
|
|
316
|
+
throw new WeixinSDKErr(`downloadBill: code:${code}, message:${message}`);
|
|
317
|
+
}
|
|
318
|
+
else {
|
|
319
|
+
const text = await response.text();
|
|
320
|
+
throw new WeixinSDKErr(`downloadBill: 下载账单失败, HTTP状态码: ${response.status}, text: ${text}`);
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
else {
|
|
324
|
+
let arrayBuffer = await response.arrayBuffer();
|
|
325
|
+
// 2. 转为 Buffer
|
|
326
|
+
const buffer = Buffer.from(arrayBuffer);
|
|
327
|
+
if (hash_type && hash_value) {
|
|
328
|
+
// 3. 计算哈希
|
|
329
|
+
const actualHash = crypto
|
|
330
|
+
.createHash(hash_type)
|
|
331
|
+
.update(buffer)
|
|
332
|
+
.digest('hex')
|
|
333
|
+
.toLowerCase();
|
|
334
|
+
// 4. 校验
|
|
335
|
+
if (actualHash !== hash_value.toLowerCase()) {
|
|
336
|
+
throw new WeixinSDKErr(`downloadBill: 账单哈希校验失败`);
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
return buffer;
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
//# sourceMappingURL=JSAPI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JSAPI.js","sourceRoot":"","sources":["../../../src/微信支付/支付产品/JSAPI.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import type WeixinSDK from "../../index.js";
|
|
2
|
+
import type { cent, RFC3339DateStr } from "../../types/global.js";
|
|
3
|
+
export default class MerchantTransfer {
|
|
4
|
+
weixinSDK: WeixinSDK;
|
|
5
|
+
constructor(weixinSDK: WeixinSDK);
|
|
6
|
+
/**
|
|
7
|
+
* 发起转账
|
|
8
|
+
*/
|
|
9
|
+
applyTransfer(options: {
|
|
10
|
+
appid: string;
|
|
11
|
+
out_bill_no: string;
|
|
12
|
+
transfer_scene_id: string;
|
|
13
|
+
openid: string;
|
|
14
|
+
user_name?: string;
|
|
15
|
+
transfer_amount: cent;
|
|
16
|
+
transfer_remark: string;
|
|
17
|
+
notify_url?: string;
|
|
18
|
+
user_recv_perception?: '活动奖励' | '现金奖励' | '退款' | '商家赔付' | '劳务报酬' | '报销款' | '企业补贴' | '开工利是' | '货款' | '二手回收货款' | '公益补助金' | '行政补贴' | '行政奖励' | '保险理赔款';
|
|
19
|
+
transfer_scene_report_infos: {
|
|
20
|
+
info_type: '活动名称' | '奖励说明';
|
|
21
|
+
info_content: string;
|
|
22
|
+
}[];
|
|
23
|
+
}): Promise<{
|
|
24
|
+
out_bill_no: string;
|
|
25
|
+
transfer_bill_no: string;
|
|
26
|
+
create_time: RFC3339DateStr;
|
|
27
|
+
state: "ACCEPTED" | "PROCESSING" | "WAIT_USER_CONFIRM" | "TRANSFERING" | "SUCCESS" | "FAIL" | "CANCELING" | "CANCELLED";
|
|
28
|
+
package_info?: string;
|
|
29
|
+
}>;
|
|
30
|
+
/**
|
|
31
|
+
* 撤销转账
|
|
32
|
+
*/
|
|
33
|
+
revokeTransfer(out_bill_no: string): Promise<{
|
|
34
|
+
out_bill_no: string;
|
|
35
|
+
transfer_bill_no: string;
|
|
36
|
+
state: "CANCELING" | "CANCELLED";
|
|
37
|
+
update_time: RFC3339DateStr;
|
|
38
|
+
}>;
|
|
39
|
+
/**
|
|
40
|
+
* 商户单号查询转账单
|
|
41
|
+
* @param options
|
|
42
|
+
* @returns 交易订单数据
|
|
43
|
+
*/
|
|
44
|
+
findOneTransfer_by_outBillNo(options: {
|
|
45
|
+
out_bill_no: string;
|
|
46
|
+
}): Promise<{
|
|
47
|
+
mch_id: string;
|
|
48
|
+
out_bill_no: string;
|
|
49
|
+
transfer_bill_no: string;
|
|
50
|
+
appid: string;
|
|
51
|
+
state: "ACCEPTED" | "PROCESSING" | "WAIT_USER_CONFIRM" | "TRANSFERING" | "SUCCESS" | "FAIL" | "CANCELING" | "CANCELLED";
|
|
52
|
+
transfer_amount: cent;
|
|
53
|
+
transfer_remark: string;
|
|
54
|
+
fail_reason?: string;
|
|
55
|
+
openid?: string;
|
|
56
|
+
user_name?: string;
|
|
57
|
+
create_time: RFC3339DateStr;
|
|
58
|
+
update_time: RFC3339DateStr;
|
|
59
|
+
}>;
|
|
60
|
+
/**
|
|
61
|
+
* 微信单号查询转账单
|
|
62
|
+
* @param options
|
|
63
|
+
* @returns
|
|
64
|
+
*/
|
|
65
|
+
findOneTransfer_by_transferBillNo(options: {
|
|
66
|
+
transfer_bill_no: string;
|
|
67
|
+
}): Promise<{
|
|
68
|
+
mch_id: string;
|
|
69
|
+
out_bill_no: string;
|
|
70
|
+
transfer_bill_no: string;
|
|
71
|
+
appid: string;
|
|
72
|
+
state: "ACCEPTED" | "PROCESSING" | "WAIT_USER_CONFIRM" | "TRANSFERING" | "SUCCESS" | "FAIL" | "CANCELING" | "CANCELLED";
|
|
73
|
+
transfer_amount: cent;
|
|
74
|
+
transfer_remark: string;
|
|
75
|
+
fail_reason?: string;
|
|
76
|
+
openid?: string;
|
|
77
|
+
user_name?: string;
|
|
78
|
+
create_time: RFC3339DateStr;
|
|
79
|
+
update_time: RFC3339DateStr;
|
|
80
|
+
}>;
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=MerchantTransfer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MerchantTransfer.d.ts","sourceRoot":"","sources":["../../../src/微信支付/运营工具/MerchantTransfer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,SAAS,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAElE,MAAM,CAAC,OAAO,OAAO,gBAAgB;IACjC,SAAS,EAAE,SAAS,CAAA;gBACR,SAAS,EAAE,SAAS;IAIhC;;OAEG;IACG,aAAa,CAAC,OAAO,EAAE;QACzB,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,eAAe,EAAE,IAAI,CAAC;QACtB,eAAe,EAAE,MAAM,CAAC;QACxB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,oBAAoB,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;QAClJ,2BAA2B,EAAE;YACzB,SAAS,EAAE,MAAM,GAAG,MAAM,CAAC;YAC3B,YAAY,EAAE,MAAM,CAAC;SACxB,EAAE,CAAA;KACN;qBAgCwB,MAAM;0BACD,MAAM;qBACX,cAAc;eACpB,UAAU,GAAG,YAAY,GAAG,mBAAmB,GAAG,aAAa,GAAG,SAAS,GAAG,MAAM,GAAG,WAAW,GAAG,WAAW;uBACxG,MAAM;;IAUjC;;OAEG;IACG,cAAc,CAAC,WAAW,EAAE,MAAM;qBA8Bf,MAAM;0BACD,MAAM;eACjB,WAAW,GAAG,WAAW;qBACnB,cAAc;;IASvC;;;;OAIG;IACU,4BAA4B,CAAC,OAAO,EAAE;QAC/C,WAAW,EAAE,MAAM,CAAC;KACvB;gBAwBmB,MAAM;qBACD,MAAM;0BACD,MAAM;eACjB,MAAM;eACN,UAAU,GAAG,YAAY,GAAG,mBAAmB,GAAG,aAAa,GAAG,SAAS,GAAG,MAAM,GAAG,WAAW,GAAG,WAAW;yBACtG,IAAI;yBACJ,MAAM;sBACT,MAAM;iBACX,MAAM;oBACH,MAAM;qBACL,cAAc;qBACd,cAAc;;IAQvC;;;;OAIG;IACU,iCAAiC,CAAC,OAAO,EAAE;QACpD,gBAAgB,EAAE,MAAM,CAAC;KAC5B;gBAwBmB,MAAM;qBACD,MAAM;0BACD,MAAM;eACjB,MAAM;eACN,UAAU,GAAG,YAAY,GAAG,mBAAmB,GAAG,aAAa,GAAG,SAAS,GAAG,MAAM,GAAG,WAAW,GAAG,WAAW;yBACtG,IAAI;yBACJ,MAAM;sBACT,MAAM;iBACX,MAAM;oBACH,MAAM;qBACL,cAAc;qBACd,cAAc;;CAa1C"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { WeixinSDKErr } from "../../Error.js";
|
|
2
|
+
export default class MerchantTransfer {
|
|
3
|
+
weixinSDK;
|
|
4
|
+
constructor(weixinSDK) {
|
|
5
|
+
this.weixinSDK = weixinSDK;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* 发起转账
|
|
9
|
+
*/
|
|
10
|
+
async applyTransfer(options) {
|
|
11
|
+
let body = JSON.stringify(options);
|
|
12
|
+
let authorization = this.weixinSDK.publicUtils.authorization.createAuthorization({
|
|
13
|
+
method: "POST",
|
|
14
|
+
path: "/v3/fund-app/mch-transfer/transfer-bills",
|
|
15
|
+
body
|
|
16
|
+
});
|
|
17
|
+
let response = await fetch('https://api.mch.weixin.qq.com/v3/fund-app/mch-transfer/transfer-bills', {
|
|
18
|
+
method: 'POST',
|
|
19
|
+
headers: {
|
|
20
|
+
"Authorization": authorization,
|
|
21
|
+
"Accept": 'application/json',
|
|
22
|
+
'Content-Type': 'application/json',
|
|
23
|
+
},
|
|
24
|
+
body: body
|
|
25
|
+
});
|
|
26
|
+
const contentType = response.headers.get('Content-Type') || '';
|
|
27
|
+
if (response.ok == false) {
|
|
28
|
+
if (contentType.includes('application/json')) {
|
|
29
|
+
let { code, message } = await response.json();
|
|
30
|
+
throw new WeixinSDKErr(`applyTransfer: code:${code}, message:${message}`);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
const text = await response.text();
|
|
34
|
+
throw new WeixinSDKErr(`applyTransfer: text:${text}`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
let data = await response.json();
|
|
39
|
+
return data;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* 撤销转账
|
|
44
|
+
*/
|
|
45
|
+
async revokeTransfer(out_bill_no) {
|
|
46
|
+
let path = `/v3/fund-app/mch-transfer/transfer-bills/out-bill-no/${out_bill_no}/cancel`;
|
|
47
|
+
let authorization = this.weixinSDK.publicUtils.authorization.createAuthorization({
|
|
48
|
+
method: "POST",
|
|
49
|
+
path
|
|
50
|
+
});
|
|
51
|
+
let response = await fetch(`https://api.mch.weixin.qq.com${path}`, {
|
|
52
|
+
method: 'POST',
|
|
53
|
+
headers: {
|
|
54
|
+
"Authorization": authorization,
|
|
55
|
+
"Accept": 'application/json',
|
|
56
|
+
'Content-Type': 'application/json',
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
const contentType = response.headers.get('Content-Type') || '';
|
|
60
|
+
if (response.ok == false) {
|
|
61
|
+
if (contentType.includes('application/json')) {
|
|
62
|
+
let { code, message } = await response.json();
|
|
63
|
+
throw new WeixinSDKErr(`revokeTransfer: code:${code}, message:${message}`);
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
const text = await response.text();
|
|
67
|
+
throw new WeixinSDKErr(`revokeTransfer: text:${text}`);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
let data = await response.json();
|
|
72
|
+
return data;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* 商户单号查询转账单
|
|
77
|
+
* @param options
|
|
78
|
+
* @returns 交易订单数据
|
|
79
|
+
*/
|
|
80
|
+
async findOneTransfer_by_outBillNo(options) {
|
|
81
|
+
let path = `/v3/fund-app/mch-transfer/transfer-bills/out-bill-no/${options.out_bill_no}`;
|
|
82
|
+
let authorization = this.weixinSDK.publicUtils.authorization.createAuthorization({
|
|
83
|
+
method: "GET",
|
|
84
|
+
path: path,
|
|
85
|
+
});
|
|
86
|
+
let response = await fetch(`https://api.mch.weixin.qq.com${path}`, {
|
|
87
|
+
method: 'GET',
|
|
88
|
+
headers: {
|
|
89
|
+
"Authorization": authorization,
|
|
90
|
+
"Accept": 'application/json',
|
|
91
|
+
'Content-Type': 'application/json',
|
|
92
|
+
}
|
|
93
|
+
});
|
|
94
|
+
if (response.ok == false) {
|
|
95
|
+
let { code, message } = await response.json();
|
|
96
|
+
throw new WeixinSDKErr(`code:${code}, message:${message}`);
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
let data = await response.json();
|
|
100
|
+
return data;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* 微信单号查询转账单
|
|
105
|
+
* @param options
|
|
106
|
+
* @returns
|
|
107
|
+
*/
|
|
108
|
+
async findOneTransfer_by_transferBillNo(options) {
|
|
109
|
+
let path = `/v3/fund-app/mch-transfer/transfer-bills/transfer-bill-no/${options.transfer_bill_no}`;
|
|
110
|
+
let authorization = this.weixinSDK.publicUtils.authorization.createAuthorization({
|
|
111
|
+
method: "GET",
|
|
112
|
+
path: path,
|
|
113
|
+
});
|
|
114
|
+
let response = await fetch(`https://api.mch.weixin.qq.com${path}`, {
|
|
115
|
+
method: 'GET',
|
|
116
|
+
headers: {
|
|
117
|
+
"Authorization": authorization,
|
|
118
|
+
"Accept": 'application/json',
|
|
119
|
+
'Content-Type': 'application/json',
|
|
120
|
+
}
|
|
121
|
+
});
|
|
122
|
+
if (response.ok == false) {
|
|
123
|
+
let { code, message } = await response.json();
|
|
124
|
+
throw new WeixinSDKErr(`code:${code}, message:${message}`);
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
let data = await response.json();
|
|
128
|
+
return data;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=MerchantTransfer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MerchantTransfer.js","sourceRoot":"","sources":["../../../src/微信支付/运营工具/MerchantTransfer.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "weixin-server-sdk",
|
|
3
|
+
"version": "1.0.2",
|
|
4
|
+
"description": "微信相关的请求sdk",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"微信",
|
|
7
|
+
"wx",
|
|
8
|
+
"sdk"
|
|
9
|
+
],
|
|
10
|
+
"license": "MIT",
|
|
11
|
+
"author": "dadajiege",
|
|
12
|
+
"type": "module",
|
|
13
|
+
"main": "./dist/index.js",
|
|
14
|
+
"types": "./dist/index.d.ts",
|
|
15
|
+
"files": [
|
|
16
|
+
"dist"
|
|
17
|
+
],
|
|
18
|
+
"scripts": {
|
|
19
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
20
|
+
},
|
|
21
|
+
"devDependencies": {
|
|
22
|
+
"typescript": "^5.9.3",
|
|
23
|
+
"@types/node": "^25.0.3"
|
|
24
|
+
},
|
|
25
|
+
"dependencies": {
|
|
26
|
+
|
|
27
|
+
}
|
|
28
|
+
}
|