wxpay-nodejs-sdk 0.2.4 → 0.2.5
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/index.d.mts +1768 -34
- package/dist/index.d.ts +1768 -34
- package/dist/index.js +1495 -414
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1475 -414
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,16 +1,24 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var fs2 = require('fs');
|
|
4
4
|
var os = require('os');
|
|
5
5
|
var crypto2 = require('crypto');
|
|
6
|
+
var zlib = require('zlib');
|
|
6
7
|
|
|
7
8
|
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
8
9
|
|
|
9
|
-
var
|
|
10
|
+
var fs2__default = /*#__PURE__*/_interopDefault(fs2);
|
|
10
11
|
var os__default = /*#__PURE__*/_interopDefault(os);
|
|
11
12
|
var crypto2__default = /*#__PURE__*/_interopDefault(crypto2);
|
|
13
|
+
var zlib__default = /*#__PURE__*/_interopDefault(zlib);
|
|
12
14
|
|
|
13
15
|
// src/core/client.ts
|
|
16
|
+
|
|
17
|
+
// package.json
|
|
18
|
+
var version = "0.2.5";
|
|
19
|
+
|
|
20
|
+
// src/version.ts
|
|
21
|
+
var SDK_VERSION = version;
|
|
14
22
|
var CertificateManager = class {
|
|
15
23
|
/** 平台证书缓存 Map<序列号, 证书信息> */
|
|
16
24
|
certificates = /* @__PURE__ */ new Map();
|
|
@@ -65,6 +73,7 @@ var CertificateManager = class {
|
|
|
65
73
|
* 获取用于验签的公钥
|
|
66
74
|
*
|
|
67
75
|
* 优先返回微信支付公钥(公钥模式),否则根据证书序列号查找平台证书。
|
|
76
|
+
* 在组合模式下,如果证书未找到,会回退到微信支付公钥。
|
|
68
77
|
*
|
|
69
78
|
* @param serialNo - 证书序列号或公钥ID
|
|
70
79
|
* @returns PEM 格式的公钥,不存在则返回 null
|
|
@@ -77,7 +86,12 @@ var CertificateManager = class {
|
|
|
77
86
|
return this.wxpayPublicKey;
|
|
78
87
|
}
|
|
79
88
|
const cert = this.certificates.get(serialNo);
|
|
80
|
-
if (!cert)
|
|
89
|
+
if (!cert) {
|
|
90
|
+
if (this.wxpayPublicKey) {
|
|
91
|
+
return this.wxpayPublicKey;
|
|
92
|
+
}
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
81
95
|
const { ciphertext, nonce, associatedData, algorithm } = cert.encryptCertificate;
|
|
82
96
|
if (algorithm === "RAW_PUBLIC_KEY") {
|
|
83
97
|
return Buffer.from(ciphertext, "base64").toString("utf-8");
|
|
@@ -98,6 +112,17 @@ var CertificateManager = class {
|
|
|
98
112
|
return null;
|
|
99
113
|
}
|
|
100
114
|
}
|
|
115
|
+
/**
|
|
116
|
+
* 判断当前是否为组合验签模式
|
|
117
|
+
*
|
|
118
|
+
* 当同时配置了微信支付公钥和平台证书时,返回 true。
|
|
119
|
+
* 组合模式用于平台证书→微信支付公钥的灰度迁移期间。
|
|
120
|
+
*
|
|
121
|
+
* @returns 是否为组合模式
|
|
122
|
+
*/
|
|
123
|
+
isCombinedMode() {
|
|
124
|
+
return this.wxpayPublicKey !== null && this.certificates.size > 0;
|
|
125
|
+
}
|
|
101
126
|
/**
|
|
102
127
|
* 更新平台证书
|
|
103
128
|
*/
|
|
@@ -264,7 +289,6 @@ var MalformedMessageException = class extends WxPayError {
|
|
|
264
289
|
};
|
|
265
290
|
|
|
266
291
|
// src/utils/http.ts
|
|
267
|
-
var SDK_VERSION = "0.2.1";
|
|
268
292
|
function getUserAgent() {
|
|
269
293
|
const platform = os__default.default.platform();
|
|
270
294
|
const arch = os__default.default.arch();
|
|
@@ -466,14 +490,12 @@ var WxPayClient = class _WxPayClient {
|
|
|
466
490
|
static PRODUCTION_BACKUP = "https://api2.mch.weixin.qq.com";
|
|
467
491
|
/** 沙箱环境 API 地址 */
|
|
468
492
|
static SANDBOX_BASE = "https://api.mch.weixin.qq.com/sandboxnew";
|
|
469
|
-
/** SDK 版本号 */
|
|
470
|
-
static SDK_VERSION = "0.2.1";
|
|
471
493
|
/** 动态 User-Agent 字符串 */
|
|
472
494
|
static USER_AGENT = (() => {
|
|
473
495
|
const platform = os__default.default.platform();
|
|
474
496
|
const arch = os__default.default.arch();
|
|
475
497
|
const nodeVersion = process.version;
|
|
476
|
-
return `wxpay-nodejs-sdk/${
|
|
498
|
+
return `wxpay-nodejs-sdk/${SDK_VERSION} (${platform} ${arch}) Node.js/${nodeVersion}`;
|
|
477
499
|
})();
|
|
478
500
|
/** 商户号 */
|
|
479
501
|
mchid;
|
|
@@ -484,6 +506,7 @@ var WxPayClient = class _WxPayClient {
|
|
|
484
506
|
baseUrl;
|
|
485
507
|
backupUrl;
|
|
486
508
|
enableResponseVerification;
|
|
509
|
+
customFetch;
|
|
487
510
|
/** 平台证书管理器 */
|
|
488
511
|
certificates;
|
|
489
512
|
constructor(options) {
|
|
@@ -495,6 +518,7 @@ var WxPayClient = class _WxPayClient {
|
|
|
495
518
|
this.baseUrl = options.sandbox ? _WxPayClient.SANDBOX_BASE : _WxPayClient.PRODUCTION_BASE;
|
|
496
519
|
this.backupUrl = options.sandbox ? null : _WxPayClient.PRODUCTION_BACKUP;
|
|
497
520
|
this.enableResponseVerification = options.enableResponseVerification ?? true;
|
|
521
|
+
this.customFetch = options.customFetch ?? fetch;
|
|
498
522
|
this.certificates = new CertificateManager(this.apiV3Key, options.platformCertificates);
|
|
499
523
|
if (options.wxpayPublicKeyId && options.wxpayPublicKey) {
|
|
500
524
|
const publicKey = this.resolvePublicKey(options.wxpayPublicKey);
|
|
@@ -576,7 +600,7 @@ var WxPayClient = class _WxPayClient {
|
|
|
576
600
|
controller.abort();
|
|
577
601
|
}, this.timeout);
|
|
578
602
|
try {
|
|
579
|
-
const response = await
|
|
603
|
+
const response = await this.customFetch(url, {
|
|
580
604
|
method,
|
|
581
605
|
headers,
|
|
582
606
|
signal: controller.signal
|
|
@@ -703,7 +727,7 @@ var WxPayClient = class _WxPayClient {
|
|
|
703
727
|
controller.abort();
|
|
704
728
|
}, this.timeout);
|
|
705
729
|
try {
|
|
706
|
-
const response = await
|
|
730
|
+
const response = await this.customFetch(url, {
|
|
707
731
|
method: "POST",
|
|
708
732
|
headers,
|
|
709
733
|
body,
|
|
@@ -779,7 +803,7 @@ var WxPayClient = class _WxPayClient {
|
|
|
779
803
|
controller.abort();
|
|
780
804
|
}, this.timeout);
|
|
781
805
|
try {
|
|
782
|
-
const response = await
|
|
806
|
+
const response = await this.customFetch(url, {
|
|
783
807
|
method,
|
|
784
808
|
headers,
|
|
785
809
|
body: bodyStr || void 0,
|
|
@@ -830,7 +854,7 @@ var WxPayClient = class _WxPayClient {
|
|
|
830
854
|
if (Buffer.isBuffer(key)) return key;
|
|
831
855
|
if (key.startsWith("-----BEGIN")) return key;
|
|
832
856
|
try {
|
|
833
|
-
return
|
|
857
|
+
return fs2__default.default.readFileSync(key, "utf-8");
|
|
834
858
|
} catch {
|
|
835
859
|
return key;
|
|
836
860
|
}
|
|
@@ -842,7 +866,7 @@ var WxPayClient = class _WxPayClient {
|
|
|
842
866
|
if (Buffer.isBuffer(key)) return key.toString("utf-8");
|
|
843
867
|
if (key.startsWith("-----BEGIN")) return key;
|
|
844
868
|
try {
|
|
845
|
-
return
|
|
869
|
+
return fs2__default.default.readFileSync(key, "utf-8");
|
|
846
870
|
} catch {
|
|
847
871
|
return key;
|
|
848
872
|
}
|
|
@@ -972,56 +996,422 @@ var CertificateService = class {
|
|
|
972
996
|
return decrypted.toString("utf-8");
|
|
973
997
|
}
|
|
974
998
|
};
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
999
|
+
function generateAppPaySign(appId, timeStamp, nonceStr, prepayId, privateKey) {
|
|
1000
|
+
const signString = `${appId}
|
|
1001
|
+
${timeStamp}
|
|
1002
|
+
${nonceStr}
|
|
1003
|
+
prepay_id=${prepayId}
|
|
1004
|
+
`;
|
|
1005
|
+
const signer = crypto2__default.default.createSign("RSA-SHA256");
|
|
1006
|
+
signer.update(signString);
|
|
1007
|
+
signer.end();
|
|
1008
|
+
return signer.sign(privateKey, "base64");
|
|
1009
|
+
}
|
|
1010
|
+
function buildAppBridgeConfig(appId, partnerId, prepayId, privateKey) {
|
|
1011
|
+
const timeStamp = String(Math.floor(Date.now() / 1e3));
|
|
1012
|
+
const nonceStr = generateNonceStr();
|
|
1013
|
+
const sign2 = generateAppPaySign(appId, timeStamp, nonceStr, prepayId, privateKey);
|
|
1014
|
+
return {
|
|
1015
|
+
appId,
|
|
1016
|
+
partnerId,
|
|
1017
|
+
prepayId,
|
|
1018
|
+
packageValue: "Sign=WXPay",
|
|
1019
|
+
nonceStr,
|
|
1020
|
+
timeStamp,
|
|
1021
|
+
sign: sign2
|
|
1022
|
+
};
|
|
1023
|
+
}
|
|
1024
|
+
function generatePaySign(appId, timeStamp, nonceStr, prepayId, privateKey) {
|
|
1025
|
+
const signString = `${appId}
|
|
1026
|
+
${timeStamp}
|
|
1027
|
+
${nonceStr}
|
|
1028
|
+
prepay_id=${prepayId}
|
|
1029
|
+
`;
|
|
1030
|
+
const signer = crypto2__default.default.createSign("RSA-SHA256");
|
|
1031
|
+
signer.update(signString);
|
|
1032
|
+
signer.end();
|
|
1033
|
+
return signer.sign(privateKey, "base64");
|
|
1034
|
+
}
|
|
1035
|
+
function generateNonceStr() {
|
|
1036
|
+
return crypto2__default.default.randomUUID().replace(/-/g, "");
|
|
1037
|
+
}
|
|
1038
|
+
function buildJsapiBridgeConfig(appId, prepayId, privateKey) {
|
|
1039
|
+
const timeStamp = String(Math.floor(Date.now() / 1e3));
|
|
1040
|
+
const nonceStr = generateNonceStr();
|
|
1041
|
+
const paySign = generatePaySign(appId, timeStamp, nonceStr, prepayId, privateKey);
|
|
1042
|
+
return {
|
|
1043
|
+
appId,
|
|
1044
|
+
timeStamp,
|
|
1045
|
+
nonceStr,
|
|
1046
|
+
package: `prepay_id=${prepayId}`,
|
|
1047
|
+
signType: "RSA",
|
|
1048
|
+
paySign
|
|
1049
|
+
};
|
|
1050
|
+
}
|
|
1051
|
+
function buildMiniProgramBridgeConfig(appId, prepayId, privateKey) {
|
|
1052
|
+
const timeStamp = String(Math.floor(Date.now() / 1e3));
|
|
1053
|
+
const nonceStr = generateNonceStr();
|
|
1054
|
+
const paySign = generatePaySign(appId, timeStamp, nonceStr, prepayId, privateKey);
|
|
1055
|
+
return {
|
|
1056
|
+
timeStamp,
|
|
1057
|
+
nonceStr,
|
|
1058
|
+
package: `prepay_id=${prepayId}`,
|
|
1059
|
+
signType: "RSA",
|
|
1060
|
+
paySign
|
|
1061
|
+
};
|
|
1062
|
+
}
|
|
1063
|
+
function generatePayScorePaySign(appId, timeStamp, nonceStr, serviceId, outOrderNo, privateKey) {
|
|
1064
|
+
const packageStr = `service_id=${serviceId}&out_order_no=${outOrderNo}&need_sign_type=RSA`;
|
|
1065
|
+
const signString = `${appId}
|
|
1066
|
+
${timeStamp}
|
|
1067
|
+
${nonceStr}
|
|
1068
|
+
${packageStr}
|
|
1069
|
+
`;
|
|
1070
|
+
const signer = crypto2__default.default.createSign("RSA-SHA256");
|
|
1071
|
+
signer.update(signString);
|
|
1072
|
+
signer.end();
|
|
1073
|
+
return signer.sign(privateKey, "base64");
|
|
1074
|
+
}
|
|
1075
|
+
function buildPayScoreJsapiBridgeConfig(appId, mchId, serviceId, outOrderNo, privateKey) {
|
|
1076
|
+
const timestamp = String(Math.floor(Date.now() / 1e3));
|
|
1077
|
+
const nonceStr = generateNonceStr();
|
|
1078
|
+
const sign2 = generatePayScorePaySign(
|
|
1079
|
+
appId,
|
|
1080
|
+
timestamp,
|
|
1081
|
+
nonceStr,
|
|
1082
|
+
serviceId,
|
|
1083
|
+
outOrderNo,
|
|
1084
|
+
privateKey
|
|
1085
|
+
);
|
|
1086
|
+
return {
|
|
1087
|
+
appid: appId,
|
|
1088
|
+
mchid: mchId,
|
|
1089
|
+
service_id: serviceId,
|
|
1090
|
+
out_order_no: outOrderNo,
|
|
1091
|
+
timestamp,
|
|
1092
|
+
nonce_str: nonceStr,
|
|
1093
|
+
sign_type: "RSA",
|
|
1094
|
+
sign: sign2
|
|
1095
|
+
};
|
|
1096
|
+
}
|
|
1097
|
+
function buildPayScoreMiniProgramBridgeConfig(mchId, serviceId, outOrderNo, appId, privateKey) {
|
|
1098
|
+
const timestamp = String(Math.floor(Date.now() / 1e3));
|
|
1099
|
+
const nonceStr = generateNonceStr();
|
|
1100
|
+
const sign2 = generatePayScorePaySign(
|
|
1101
|
+
appId,
|
|
1102
|
+
timestamp,
|
|
1103
|
+
nonceStr,
|
|
1104
|
+
serviceId,
|
|
1105
|
+
outOrderNo,
|
|
1106
|
+
privateKey
|
|
1107
|
+
);
|
|
1108
|
+
return {
|
|
1109
|
+
mchid: mchId,
|
|
1110
|
+
service_id: serviceId,
|
|
1111
|
+
out_order_no: outOrderNo,
|
|
1112
|
+
timestamp,
|
|
1113
|
+
nonce_str: nonceStr,
|
|
1114
|
+
sign_type: "RSA",
|
|
1115
|
+
sign: sign2
|
|
1116
|
+
};
|
|
1117
|
+
}
|
|
1118
|
+
function buildPayScoreAppBridgeConfig(appId, mchId, serviceId, outOrderNo, privateKey) {
|
|
1119
|
+
const timestamp = String(Math.floor(Date.now() / 1e3));
|
|
1120
|
+
const nonceStr = generateNonceStr();
|
|
1121
|
+
const sign2 = generatePayScorePaySign(
|
|
1122
|
+
appId,
|
|
1123
|
+
timestamp,
|
|
1124
|
+
nonceStr,
|
|
1125
|
+
serviceId,
|
|
1126
|
+
outOrderNo,
|
|
1127
|
+
privateKey
|
|
1128
|
+
);
|
|
1129
|
+
return {
|
|
1130
|
+
appid: appId,
|
|
1131
|
+
mchid: mchId,
|
|
1132
|
+
service_id: serviceId,
|
|
1133
|
+
out_order_no: outOrderNo,
|
|
1134
|
+
timestamp,
|
|
1135
|
+
nonce_str: nonceStr,
|
|
1136
|
+
sign_type: "RSA",
|
|
1137
|
+
sign: sign2
|
|
1138
|
+
};
|
|
1139
|
+
}
|
|
1140
|
+
function buildMerchantTransferJsapiBridgeConfig(mchId, appId, packageInfo) {
|
|
1141
|
+
return {
|
|
1142
|
+
mchId,
|
|
1143
|
+
appId,
|
|
1144
|
+
package: packageInfo
|
|
1145
|
+
};
|
|
1146
|
+
}
|
|
1147
|
+
function buildMerchantTransferMiniProgramBridgeConfig(mchId, appId, packageInfo) {
|
|
1148
|
+
return {
|
|
1149
|
+
mchId,
|
|
1150
|
+
appId,
|
|
1151
|
+
package: packageInfo
|
|
1152
|
+
};
|
|
1153
|
+
}
|
|
1154
|
+
function buildMerchantTransferAuthorizationJsapiBridgeConfig(mchId, appId, packageInfo) {
|
|
1155
|
+
return {
|
|
1156
|
+
mchId,
|
|
1157
|
+
appId,
|
|
1158
|
+
package: packageInfo
|
|
1159
|
+
};
|
|
1160
|
+
}
|
|
1161
|
+
var PARKING_SERVICE_APPID = "wxbcad394b3d99dac9";
|
|
1162
|
+
var PARKING_SERVICE_PATH = "/pages/auth-creditpay/auth-creditpay";
|
|
1163
|
+
var PARKING_REPAY_APPID = "wx5e73c65404eee268";
|
|
1164
|
+
var PARKING_REPAY_PATH = "pages/invest_list/invest_list";
|
|
1165
|
+
function buildParkingQueryString(mchid, openid, plateNumber, plateColor) {
|
|
1166
|
+
const params = new URLSearchParams({
|
|
1167
|
+
mchid,
|
|
1168
|
+
openid,
|
|
1169
|
+
plate_number: plateNumber,
|
|
1170
|
+
plate_color: plateColor,
|
|
1171
|
+
trade_scene: "PARKING"
|
|
1172
|
+
});
|
|
1173
|
+
return params.toString();
|
|
1174
|
+
}
|
|
1175
|
+
function buildParkingMiniProgramBridgeConfig(mchid, openid, plateNumber, plateColor) {
|
|
1176
|
+
return {
|
|
1177
|
+
appId: PARKING_SERVICE_APPID,
|
|
1178
|
+
path: PARKING_SERVICE_PATH,
|
|
1179
|
+
extraData: {
|
|
1180
|
+
mchid,
|
|
1181
|
+
openid,
|
|
1182
|
+
plate_number: plateNumber,
|
|
1183
|
+
plate_color: plateColor,
|
|
1184
|
+
trade_scene: "PARKING"
|
|
1007
1185
|
}
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1186
|
+
};
|
|
1187
|
+
}
|
|
1188
|
+
function buildParkingH5BridgeUrl(mchid, openid, plateNumber, plateColor) {
|
|
1189
|
+
const queryString = buildParkingQueryString(mchid, openid, plateNumber, plateColor);
|
|
1190
|
+
return `${PARKING_SERVICE_PATH}?${queryString}`;
|
|
1191
|
+
}
|
|
1192
|
+
function buildParkingAppBridgePath(mchid, openid, plateNumber, plateColor) {
|
|
1193
|
+
const queryString = buildParkingQueryString(mchid, openid, plateNumber, plateColor);
|
|
1194
|
+
return `${PARKING_SERVICE_PATH}?${queryString}`;
|
|
1195
|
+
}
|
|
1196
|
+
function buildParkingRepayBridgeConfig(mchid, openid) {
|
|
1197
|
+
return {
|
|
1198
|
+
appId: PARKING_REPAY_APPID,
|
|
1199
|
+
path: PARKING_REPAY_PATH,
|
|
1200
|
+
extraData: {
|
|
1201
|
+
mchid,
|
|
1202
|
+
nonce_str: generateNonceStr(),
|
|
1203
|
+
openid
|
|
1013
1204
|
}
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1205
|
+
};
|
|
1206
|
+
}
|
|
1207
|
+
var H5_COUPON_URL = "https://action.weixin.qq.com/busifavor/getcouponinfo";
|
|
1208
|
+
function buildH5CouponUrl(params, signKey) {
|
|
1209
|
+
const signFields = {
|
|
1210
|
+
stock_id: params.stock_id,
|
|
1211
|
+
out_request_no: params.out_request_no,
|
|
1212
|
+
send_coupon_merchant: params.send_coupon_merchant,
|
|
1213
|
+
open_id: params.open_id
|
|
1214
|
+
};
|
|
1215
|
+
if (params.coupon_code) {
|
|
1216
|
+
signFields["coupon_code"] = params.coupon_code;
|
|
1217
|
+
}
|
|
1218
|
+
const sortedKeys = Object.keys(signFields).sort();
|
|
1219
|
+
const signStr = sortedKeys.map((k) => `${k}=${signFields[k]}`).join("&") + `&key=${signKey}`;
|
|
1220
|
+
const sign2 = crypto2__default.default.createHmac("sha256", signKey).update(signStr).digest("hex").toUpperCase();
|
|
1221
|
+
const urlParams = new URLSearchParams({
|
|
1222
|
+
stock_id: params.stock_id,
|
|
1223
|
+
out_request_no: params.out_request_no,
|
|
1224
|
+
sign: sign2,
|
|
1225
|
+
send_coupon_merchant: params.send_coupon_merchant,
|
|
1226
|
+
open_id: params.open_id
|
|
1227
|
+
});
|
|
1228
|
+
if (params.coupon_code) {
|
|
1229
|
+
urlParams.set("coupon_code", params.coupon_code);
|
|
1230
|
+
}
|
|
1231
|
+
if (params.customize_send_time) {
|
|
1232
|
+
urlParams.set("customize_send_time", params.customize_send_time);
|
|
1233
|
+
}
|
|
1234
|
+
return `${H5_COUPON_URL}?${urlParams.toString()}#wechat_pay&wechat_redirect`;
|
|
1235
|
+
}
|
|
1236
|
+
function buildPayScoreDetailJsapiBridgeConfig(appId, mchId, serviceId, outOrderNo, privateKey) {
|
|
1237
|
+
const timestamp = String(Math.floor(Date.now() / 1e3));
|
|
1238
|
+
const nonceStr = generateNonceStr();
|
|
1239
|
+
const sign2 = generatePayScorePaySign(
|
|
1240
|
+
appId,
|
|
1241
|
+
timestamp,
|
|
1242
|
+
nonceStr,
|
|
1243
|
+
serviceId,
|
|
1244
|
+
outOrderNo,
|
|
1245
|
+
privateKey
|
|
1246
|
+
);
|
|
1247
|
+
return {
|
|
1248
|
+
appid: appId,
|
|
1249
|
+
mchid: mchId,
|
|
1250
|
+
service_id: serviceId,
|
|
1251
|
+
out_order_no: outOrderNo,
|
|
1252
|
+
timestamp,
|
|
1253
|
+
nonce_str: nonceStr,
|
|
1254
|
+
sign_type: "RSA",
|
|
1255
|
+
sign: sign2
|
|
1256
|
+
};
|
|
1257
|
+
}
|
|
1258
|
+
function buildPayScoreDetailMiniProgramBridgeConfig(mchId, serviceId, outOrderNo, appId, privateKey) {
|
|
1259
|
+
const timestamp = String(Math.floor(Date.now() / 1e3));
|
|
1260
|
+
const nonceStr = generateNonceStr();
|
|
1261
|
+
const sign2 = generatePayScorePaySign(
|
|
1262
|
+
appId,
|
|
1263
|
+
timestamp,
|
|
1264
|
+
nonceStr,
|
|
1265
|
+
serviceId,
|
|
1266
|
+
outOrderNo,
|
|
1267
|
+
privateKey
|
|
1268
|
+
);
|
|
1269
|
+
return {
|
|
1270
|
+
mchid: mchId,
|
|
1271
|
+
service_id: serviceId,
|
|
1272
|
+
out_order_no: outOrderNo,
|
|
1273
|
+
timestamp,
|
|
1274
|
+
nonce_str: nonceStr,
|
|
1275
|
+
sign_type: "RSA",
|
|
1276
|
+
sign: sign2
|
|
1277
|
+
};
|
|
1278
|
+
}
|
|
1279
|
+
function buildPayScoreDetailAppBridgeConfig(appId, mchId, serviceId, outOrderNo, privateKey) {
|
|
1280
|
+
const timestamp = String(Math.floor(Date.now() / 1e3));
|
|
1281
|
+
const nonceStr = generateNonceStr();
|
|
1282
|
+
const sign2 = generatePayScorePaySign(
|
|
1283
|
+
appId,
|
|
1284
|
+
timestamp,
|
|
1285
|
+
nonceStr,
|
|
1286
|
+
serviceId,
|
|
1287
|
+
outOrderNo,
|
|
1288
|
+
privateKey
|
|
1289
|
+
);
|
|
1290
|
+
return {
|
|
1291
|
+
appid: appId,
|
|
1292
|
+
mchid: mchId,
|
|
1293
|
+
service_id: serviceId,
|
|
1294
|
+
out_order_no: outOrderNo,
|
|
1295
|
+
timestamp,
|
|
1296
|
+
nonce_str: nonceStr,
|
|
1297
|
+
sign_type: "RSA",
|
|
1298
|
+
sign: sign2
|
|
1299
|
+
};
|
|
1300
|
+
}
|
|
1301
|
+
var MED_INS_APPID = "wxbcad394b3d99dac9";
|
|
1302
|
+
var MED_INS_PATH = "/pages/med-ins/pay/pay";
|
|
1303
|
+
function buildMedInsMiniProgramBridgeConfig(mchid, mixTradeNo) {
|
|
1304
|
+
return {
|
|
1305
|
+
appId: MED_INS_APPID,
|
|
1306
|
+
path: MED_INS_PATH,
|
|
1307
|
+
extraData: {
|
|
1308
|
+
mchid,
|
|
1309
|
+
mix_trade_no: mixTradeNo
|
|
1310
|
+
}
|
|
1311
|
+
};
|
|
1312
|
+
}
|
|
1313
|
+
function buildMedInsJsapiBridgeConfig(appId, mchId, mixTradeNo, privateKey) {
|
|
1314
|
+
const timestamp = String(Math.floor(Date.now() / 1e3));
|
|
1315
|
+
const nonceStr = generateNonceStr();
|
|
1316
|
+
const packageStr = `mchid=${mchId}&mix_trade_no=${mixTradeNo}`;
|
|
1317
|
+
const signString = `${appId}
|
|
1318
|
+
${timestamp}
|
|
1319
|
+
${nonceStr}
|
|
1320
|
+
${packageStr}
|
|
1321
|
+
`;
|
|
1322
|
+
const signer = crypto2__default.default.createSign("RSA-SHA256");
|
|
1323
|
+
signer.update(signString);
|
|
1324
|
+
signer.end();
|
|
1325
|
+
const sign2 = signer.sign(privateKey, "base64");
|
|
1326
|
+
return {
|
|
1327
|
+
appid: appId,
|
|
1328
|
+
mchid: mchId,
|
|
1329
|
+
mix_trade_no: mixTradeNo,
|
|
1330
|
+
timestamp,
|
|
1331
|
+
nonce_str: nonceStr,
|
|
1332
|
+
sign_type: "RSA",
|
|
1333
|
+
sign: sign2
|
|
1334
|
+
};
|
|
1335
|
+
}
|
|
1336
|
+
|
|
1337
|
+
// src/services/jsapi.ts
|
|
1338
|
+
var JsapiService = class {
|
|
1339
|
+
client;
|
|
1340
|
+
constructor(client) {
|
|
1341
|
+
this.client = client;
|
|
1342
|
+
}
|
|
1343
|
+
/**
|
|
1344
|
+
* JSAPI/小程序下单
|
|
1345
|
+
*
|
|
1346
|
+
* 商户通过此接口生成预付单并获取 prepay_id。
|
|
1347
|
+
* prepay_id 有效期为 2 小时,超过 2 小时需重新请求。
|
|
1348
|
+
*
|
|
1349
|
+
* @see https://pay.weixin.qq.com/doc/v3/merchant/4012791856
|
|
1350
|
+
*/
|
|
1351
|
+
async createOrder(request) {
|
|
1352
|
+
return this.client.post("/v3/pay/transactions/jsapi", request);
|
|
1353
|
+
}
|
|
1354
|
+
/**
|
|
1355
|
+
* 查询 JSAPI 支付订单
|
|
1356
|
+
*
|
|
1357
|
+
* 支持通过微信支付订单号或商户订单号查询订单状态。
|
|
1358
|
+
*
|
|
1359
|
+
* @see https://pay.weixin.qq.com/doc/v3/merchant/4012791858 (微信支付订单号查询订单)
|
|
1360
|
+
* @see https://pay.weixin.qq.com/doc/v3/merchant/4012791859 (商户订单号查询订单)
|
|
1361
|
+
*/
|
|
1362
|
+
async queryOrderById(params) {
|
|
1363
|
+
if (params.transactionId) {
|
|
1364
|
+
return this.queryOrderByTransactionId(params.transactionId);
|
|
1365
|
+
}
|
|
1366
|
+
if (params.outTradeNo) {
|
|
1367
|
+
return this.queryOrderByOutTradeNo(params.outTradeNo);
|
|
1368
|
+
}
|
|
1369
|
+
throw new Error("outTradeNo \u6216 transactionId \u5FC5\u987B\u63D0\u4F9B\u5176\u4E2D\u4E00\u4E2A");
|
|
1370
|
+
}
|
|
1371
|
+
/**
|
|
1372
|
+
* 通过商户订单号查询订单
|
|
1373
|
+
*
|
|
1374
|
+
* @see https://pay.weixin.qq.com/doc/v3/merchant/4012791859
|
|
1375
|
+
*/
|
|
1376
|
+
async queryOrderByOutTradeNo(outTradeNo) {
|
|
1377
|
+
return this.client.get(`/v3/pay/transactions/out-trade-no/${outTradeNo}`, {
|
|
1378
|
+
mchid: this.client.mchid
|
|
1379
|
+
});
|
|
1380
|
+
}
|
|
1381
|
+
/**
|
|
1382
|
+
* 通过微信支付订单号查询订单
|
|
1383
|
+
*
|
|
1384
|
+
* @see https://pay.weixin.qq.com/doc/v3/merchant/4012791858
|
|
1385
|
+
*/
|
|
1386
|
+
async queryOrderByTransactionId(transactionId) {
|
|
1387
|
+
return this.client.get(`/v3/pay/transactions/id/${transactionId}`, {
|
|
1388
|
+
mchid: this.client.mchid
|
|
1389
|
+
});
|
|
1390
|
+
}
|
|
1391
|
+
/**
|
|
1392
|
+
* JSAPI 下单并生成调起支付参数
|
|
1393
|
+
*
|
|
1394
|
+
* 封装了下单和调起支付参数生成两个步骤,一次调用即可获得
|
|
1395
|
+
* prepay_id 和前端 WeixinJSBridge.invoke() 所需的全部参数。
|
|
1396
|
+
*
|
|
1397
|
+
* @param request - 下单请求参数(需包含 appid)
|
|
1398
|
+
* @param privateKey - 商户私钥
|
|
1399
|
+
* @returns 下单响应 + 调起支付参数
|
|
1400
|
+
*/
|
|
1401
|
+
async prepayWithRequestPayment(request, privateKey) {
|
|
1402
|
+
const response = await this.createOrder(request);
|
|
1403
|
+
const bridgeConfig = buildJsapiBridgeConfig(request.appid, response.data.prepay_id, privateKey);
|
|
1404
|
+
return { ...response, bridgeConfig };
|
|
1405
|
+
}
|
|
1406
|
+
/**
|
|
1407
|
+
* 关闭订单
|
|
1408
|
+
*
|
|
1409
|
+
* 对于未支付的订单,商户可通过此接口关闭订单。
|
|
1410
|
+
* 关单后,订单状态从未支付(NOTPAY)流转为已关闭(CLOSED)。
|
|
1411
|
+
*
|
|
1412
|
+
* @see https://pay.weixin.qq.com/doc/v3/merchant/4012791860
|
|
1413
|
+
*/
|
|
1414
|
+
async closeOrder(outTradeNo, request) {
|
|
1025
1415
|
return this.client.post(`/v3/pay/transactions/out-trade-no/${outTradeNo}/close`, request);
|
|
1026
1416
|
}
|
|
1027
1417
|
/**
|
|
@@ -1125,19 +1515,23 @@ var H5Service = class {
|
|
|
1125
1515
|
*/
|
|
1126
1516
|
async queryOrderById(params) {
|
|
1127
1517
|
if (params.transactionId) {
|
|
1128
|
-
return this.
|
|
1129
|
-
`/v3/pay/transactions/id/${params.transactionId}`,
|
|
1130
|
-
{ mchid: this.client.mchid }
|
|
1131
|
-
);
|
|
1518
|
+
return this.queryOrderByTransactionId(params.transactionId);
|
|
1132
1519
|
}
|
|
1133
1520
|
if (params.outTradeNo) {
|
|
1134
|
-
return this.
|
|
1135
|
-
`/v3/pay/transactions/out-trade-no/${params.outTradeNo}`,
|
|
1136
|
-
{ mchid: this.client.mchid }
|
|
1137
|
-
);
|
|
1521
|
+
return this.queryOrderByOutTradeNo(params.outTradeNo);
|
|
1138
1522
|
}
|
|
1139
1523
|
throw new Error("outTradeNo \u6216 transactionId \u5FC5\u987B\u63D0\u4F9B\u5176\u4E2D\u4E00\u4E2A");
|
|
1140
1524
|
}
|
|
1525
|
+
async queryOrderByOutTradeNo(outTradeNo) {
|
|
1526
|
+
return this.client.get(`/v3/pay/transactions/out-trade-no/${outTradeNo}`, {
|
|
1527
|
+
mchid: this.client.mchid
|
|
1528
|
+
});
|
|
1529
|
+
}
|
|
1530
|
+
async queryOrderByTransactionId(transactionId) {
|
|
1531
|
+
return this.client.get(`/v3/pay/transactions/id/${transactionId}`, {
|
|
1532
|
+
mchid: this.client.mchid
|
|
1533
|
+
});
|
|
1534
|
+
}
|
|
1141
1535
|
/**
|
|
1142
1536
|
* 关闭订单
|
|
1143
1537
|
*
|
|
@@ -1250,19 +1644,33 @@ var AppService = class {
|
|
|
1250
1644
|
*/
|
|
1251
1645
|
async queryOrderById(params) {
|
|
1252
1646
|
if (params.transactionId) {
|
|
1253
|
-
return this.
|
|
1254
|
-
`/v3/pay/transactions/id/${params.transactionId}`,
|
|
1255
|
-
{ mchid: this.client.mchid }
|
|
1256
|
-
);
|
|
1647
|
+
return this.queryOrderByTransactionId(params.transactionId);
|
|
1257
1648
|
}
|
|
1258
1649
|
if (params.outTradeNo) {
|
|
1259
|
-
return this.
|
|
1260
|
-
`/v3/pay/transactions/out-trade-no/${params.outTradeNo}`,
|
|
1261
|
-
{ mchid: this.client.mchid }
|
|
1262
|
-
);
|
|
1650
|
+
return this.queryOrderByOutTradeNo(params.outTradeNo);
|
|
1263
1651
|
}
|
|
1264
1652
|
throw new Error("outTradeNo \u6216 transactionId \u5FC5\u987B\u63D0\u4F9B\u5176\u4E2D\u4E00\u4E2A");
|
|
1265
1653
|
}
|
|
1654
|
+
async queryOrderByOutTradeNo(outTradeNo) {
|
|
1655
|
+
return this.client.get(`/v3/pay/transactions/out-trade-no/${outTradeNo}`, {
|
|
1656
|
+
mchid: this.client.mchid
|
|
1657
|
+
});
|
|
1658
|
+
}
|
|
1659
|
+
async queryOrderByTransactionId(transactionId) {
|
|
1660
|
+
return this.client.get(`/v3/pay/transactions/id/${transactionId}`, {
|
|
1661
|
+
mchid: this.client.mchid
|
|
1662
|
+
});
|
|
1663
|
+
}
|
|
1664
|
+
async prepayWithRequestPayment(request, privateKey) {
|
|
1665
|
+
const response = await this.createOrder(request);
|
|
1666
|
+
const bridgeConfig = buildAppBridgeConfig(
|
|
1667
|
+
request.appid,
|
|
1668
|
+
this.client.mchid,
|
|
1669
|
+
response.data.prepay_id,
|
|
1670
|
+
privateKey
|
|
1671
|
+
);
|
|
1672
|
+
return { ...response, bridgeConfig };
|
|
1673
|
+
}
|
|
1266
1674
|
/**
|
|
1267
1675
|
* 关闭订单
|
|
1268
1676
|
*
|
|
@@ -1378,19 +1786,23 @@ var NativeService = class {
|
|
|
1378
1786
|
*/
|
|
1379
1787
|
async queryOrderById(params) {
|
|
1380
1788
|
if (params.transactionId) {
|
|
1381
|
-
return this.
|
|
1382
|
-
`/v3/pay/transactions/id/${params.transactionId}`,
|
|
1383
|
-
{ mchid: this.client.mchid }
|
|
1384
|
-
);
|
|
1789
|
+
return this.queryOrderByTransactionId(params.transactionId);
|
|
1385
1790
|
}
|
|
1386
1791
|
if (params.outTradeNo) {
|
|
1387
|
-
return this.
|
|
1388
|
-
`/v3/pay/transactions/out-trade-no/${params.outTradeNo}`,
|
|
1389
|
-
{ mchid: this.client.mchid }
|
|
1390
|
-
);
|
|
1792
|
+
return this.queryOrderByOutTradeNo(params.outTradeNo);
|
|
1391
1793
|
}
|
|
1392
1794
|
throw new Error("outTradeNo \u6216 transactionId \u5FC5\u987B\u63D0\u4F9B\u5176\u4E2D\u4E00\u4E2A");
|
|
1393
1795
|
}
|
|
1796
|
+
async queryOrderByOutTradeNo(outTradeNo) {
|
|
1797
|
+
return this.client.get(`/v3/pay/transactions/out-trade-no/${outTradeNo}`, {
|
|
1798
|
+
mchid: this.client.mchid
|
|
1799
|
+
});
|
|
1800
|
+
}
|
|
1801
|
+
async queryOrderByTransactionId(transactionId) {
|
|
1802
|
+
return this.client.get(`/v3/pay/transactions/id/${transactionId}`, {
|
|
1803
|
+
mchid: this.client.mchid
|
|
1804
|
+
});
|
|
1805
|
+
}
|
|
1394
1806
|
/**
|
|
1395
1807
|
* 关闭订单
|
|
1396
1808
|
*
|
|
@@ -2642,8 +3054,6 @@ var ParkingService = class {
|
|
|
2642
3054
|
);
|
|
2643
3055
|
}
|
|
2644
3056
|
};
|
|
2645
|
-
|
|
2646
|
-
// src/services/bill.ts
|
|
2647
3057
|
var BillService = class {
|
|
2648
3058
|
constructor(client) {
|
|
2649
3059
|
this.client = client;
|
|
@@ -2725,6 +3135,45 @@ var BillService = class {
|
|
|
2725
3135
|
tar_type: params.tar_type
|
|
2726
3136
|
});
|
|
2727
3137
|
}
|
|
3138
|
+
/**
|
|
3139
|
+
* 申请单个子商户资金账单
|
|
3140
|
+
*
|
|
3141
|
+
* 服务商调用该接口获取单个子商户资金账单的下载链接。
|
|
3142
|
+
* 返回的账单文件使用 AES-256-GCM 加密,需用子商户的 API 证书私钥解密。
|
|
3143
|
+
*
|
|
3144
|
+
* @param params - 账单请求参数
|
|
3145
|
+
* @returns 加密账单下载信息
|
|
3146
|
+
*
|
|
3147
|
+
* @see https://pay.weixin.qq.com/doc/v3/merchant/4013071235
|
|
3148
|
+
*/
|
|
3149
|
+
async applySubMerchantFundFlowBill(params) {
|
|
3150
|
+
return this.client.get("/v3/bill/sub-merchant-fundflowbill", {
|
|
3151
|
+
sub_mchid: params.sub_mchid,
|
|
3152
|
+
bill_date: params.bill_date,
|
|
3153
|
+
account_type: params.account_type,
|
|
3154
|
+
algorithm: params.algorithm,
|
|
3155
|
+
tar_type: params.tar_type
|
|
3156
|
+
});
|
|
3157
|
+
}
|
|
3158
|
+
/**
|
|
3159
|
+
* 申请二级商户资金账单
|
|
3160
|
+
*
|
|
3161
|
+
* 电商平台调用该接口获取二级商户资金账单的下载链接。
|
|
3162
|
+
* 返回的账单文件使用 AES-256-GCM 加密,需用平台的 API 证书私钥解密。
|
|
3163
|
+
*
|
|
3164
|
+
* @param params - 账单请求参数
|
|
3165
|
+
* @returns 加密账单下载信息
|
|
3166
|
+
*
|
|
3167
|
+
* @see https://pay.weixin.qq.com/doc/v3/merchant/4013071235
|
|
3168
|
+
*/
|
|
3169
|
+
async applyEcommerceFundFlowBill(params) {
|
|
3170
|
+
return this.client.get("/v3/ecommerce/bill/fundflowbill", {
|
|
3171
|
+
bill_date: params.bill_date,
|
|
3172
|
+
account_type: params.account_type,
|
|
3173
|
+
tar_type: params.tar_type,
|
|
3174
|
+
algorithm: params.algorithm
|
|
3175
|
+
});
|
|
3176
|
+
}
|
|
2728
3177
|
/**
|
|
2729
3178
|
* 下载账单文件
|
|
2730
3179
|
*
|
|
@@ -2762,6 +3211,41 @@ var BillService = class {
|
|
|
2762
3211
|
async downloadBill(downloadUrl) {
|
|
2763
3212
|
return this.client.downloadRaw(downloadUrl);
|
|
2764
3213
|
}
|
|
3214
|
+
/**
|
|
3215
|
+
* 下载账单文件并自动解压、校验摘要
|
|
3216
|
+
*
|
|
3217
|
+
* 封装了完整的账单下载流程:
|
|
3218
|
+
* 1. 下载原始文件
|
|
3219
|
+
* 2. 自动检测并解压 GZIP 格式
|
|
3220
|
+
* 3. 可选:与申请账单返回的 hash_value 进行 SHA-1 摘要校验
|
|
3221
|
+
*
|
|
3222
|
+
* @param downloadUrl - 申请账单接口返回的 download_url
|
|
3223
|
+
* @param expectedDigest - 期望的 SHA-1 摘要值(来自申请账单接口返回的 hash_value)
|
|
3224
|
+
* @returns 包含解压后账单文件 Buffer 的响应
|
|
3225
|
+
* @throws 如果摘要校验失败
|
|
3226
|
+
*
|
|
3227
|
+
* @example
|
|
3228
|
+
* ```ts
|
|
3229
|
+
* const result = await billService.downloadAndVerifyBill(
|
|
3230
|
+
* applyResult.data.download_url,
|
|
3231
|
+
* applyResult.data.hash_value,
|
|
3232
|
+
* );
|
|
3233
|
+
* ```
|
|
3234
|
+
*/
|
|
3235
|
+
async downloadAndVerifyBill(downloadUrl, expectedDigest) {
|
|
3236
|
+
const response = await this.client.downloadRaw(downloadUrl);
|
|
3237
|
+
let data = response.data;
|
|
3238
|
+
if (data.length >= 2 && data[0] === 31 && data[1] === 139) {
|
|
3239
|
+
data = zlib__default.default.gunzipSync(data);
|
|
3240
|
+
}
|
|
3241
|
+
if (expectedDigest) {
|
|
3242
|
+
const actualDigest = crypto2__default.default.createHash("sha1").update(data).digest("hex");
|
|
3243
|
+
if (actualDigest.toLowerCase() !== expectedDigest.toLowerCase()) {
|
|
3244
|
+
throw new Error(`\u8D26\u5355\u6458\u8981\u6821\u9A8C\u5931\u8D25: \u671F\u671B ${expectedDigest}, \u5B9E\u9645 ${actualDigest}`);
|
|
3245
|
+
}
|
|
3246
|
+
}
|
|
3247
|
+
return { ...response, data };
|
|
3248
|
+
}
|
|
2765
3249
|
};
|
|
2766
3250
|
var SUPPORTED_SIGNATURE_TYPES = /* @__PURE__ */ new Set(["WECHATPAY2-SHA256-RSA2048"]);
|
|
2767
3251
|
var DEFAULT_SIGNATURE_TYPE = "WECHATPAY2-SHA256-RSA2048";
|
|
@@ -4545,346 +5029,925 @@ var MerchantExclusiveCouponService = class {
|
|
|
4545
5029
|
return this.client.get(`/v3/marketing/busifavor/users/coupons/${couponId}`, params);
|
|
4546
5030
|
}
|
|
4547
5031
|
};
|
|
4548
|
-
|
|
4549
|
-
|
|
4550
|
-
|
|
4551
|
-
|
|
4552
|
-
|
|
4553
|
-
|
|
4554
|
-
|
|
4555
|
-
|
|
4556
|
-
|
|
4557
|
-
|
|
4558
|
-
|
|
4559
|
-
|
|
4560
|
-
|
|
4561
|
-
|
|
4562
|
-
|
|
4563
|
-
|
|
4564
|
-
|
|
4565
|
-
|
|
4566
|
-
|
|
4567
|
-
|
|
4568
|
-
|
|
4569
|
-
|
|
4570
|
-
|
|
4571
|
-
|
|
4572
|
-
|
|
4573
|
-
|
|
4574
|
-
|
|
4575
|
-
|
|
4576
|
-
|
|
4577
|
-
|
|
4578
|
-
|
|
4579
|
-
|
|
4580
|
-
|
|
4581
|
-
|
|
4582
|
-
|
|
4583
|
-
|
|
4584
|
-
|
|
4585
|
-
|
|
4586
|
-
}
|
|
4587
|
-
|
|
4588
|
-
|
|
4589
|
-
|
|
4590
|
-
|
|
4591
|
-
|
|
4592
|
-
|
|
4593
|
-
|
|
4594
|
-
|
|
4595
|
-
|
|
4596
|
-
|
|
4597
|
-
|
|
4598
|
-
|
|
4599
|
-
|
|
4600
|
-
|
|
4601
|
-
|
|
4602
|
-
|
|
4603
|
-
|
|
4604
|
-
|
|
4605
|
-
|
|
4606
|
-
|
|
4607
|
-
|
|
4608
|
-
|
|
4609
|
-
|
|
4610
|
-
|
|
4611
|
-
|
|
4612
|
-
|
|
4613
|
-
|
|
4614
|
-
|
|
4615
|
-
|
|
4616
|
-
|
|
4617
|
-
|
|
4618
|
-
|
|
4619
|
-
|
|
4620
|
-
|
|
4621
|
-
|
|
4622
|
-
|
|
4623
|
-
|
|
4624
|
-
|
|
4625
|
-
|
|
4626
|
-
|
|
4627
|
-
|
|
4628
|
-
|
|
4629
|
-
|
|
4630
|
-
|
|
4631
|
-
|
|
4632
|
-
|
|
4633
|
-
|
|
4634
|
-
|
|
4635
|
-
|
|
4636
|
-
|
|
4637
|
-
|
|
4638
|
-
|
|
4639
|
-
|
|
4640
|
-
|
|
4641
|
-
|
|
4642
|
-
|
|
4643
|
-
|
|
4644
|
-
|
|
4645
|
-
|
|
4646
|
-
|
|
4647
|
-
|
|
4648
|
-
|
|
4649
|
-
|
|
4650
|
-
|
|
4651
|
-
|
|
4652
|
-
|
|
4653
|
-
|
|
4654
|
-
|
|
4655
|
-
|
|
4656
|
-
|
|
4657
|
-
|
|
4658
|
-
|
|
4659
|
-
|
|
4660
|
-
|
|
4661
|
-
|
|
4662
|
-
|
|
4663
|
-
|
|
4664
|
-
|
|
4665
|
-
|
|
4666
|
-
|
|
4667
|
-
|
|
4668
|
-
|
|
4669
|
-
|
|
4670
|
-
|
|
4671
|
-
|
|
4672
|
-
|
|
4673
|
-
|
|
4674
|
-
|
|
4675
|
-
|
|
4676
|
-
|
|
4677
|
-
|
|
4678
|
-
|
|
4679
|
-
|
|
4680
|
-
|
|
4681
|
-
|
|
4682
|
-
|
|
4683
|
-
|
|
4684
|
-
|
|
4685
|
-
|
|
4686
|
-
|
|
4687
|
-
|
|
4688
|
-
|
|
4689
|
-
|
|
4690
|
-
|
|
4691
|
-
|
|
4692
|
-
|
|
4693
|
-
|
|
4694
|
-
|
|
4695
|
-
|
|
4696
|
-
|
|
4697
|
-
|
|
4698
|
-
|
|
4699
|
-
|
|
4700
|
-
|
|
4701
|
-
|
|
4702
|
-
|
|
4703
|
-
|
|
4704
|
-
|
|
4705
|
-
|
|
4706
|
-
|
|
4707
|
-
|
|
4708
|
-
|
|
4709
|
-
|
|
4710
|
-
|
|
4711
|
-
|
|
4712
|
-
|
|
4713
|
-
|
|
4714
|
-
|
|
4715
|
-
|
|
4716
|
-
|
|
4717
|
-
|
|
4718
|
-
|
|
4719
|
-
|
|
4720
|
-
|
|
4721
|
-
|
|
4722
|
-
|
|
4723
|
-
|
|
4724
|
-
|
|
4725
|
-
|
|
4726
|
-
|
|
4727
|
-
|
|
4728
|
-
|
|
4729
|
-
|
|
4730
|
-
|
|
4731
|
-
|
|
4732
|
-
|
|
4733
|
-
|
|
4734
|
-
|
|
4735
|
-
}
|
|
4736
|
-
|
|
4737
|
-
|
|
4738
|
-
|
|
4739
|
-
|
|
4740
|
-
|
|
4741
|
-
|
|
4742
|
-
|
|
4743
|
-
|
|
4744
|
-
|
|
4745
|
-
|
|
4746
|
-
|
|
4747
|
-
|
|
4748
|
-
|
|
4749
|
-
|
|
4750
|
-
|
|
4751
|
-
|
|
4752
|
-
|
|
4753
|
-
|
|
4754
|
-
|
|
4755
|
-
|
|
4756
|
-
|
|
4757
|
-
|
|
4758
|
-
|
|
4759
|
-
|
|
4760
|
-
|
|
4761
|
-
|
|
4762
|
-
|
|
4763
|
-
}
|
|
4764
|
-
|
|
4765
|
-
|
|
5032
|
+
|
|
5033
|
+
// src/services/refund.ts
|
|
5034
|
+
var RefundService = class {
|
|
5035
|
+
client;
|
|
5036
|
+
constructor(client) {
|
|
5037
|
+
this.client = client;
|
|
5038
|
+
}
|
|
5039
|
+
/**
|
|
5040
|
+
* 申请退款
|
|
5041
|
+
*
|
|
5042
|
+
* 当交易发生之后一段时间内,由于买家或者卖家的原因需要退款时,
|
|
5043
|
+
* 卖家可以通过退款接口将支付款退还给买家。
|
|
5044
|
+
* 支持单笔交易分多次退款,多次退款需要提交原支付订单的商户订单号和设置不同的退款单号。
|
|
5045
|
+
* 一笔退款失败后重新提交,要采用原来的退款单号。
|
|
5046
|
+
*
|
|
5047
|
+
* @param request - 退款请求参数,包含商户订单号、退款单号、退款金额等信息
|
|
5048
|
+
* @returns 退款申请结果,包含微信退款单号、退款状态等
|
|
5049
|
+
*
|
|
5050
|
+
* @see https://pay.weixin.qq.com/doc/v3/merchant/4013071036
|
|
5051
|
+
*/
|
|
5052
|
+
async create(request) {
|
|
5053
|
+
return this.client.post("/v3/refund/domestic/refunds", request);
|
|
5054
|
+
}
|
|
5055
|
+
/**
|
|
5056
|
+
* 查询单笔退款(通过商户退款单号)
|
|
5057
|
+
*
|
|
5058
|
+
* 提交退款申请后,通过调用该接口查询退款状态。
|
|
5059
|
+
* 退款有一定延时,建议在提交退款申请后1分钟再查询退款状态。
|
|
5060
|
+
*
|
|
5061
|
+
* @param params - 查询参数,需包含 outRefundNo(商户退款单号)
|
|
5062
|
+
* @returns 退款单详情,包含退款状态、退款金额、退款渠道等
|
|
5063
|
+
*
|
|
5064
|
+
* @see https://pay.weixin.qq.com/doc/v3/merchant/4013071041
|
|
5065
|
+
*/
|
|
5066
|
+
async queryByOutRefundNo(params) {
|
|
5067
|
+
return this.client.get(
|
|
5068
|
+
`/v3/refund/domestic/refunds/${params.outRefundNo}`
|
|
5069
|
+
);
|
|
5070
|
+
}
|
|
5071
|
+
/**
|
|
5072
|
+
* 发起异常退款
|
|
5073
|
+
*
|
|
5074
|
+
* 当退款因为用户账户异常而无法原路退回时,可使用此接口将退款资金
|
|
5075
|
+
* 退到用户的其他银行卡或商户的银行账户。
|
|
5076
|
+
*
|
|
5077
|
+
* @param refundId - 微信支付退款单号
|
|
5078
|
+
* @param request - 异常退款请求参数,包含退款方式、收款账户信息等
|
|
5079
|
+
* @returns 异常退款处理结果
|
|
5080
|
+
*
|
|
5081
|
+
* @see https://pay.weixin.qq.com/doc/v3/merchant/4013071193
|
|
5082
|
+
*/
|
|
5083
|
+
async applyAbnormalRefund(refundId, request) {
|
|
5084
|
+
return this.client.post(
|
|
5085
|
+
`/v3/refund/domestic/refunds/${refundId}/apply-abnormal-refund`,
|
|
5086
|
+
request
|
|
5087
|
+
);
|
|
5088
|
+
}
|
|
5089
|
+
};
|
|
5090
|
+
|
|
5091
|
+
// src/services/partner-jsapi.ts
|
|
5092
|
+
var PartnerJsapiService = class {
|
|
5093
|
+
client;
|
|
5094
|
+
constructor(client) {
|
|
5095
|
+
this.client = client;
|
|
5096
|
+
}
|
|
5097
|
+
/**
|
|
5098
|
+
* 服务商 JSAPI/小程序下单
|
|
5099
|
+
*
|
|
5100
|
+
* 服务商通过此接口代特约商户发起 JSAPI 支付下单,获取 prepay_id。
|
|
5101
|
+
*
|
|
5102
|
+
* @param request - 下单请求参数,需包含 sp_appid、sp_mchid、sub_mchid 等
|
|
5103
|
+
* @returns 下单结果,包含 prepay_id
|
|
5104
|
+
*
|
|
5105
|
+
* @see https://pay.weixin.qq.com/doc/v3/partner/4012738519
|
|
5106
|
+
*/
|
|
5107
|
+
async createOrder(request) {
|
|
5108
|
+
return this.client.post(
|
|
5109
|
+
"/v3/pay/partner/transactions/jsapi",
|
|
5110
|
+
request
|
|
5111
|
+
);
|
|
5112
|
+
}
|
|
5113
|
+
/**
|
|
5114
|
+
* 通过商户订单号查询订单
|
|
5115
|
+
*
|
|
5116
|
+
* @param params - 查询参数,需包含 out_trade_no、sp_mchid、sub_mchid
|
|
5117
|
+
* @returns 订单详情
|
|
5118
|
+
*
|
|
5119
|
+
* @see https://pay.weixin.qq.com/doc/v3/partner/4012739008
|
|
5120
|
+
*/
|
|
5121
|
+
async queryOrderByOutTradeNo(params) {
|
|
5122
|
+
return this.client.get(
|
|
5123
|
+
`/v3/pay/partner/transactions/out-trade-no/${params.out_trade_no}`,
|
|
5124
|
+
{ sp_mchid: params.sp_mchid, sub_mchid: params.sub_mchid }
|
|
5125
|
+
);
|
|
5126
|
+
}
|
|
5127
|
+
/**
|
|
5128
|
+
* 通过微信支付订单号查询订单
|
|
5129
|
+
*
|
|
5130
|
+
* @param params - 查询参数,需包含 transaction_id、sp_mchid、sub_mchid
|
|
5131
|
+
* @returns 订单详情
|
|
5132
|
+
*
|
|
5133
|
+
* @see https://pay.weixin.qq.com/doc/v3/partner/4012738964
|
|
5134
|
+
*/
|
|
5135
|
+
async queryOrderByTransactionId(params) {
|
|
5136
|
+
return this.client.get(
|
|
5137
|
+
`/v3/pay/partner/transactions/id/${params.transaction_id}`,
|
|
5138
|
+
{ sp_mchid: params.sp_mchid, sub_mchid: params.sub_mchid }
|
|
5139
|
+
);
|
|
5140
|
+
}
|
|
5141
|
+
/**
|
|
5142
|
+
* 关闭订单
|
|
5143
|
+
*
|
|
5144
|
+
* 对于未支付的订单,服务商可通过此接口代特约商户关闭订单。
|
|
5145
|
+
*
|
|
5146
|
+
* @param outTradeNo - 商户订单号
|
|
5147
|
+
* @param request - 关单请求参数,需包含 sp_mchid、sub_mchid
|
|
5148
|
+
*
|
|
5149
|
+
* @see https://pay.weixin.qq.com/doc/v3/partner/4012739019
|
|
5150
|
+
*/
|
|
5151
|
+
async closeOrder(outTradeNo, request) {
|
|
5152
|
+
return this.client.post(
|
|
5153
|
+
`/v3/pay/partner/transactions/out-trade-no/${outTradeNo}/close`,
|
|
5154
|
+
request
|
|
5155
|
+
);
|
|
5156
|
+
}
|
|
5157
|
+
/**
|
|
5158
|
+
* 服务商 JSAPI 下单并生成调起支付参数
|
|
5159
|
+
*
|
|
5160
|
+
* 封装了下单和调起支付参数生成两个步骤,一次调用即可获得
|
|
5161
|
+
* prepay_id 和前端 WeixinJSBridge.invoke() 所需的全部参数。
|
|
5162
|
+
*
|
|
5163
|
+
* @param request - 下单请求参数
|
|
5164
|
+
* @param privateKey - 商户私钥,用于生成调起支付签名
|
|
5165
|
+
* @returns 下单响应 + 调起支付参数
|
|
5166
|
+
*/
|
|
5167
|
+
async prepayWithRequestPayment(request, privateKey) {
|
|
5168
|
+
const response = await this.createOrder(request);
|
|
5169
|
+
const bridgeConfig = buildJsapiBridgeConfig(
|
|
5170
|
+
request.sp_appid,
|
|
5171
|
+
response.data.prepay_id,
|
|
5172
|
+
privateKey
|
|
5173
|
+
);
|
|
5174
|
+
return { ...response, bridgeConfig };
|
|
5175
|
+
}
|
|
5176
|
+
};
|
|
5177
|
+
|
|
5178
|
+
// src/services/partner-app.ts
|
|
5179
|
+
var PartnerAppService = class {
|
|
5180
|
+
client;
|
|
5181
|
+
constructor(client) {
|
|
5182
|
+
this.client = client;
|
|
5183
|
+
}
|
|
5184
|
+
/**
|
|
5185
|
+
* 服务商 APP 下单
|
|
5186
|
+
*
|
|
5187
|
+
* @param request - 下单请求参数
|
|
5188
|
+
* @returns 下单结果,包含 prepay_id
|
|
5189
|
+
*
|
|
5190
|
+
* @see https://pay.weixin.qq.com/doc/v3/partner/4013080231
|
|
5191
|
+
*/
|
|
5192
|
+
async createOrder(request) {
|
|
5193
|
+
return this.client.post(
|
|
5194
|
+
"/v3/pay/partner/transactions/app",
|
|
5195
|
+
request
|
|
5196
|
+
);
|
|
5197
|
+
}
|
|
5198
|
+
/**
|
|
5199
|
+
* 通过商户订单号查询订单
|
|
5200
|
+
*
|
|
5201
|
+
* @see https://pay.weixin.qq.com/doc/v3/partner/4013080235
|
|
5202
|
+
*/
|
|
5203
|
+
async queryOrderByOutTradeNo(params) {
|
|
5204
|
+
return this.client.get(
|
|
5205
|
+
`/v3/pay/partner/transactions/out-trade-no/${params.out_trade_no}`,
|
|
5206
|
+
{ sp_mchid: params.sp_mchid, sub_mchid: params.sub_mchid }
|
|
5207
|
+
);
|
|
5208
|
+
}
|
|
5209
|
+
/**
|
|
5210
|
+
* 通过微信支付订单号查询订单
|
|
5211
|
+
*
|
|
5212
|
+
* @see https://pay.weixin.qq.com/doc/v3/partner/4013080234
|
|
5213
|
+
*/
|
|
5214
|
+
async queryOrderByTransactionId(params) {
|
|
5215
|
+
return this.client.get(
|
|
5216
|
+
`/v3/pay/partner/transactions/id/${params.transaction_id}`,
|
|
5217
|
+
{ sp_mchid: params.sp_mchid, sub_mchid: params.sub_mchid }
|
|
5218
|
+
);
|
|
5219
|
+
}
|
|
5220
|
+
/**
|
|
5221
|
+
* 关闭订单
|
|
5222
|
+
*
|
|
5223
|
+
* @see https://pay.weixin.qq.com/doc/v3/partner/4013080236
|
|
5224
|
+
*/
|
|
5225
|
+
async closeOrder(outTradeNo, request) {
|
|
5226
|
+
return this.client.post(
|
|
5227
|
+
`/v3/pay/partner/transactions/out-trade-no/${outTradeNo}/close`,
|
|
5228
|
+
request
|
|
5229
|
+
);
|
|
5230
|
+
}
|
|
5231
|
+
/**
|
|
5232
|
+
* 服务商 APP 下单并生成调起支付参数
|
|
5233
|
+
*
|
|
5234
|
+
* @param request - 下单请求参数
|
|
5235
|
+
* @param privateKey - 商户私钥
|
|
5236
|
+
* @returns 下单响应 + 调起支付参数
|
|
5237
|
+
*/
|
|
5238
|
+
async prepayWithRequestPayment(request, privateKey) {
|
|
5239
|
+
const response = await this.createOrder(request);
|
|
5240
|
+
const bridgeConfig = buildAppBridgeConfig(
|
|
5241
|
+
request.sp_appid,
|
|
5242
|
+
this.client.mchid,
|
|
5243
|
+
response.data.prepay_id,
|
|
5244
|
+
privateKey
|
|
5245
|
+
);
|
|
5246
|
+
return { ...response, bridgeConfig };
|
|
5247
|
+
}
|
|
5248
|
+
};
|
|
5249
|
+
|
|
5250
|
+
// src/services/partner-h5.ts
|
|
5251
|
+
var PartnerH5Service = class {
|
|
5252
|
+
client;
|
|
5253
|
+
constructor(client) {
|
|
5254
|
+
this.client = client;
|
|
5255
|
+
}
|
|
5256
|
+
/**
|
|
5257
|
+
* 服务商 H5 下单
|
|
5258
|
+
*
|
|
5259
|
+
* @param request - 下单请求参数,需包含 scene_info.h5_info
|
|
5260
|
+
* @returns 下单结果,包含 h5_url
|
|
5261
|
+
*
|
|
5262
|
+
* @see https://pay.weixin.qq.com/doc/v3/partner/4012738604
|
|
5263
|
+
*/
|
|
5264
|
+
async createOrder(request) {
|
|
5265
|
+
return this.client.post(
|
|
5266
|
+
"/v3/pay/partner/transactions/h5",
|
|
5267
|
+
request
|
|
5268
|
+
);
|
|
5269
|
+
}
|
|
5270
|
+
/**
|
|
5271
|
+
* 通过商户订单号查询订单
|
|
5272
|
+
*
|
|
5273
|
+
* @see https://pay.weixin.qq.com/doc/v3/partner/4012759661
|
|
5274
|
+
*/
|
|
5275
|
+
async queryOrderByOutTradeNo(params) {
|
|
5276
|
+
return this.client.get(
|
|
5277
|
+
`/v3/pay/partner/transactions/out-trade-no/${params.out_trade_no}`,
|
|
5278
|
+
{ sp_mchid: params.sp_mchid, sub_mchid: params.sub_mchid }
|
|
5279
|
+
);
|
|
5280
|
+
}
|
|
5281
|
+
/**
|
|
5282
|
+
* 通过微信支付订单号查询订单
|
|
5283
|
+
*
|
|
5284
|
+
* @see https://pay.weixin.qq.com/doc/v3/partner/4012738969
|
|
5285
|
+
*/
|
|
5286
|
+
async queryOrderByTransactionId(params) {
|
|
5287
|
+
return this.client.get(
|
|
5288
|
+
`/v3/pay/partner/transactions/id/${params.transaction_id}`,
|
|
5289
|
+
{ sp_mchid: params.sp_mchid, sub_mchid: params.sub_mchid }
|
|
5290
|
+
);
|
|
5291
|
+
}
|
|
5292
|
+
/**
|
|
5293
|
+
* 关闭订单
|
|
5294
|
+
*
|
|
5295
|
+
* @see https://pay.weixin.qq.com/doc/v3/partner/4012759669
|
|
5296
|
+
*/
|
|
5297
|
+
async closeOrder(outTradeNo, request) {
|
|
5298
|
+
return this.client.post(
|
|
5299
|
+
`/v3/pay/partner/transactions/out-trade-no/${outTradeNo}/close`,
|
|
5300
|
+
request
|
|
5301
|
+
);
|
|
5302
|
+
}
|
|
5303
|
+
};
|
|
5304
|
+
|
|
5305
|
+
// src/services/partner-native.ts
|
|
5306
|
+
var PartnerNativeService = class {
|
|
5307
|
+
client;
|
|
5308
|
+
constructor(client) {
|
|
5309
|
+
this.client = client;
|
|
5310
|
+
}
|
|
5311
|
+
/**
|
|
5312
|
+
* 服务商 Native 下单
|
|
5313
|
+
*
|
|
5314
|
+
* @param request - 下单请求参数
|
|
5315
|
+
* @returns 下单结果,包含 code_url
|
|
5316
|
+
*
|
|
5317
|
+
* @see https://pay.weixin.qq.com/doc/v3/partner/4012738659
|
|
5318
|
+
*/
|
|
5319
|
+
async createOrder(request) {
|
|
5320
|
+
return this.client.post(
|
|
5321
|
+
"/v3/pay/partner/transactions/native",
|
|
5322
|
+
request
|
|
5323
|
+
);
|
|
5324
|
+
}
|
|
5325
|
+
/**
|
|
5326
|
+
* 通过商户订单号查询订单
|
|
5327
|
+
*
|
|
5328
|
+
* @see https://pay.weixin.qq.com/doc/v3/partner/4012759714
|
|
5329
|
+
*/
|
|
5330
|
+
async queryOrderByOutTradeNo(params) {
|
|
5331
|
+
return this.client.get(
|
|
5332
|
+
`/v3/pay/partner/transactions/out-trade-no/${params.out_trade_no}`,
|
|
5333
|
+
{ sp_mchid: params.sp_mchid, sub_mchid: params.sub_mchid }
|
|
5334
|
+
);
|
|
5335
|
+
}
|
|
5336
|
+
/**
|
|
5337
|
+
* 通过微信支付订单号查询订单
|
|
5338
|
+
*
|
|
5339
|
+
* @see https://pay.weixin.qq.com/doc/v3/partner/4012738971
|
|
5340
|
+
*/
|
|
5341
|
+
async queryOrderByTransactionId(params) {
|
|
5342
|
+
return this.client.get(
|
|
5343
|
+
`/v3/pay/partner/transactions/id/${params.transaction_id}`,
|
|
5344
|
+
{ sp_mchid: params.sp_mchid, sub_mchid: params.sub_mchid }
|
|
5345
|
+
);
|
|
5346
|
+
}
|
|
5347
|
+
/**
|
|
5348
|
+
* 关闭订单
|
|
5349
|
+
*
|
|
5350
|
+
* @see https://pay.weixin.qq.com/doc/v3/partner/4012759725
|
|
5351
|
+
*/
|
|
5352
|
+
async closeOrder(outTradeNo, request) {
|
|
5353
|
+
return this.client.post(
|
|
5354
|
+
`/v3/pay/partner/transactions/out-trade-no/${outTradeNo}/close`,
|
|
5355
|
+
request
|
|
5356
|
+
);
|
|
5357
|
+
}
|
|
5358
|
+
};
|
|
5359
|
+
|
|
5360
|
+
// src/services/partner-transfer.ts
|
|
5361
|
+
var PartnerTransferService = class {
|
|
5362
|
+
client;
|
|
5363
|
+
constructor(client) {
|
|
5364
|
+
this.client = client;
|
|
5365
|
+
}
|
|
5366
|
+
/**
|
|
5367
|
+
* 服务商发起商家转账
|
|
5368
|
+
*
|
|
5369
|
+
* @param request - 转账请求参数
|
|
5370
|
+
* @returns 转账结果
|
|
5371
|
+
*
|
|
5372
|
+
* @see https://pay.weixin.qq.com/doc/v3/partner/4012716434
|
|
5373
|
+
*/
|
|
5374
|
+
async createTransfer(request) {
|
|
5375
|
+
return this.client.post(
|
|
5376
|
+
"/v3/fund-app/mch-transfer/partner/transfer-bills",
|
|
5377
|
+
request
|
|
5378
|
+
);
|
|
5379
|
+
}
|
|
5380
|
+
/**
|
|
5381
|
+
* 通过商户单号查询转账单
|
|
5382
|
+
*
|
|
5383
|
+
* @param outBillNo - 商户转账单号
|
|
5384
|
+
* @param subMchid - 特约商户号
|
|
5385
|
+
* @returns 转账单详情
|
|
5386
|
+
*/
|
|
5387
|
+
async queryTransferByOutBillNo(outBillNo, subMchid) {
|
|
5388
|
+
return this.client.get(
|
|
5389
|
+
`/v3/fund-app/mch-transfer/partner/transfer-bills/out-bill-no/${outBillNo}`,
|
|
5390
|
+
{ sub_mchid: subMchid }
|
|
5391
|
+
);
|
|
5392
|
+
}
|
|
5393
|
+
/**
|
|
5394
|
+
* 撤销转账
|
|
5395
|
+
*
|
|
5396
|
+
* @param outBillNo - 商户转账单号
|
|
5397
|
+
* @param subMchid - 特约商户号
|
|
5398
|
+
*/
|
|
5399
|
+
async cancelTransfer(outBillNo, subMchid) {
|
|
5400
|
+
return this.client.post(
|
|
5401
|
+
`/v3/fund-app/mch-transfer/partner/transfer-bills/out-bill-no/${outBillNo}/cancel`,
|
|
5402
|
+
{ sub_mchid: subMchid }
|
|
5403
|
+
);
|
|
5404
|
+
}
|
|
5405
|
+
};
|
|
5406
|
+
|
|
5407
|
+
// src/services/transfer-batch.ts
|
|
5408
|
+
var TransferBatchService = class {
|
|
5409
|
+
client;
|
|
5410
|
+
constructor(client) {
|
|
5411
|
+
this.client = client;
|
|
5412
|
+
}
|
|
5413
|
+
/**
|
|
5414
|
+
* 发起批量转账
|
|
5415
|
+
*
|
|
5416
|
+
* @param request - 批量转账请求参数
|
|
5417
|
+
* @returns 批量转账结果
|
|
5418
|
+
*/
|
|
5419
|
+
async initiateBatchTransfer(request) {
|
|
5420
|
+
return this.client.post("/v3/transfer/batches", request);
|
|
5421
|
+
}
|
|
5422
|
+
/**
|
|
5423
|
+
* 通过微信批次单号查询批次单
|
|
5424
|
+
*
|
|
5425
|
+
* @param batchId - 微信批次单号
|
|
5426
|
+
* @param params - 可选查询参数
|
|
5427
|
+
* @returns 批次单详情
|
|
5428
|
+
*/
|
|
5429
|
+
async getTransferBatchByNo(batchId, params) {
|
|
5430
|
+
return this.client.get(
|
|
5431
|
+
`/v3/transfer/batches/batch-id/${batchId}`,
|
|
5432
|
+
params
|
|
5433
|
+
);
|
|
5434
|
+
}
|
|
5435
|
+
/**
|
|
5436
|
+
* 通过商家批次单号查询批次单
|
|
5437
|
+
*
|
|
5438
|
+
* @param outBatchNo - 商家批次单号
|
|
5439
|
+
* @param params - 可选查询参数
|
|
5440
|
+
* @returns 批次单详情
|
|
5441
|
+
*/
|
|
5442
|
+
async getTransferBatchByOutNo(outBatchNo, params) {
|
|
5443
|
+
return this.client.get(
|
|
5444
|
+
`/v3/transfer/batches/out-batch-no/${outBatchNo}`,
|
|
5445
|
+
params
|
|
5446
|
+
);
|
|
5447
|
+
}
|
|
5448
|
+
/**
|
|
5449
|
+
* 通过微信明细单号查询明细单
|
|
5450
|
+
*
|
|
5451
|
+
* @param batchId - 微信批次单号
|
|
5452
|
+
* @param detailId - 微信明细单号
|
|
5453
|
+
* @returns 明细单详情
|
|
5454
|
+
*/
|
|
5455
|
+
async getTransferDetailByNo(batchId, detailId) {
|
|
5456
|
+
return this.client.get(
|
|
5457
|
+
`/v3/transfer/batches/batch-id/${batchId}/details/detail-id/${detailId}`
|
|
5458
|
+
);
|
|
5459
|
+
}
|
|
5460
|
+
/**
|
|
5461
|
+
* 通过商家明细单号查询明细单
|
|
5462
|
+
*
|
|
5463
|
+
* @param outBatchNo - 商家批次单号
|
|
5464
|
+
* @param outDetailNo - 商家明细单号
|
|
5465
|
+
* @returns 明细单详情
|
|
5466
|
+
*/
|
|
5467
|
+
async getTransferDetailByOutNo(outBatchNo, outDetailNo) {
|
|
5468
|
+
return this.client.get(
|
|
5469
|
+
`/v3/transfer/batches/out-batch-no/${outBatchNo}/details/out-detail-no/${outDetailNo}`
|
|
5470
|
+
);
|
|
5471
|
+
}
|
|
5472
|
+
};
|
|
5473
|
+
|
|
5474
|
+
// src/services/partner-transfer-batch.ts
|
|
5475
|
+
var PartnerTransferBatchService = class {
|
|
5476
|
+
client;
|
|
5477
|
+
constructor(client) {
|
|
5478
|
+
this.client = client;
|
|
5479
|
+
}
|
|
5480
|
+
/**
|
|
5481
|
+
* 发起服务商批量转账
|
|
5482
|
+
*
|
|
5483
|
+
* @param request - 批量转账请求参数
|
|
5484
|
+
* @returns 批量转账结果
|
|
5485
|
+
*/
|
|
5486
|
+
async initiateBatchTransfer(request) {
|
|
5487
|
+
return this.client.post(
|
|
5488
|
+
"/v3/partner-transfer/batches",
|
|
5489
|
+
request
|
|
5490
|
+
);
|
|
5491
|
+
}
|
|
5492
|
+
/**
|
|
5493
|
+
* 通过微信批次单号查询批次单
|
|
5494
|
+
*
|
|
5495
|
+
* @param batchId - 微信批次单号
|
|
5496
|
+
* @param params - 可选查询参数
|
|
5497
|
+
* @returns 批次单详情
|
|
5498
|
+
*/
|
|
5499
|
+
async getTransferBatchByNo(batchId, params) {
|
|
5500
|
+
return this.client.get(
|
|
5501
|
+
`/v3/partner-transfer/batches/batch-id/${batchId}`,
|
|
5502
|
+
params
|
|
5503
|
+
);
|
|
5504
|
+
}
|
|
5505
|
+
/**
|
|
5506
|
+
* 通过商家批次单号查询批次单
|
|
5507
|
+
*
|
|
5508
|
+
* @param outBatchNo - 商家批次单号
|
|
5509
|
+
* @param params - 可选查询参数
|
|
5510
|
+
* @returns 批次单详情
|
|
5511
|
+
*/
|
|
5512
|
+
async getTransferBatchByOutNo(outBatchNo, params) {
|
|
5513
|
+
return this.client.get(
|
|
5514
|
+
`/v3/partner-transfer/batches/out-batch-no/${outBatchNo}`,
|
|
5515
|
+
params
|
|
5516
|
+
);
|
|
5517
|
+
}
|
|
5518
|
+
/**
|
|
5519
|
+
* 通过微信明细单号查询明细单
|
|
5520
|
+
*
|
|
5521
|
+
* @param batchId - 微信批次单号
|
|
5522
|
+
* @param detailId - 微信明细单号
|
|
5523
|
+
* @returns 明细单详情
|
|
5524
|
+
*/
|
|
5525
|
+
async getTransferDetailByNo(batchId, detailId) {
|
|
5526
|
+
return this.client.get(
|
|
5527
|
+
`/v3/partner-transfer/batches/batch-id/${batchId}/details/detail-id/${detailId}`
|
|
5528
|
+
);
|
|
5529
|
+
}
|
|
5530
|
+
/**
|
|
5531
|
+
* 通过商家明细单号查询明细单
|
|
5532
|
+
*
|
|
5533
|
+
* @param outBatchNo - 商家批次单号
|
|
5534
|
+
* @param outDetailNo - 商家明细单号
|
|
5535
|
+
* @returns 明细单详情
|
|
5536
|
+
*/
|
|
5537
|
+
async getTransferDetailByOutNo(outBatchNo, outDetailNo) {
|
|
5538
|
+
return this.client.get(
|
|
5539
|
+
`/v3/partner-transfer/batches/out-batch-no/${outBatchNo}/details/out-detail-no/${outDetailNo}`
|
|
5540
|
+
);
|
|
5541
|
+
}
|
|
5542
|
+
};
|
|
5543
|
+
|
|
5544
|
+
// src/services/ecommerce-profitsharing.ts
|
|
5545
|
+
var EcommerceProfitSharingService = class {
|
|
5546
|
+
client;
|
|
5547
|
+
constructor(client) {
|
|
5548
|
+
this.client = client;
|
|
5549
|
+
}
|
|
5550
|
+
/**
|
|
5551
|
+
* 请求分账
|
|
5552
|
+
*
|
|
5553
|
+
* @param request - 分账请求参数
|
|
5554
|
+
* @returns 分账结果
|
|
5555
|
+
*/
|
|
5556
|
+
async createOrder(request) {
|
|
5557
|
+
return this.client.post(
|
|
5558
|
+
"/v3/ecommerce/profitsharing/orders",
|
|
5559
|
+
request
|
|
5560
|
+
);
|
|
5561
|
+
}
|
|
5562
|
+
/**
|
|
5563
|
+
* 查询分账结果
|
|
5564
|
+
*
|
|
5565
|
+
* @param subMchid - 特约商户号
|
|
5566
|
+
* @param transactionId - 微信支付订单号
|
|
5567
|
+
* @param outOrderNo - 商户分账单号
|
|
5568
|
+
* @returns 分账结果详情
|
|
5569
|
+
*/
|
|
5570
|
+
async queryOrder(subMchid, transactionId, outOrderNo) {
|
|
5571
|
+
return this.client.get(
|
|
5572
|
+
"/v3/ecommerce/profitsharing/orders",
|
|
5573
|
+
{ sub_mchid: subMchid, transaction_id: transactionId, out_order_no: outOrderNo }
|
|
5574
|
+
);
|
|
5575
|
+
}
|
|
5576
|
+
/**
|
|
5577
|
+
* 请求分账回退
|
|
5578
|
+
*
|
|
5579
|
+
* @param request - 分账回退请求参数
|
|
5580
|
+
* @returns 回退结果
|
|
5581
|
+
*/
|
|
5582
|
+
async createReturnOrder(request) {
|
|
5583
|
+
return this.client.post(
|
|
5584
|
+
"/v3/ecommerce/profitsharing/returnorders",
|
|
5585
|
+
request
|
|
5586
|
+
);
|
|
5587
|
+
}
|
|
5588
|
+
/**
|
|
5589
|
+
* 查询分账回退结果
|
|
5590
|
+
*
|
|
5591
|
+
* @param subMchid - 特约商户号
|
|
5592
|
+
* @param orderId - 微信分账单号
|
|
5593
|
+
* @param outReturnNo - 商户回退单号
|
|
5594
|
+
* @returns 回退结果详情
|
|
5595
|
+
*/
|
|
5596
|
+
async queryReturnOrder(subMchid, orderId, outReturnNo) {
|
|
5597
|
+
return this.client.get(
|
|
5598
|
+
"/v3/ecommerce/profitsharing/returnorders",
|
|
5599
|
+
{ sub_mchid: subMchid, order_id: orderId, out_return_no: outReturnNo }
|
|
5600
|
+
);
|
|
5601
|
+
}
|
|
5602
|
+
/**
|
|
5603
|
+
* 完结分账
|
|
5604
|
+
*
|
|
5605
|
+
* @param request - 完结分账请求参数
|
|
5606
|
+
*/
|
|
5607
|
+
async finishOrder(request) {
|
|
5608
|
+
return this.client.post("/v3/ecommerce/profitsharing/finish-order", request);
|
|
5609
|
+
}
|
|
5610
|
+
/**
|
|
5611
|
+
* 请求售后服务分账
|
|
5612
|
+
*
|
|
5613
|
+
* @param request - 售后服务分账请求参数
|
|
5614
|
+
* @returns 售后服务分账结果
|
|
5615
|
+
*/
|
|
5616
|
+
async createAfterSalesOrder(request) {
|
|
5617
|
+
return this.client.post(
|
|
5618
|
+
"/v3/ecommerce/profitsharing/after-sales-orders",
|
|
5619
|
+
request
|
|
5620
|
+
);
|
|
5621
|
+
}
|
|
5622
|
+
/**
|
|
5623
|
+
* 查询售后服务分账结果
|
|
5624
|
+
*
|
|
5625
|
+
* @param subMchid - 子商户号
|
|
5626
|
+
* @param transactionId - 微信支付订单号
|
|
5627
|
+
* @returns 售后服务分账结果详情
|
|
5628
|
+
*/
|
|
5629
|
+
async queryAfterSalesOrder(subMchid, transactionId) {
|
|
5630
|
+
return this.client.get(
|
|
5631
|
+
"/v3/ecommerce/profitsharing/after-sales-orders",
|
|
5632
|
+
{ sub_mchid: subMchid, transaction_id: transactionId }
|
|
5633
|
+
);
|
|
5634
|
+
}
|
|
5635
|
+
/**
|
|
5636
|
+
* 查询订单剩余待分金额
|
|
5637
|
+
*
|
|
5638
|
+
* @param transactionId - 微信支付订单号
|
|
5639
|
+
* @returns 订单剩余待分金额
|
|
5640
|
+
*/
|
|
5641
|
+
async queryOrderAmount(transactionId) {
|
|
5642
|
+
return this.client.get(
|
|
5643
|
+
`/v3/ecommerce/profitsharing/orders/${transactionId}/amounts`
|
|
5644
|
+
);
|
|
5645
|
+
}
|
|
5646
|
+
/**
|
|
5647
|
+
* 添加分账接收方
|
|
5648
|
+
*
|
|
5649
|
+
* @param request - 添加接收方请求参数
|
|
5650
|
+
* @returns 添加接收方结果
|
|
5651
|
+
*/
|
|
5652
|
+
async addReceiver(request) {
|
|
5653
|
+
return this.client.post(
|
|
5654
|
+
"/v3/ecommerce/profitsharing/receivers/add",
|
|
5655
|
+
request
|
|
5656
|
+
);
|
|
5657
|
+
}
|
|
5658
|
+
/**
|
|
5659
|
+
* 删除分账接收方
|
|
5660
|
+
*
|
|
5661
|
+
* @param request - 删除接收方请求参数
|
|
5662
|
+
* @returns 删除接收方结果
|
|
5663
|
+
*/
|
|
5664
|
+
async deleteReceiver(request) {
|
|
5665
|
+
return this.client.post(
|
|
5666
|
+
"/v3/ecommerce/profitsharing/receivers/delete",
|
|
5667
|
+
request
|
|
5668
|
+
);
|
|
5669
|
+
}
|
|
5670
|
+
};
|
|
5671
|
+
|
|
5672
|
+
// src/services/ecommerce-refund.ts
|
|
5673
|
+
var EcommerceRefundService = class {
|
|
5674
|
+
client;
|
|
5675
|
+
constructor(client) {
|
|
5676
|
+
this.client = client;
|
|
4766
5677
|
}
|
|
4767
|
-
|
|
4768
|
-
|
|
4769
|
-
|
|
4770
|
-
|
|
4771
|
-
|
|
4772
|
-
|
|
4773
|
-
|
|
4774
|
-
|
|
4775
|
-
|
|
4776
|
-
|
|
4777
|
-
if (params.coupon_code) {
|
|
4778
|
-
urlParams.set("coupon_code", params.coupon_code);
|
|
5678
|
+
/**
|
|
5679
|
+
* 申请退款
|
|
5680
|
+
*
|
|
5681
|
+
* @param request - 退款请求参数
|
|
5682
|
+
* @returns 退款结果
|
|
5683
|
+
*
|
|
5684
|
+
* @see https://pay.weixin.qq.com/doc/v3/partner/4013080625
|
|
5685
|
+
*/
|
|
5686
|
+
async create(request) {
|
|
5687
|
+
return this.client.post("/v3/ecommerce/refunds/apply", request);
|
|
4779
5688
|
}
|
|
4780
|
-
|
|
4781
|
-
|
|
5689
|
+
/**
|
|
5690
|
+
* 查询单笔退款(通过商户退款单号)
|
|
5691
|
+
*
|
|
5692
|
+
* @param subMchid - 特约商户号
|
|
5693
|
+
* @param outRefundNo - 商户退款单号
|
|
5694
|
+
* @returns 退款详情
|
|
5695
|
+
*/
|
|
5696
|
+
async queryByOutRefundNo(subMchid, outRefundNo) {
|
|
5697
|
+
return this.client.get(
|
|
5698
|
+
`/v3/ecommerce/refunds/out-refund-no/${outRefundNo}`,
|
|
5699
|
+
{ sub_mchid: subMchid }
|
|
5700
|
+
);
|
|
4782
5701
|
}
|
|
4783
|
-
|
|
5702
|
+
/**
|
|
5703
|
+
* 查询单笔退款(通过微信支付退款单号)
|
|
5704
|
+
*
|
|
5705
|
+
* @param subMchid - 特约商户号
|
|
5706
|
+
* @param refundId - 微信支付退款单号
|
|
5707
|
+
* @returns 退款详情
|
|
5708
|
+
*/
|
|
5709
|
+
async queryByRefundId(subMchid, refundId) {
|
|
5710
|
+
return this.client.get(`/v3/ecommerce/refunds/id/${refundId}`, {
|
|
5711
|
+
sub_mchid: subMchid
|
|
5712
|
+
});
|
|
5713
|
+
}
|
|
5714
|
+
/**
|
|
5715
|
+
* 垫付退款回补
|
|
5716
|
+
*
|
|
5717
|
+
* 当电商平台已垫付退款给用户,后续从二级商户处回补该笔退款资金。
|
|
5718
|
+
*
|
|
5719
|
+
* @param request - 垫付回补请求参数
|
|
5720
|
+
* @returns 垫付回补结果
|
|
5721
|
+
*/
|
|
5722
|
+
async createReturnAdvance(request) {
|
|
5723
|
+
return this.client.post(
|
|
5724
|
+
`/v3/ecommerce/refunds/${request.refund_id}/return-advance`,
|
|
5725
|
+
{ sub_mchid: request.sub_mchid }
|
|
5726
|
+
);
|
|
5727
|
+
}
|
|
5728
|
+
/**
|
|
5729
|
+
* 查询垫付回补结果
|
|
5730
|
+
*
|
|
5731
|
+
* @param subMchid - 特约商户号
|
|
5732
|
+
* @param refundId - 微信退款单号
|
|
5733
|
+
* @returns 垫付回补结果
|
|
5734
|
+
*/
|
|
5735
|
+
async queryReturnAdvance(subMchid, refundId) {
|
|
5736
|
+
return this.client.get(
|
|
5737
|
+
`/v3/ecommerce/refunds/${refundId}/return-advance`,
|
|
5738
|
+
{ sub_mchid: subMchid }
|
|
5739
|
+
);
|
|
5740
|
+
}
|
|
5741
|
+
};
|
|
5742
|
+
|
|
5743
|
+
// src/services/ecommerce-subsidy.ts
|
|
5744
|
+
var EcommerceSubsidyService = class {
|
|
5745
|
+
client;
|
|
5746
|
+
constructor(client) {
|
|
5747
|
+
this.client = client;
|
|
5748
|
+
}
|
|
5749
|
+
/**
|
|
5750
|
+
* 请求补差
|
|
5751
|
+
*
|
|
5752
|
+
* @param request - 补差请求参数
|
|
5753
|
+
* @returns 补差结果
|
|
5754
|
+
*/
|
|
5755
|
+
async create(request) {
|
|
5756
|
+
return this.client.post(
|
|
5757
|
+
"/v3/ecommerce/subsidies/create",
|
|
5758
|
+
request
|
|
5759
|
+
);
|
|
5760
|
+
}
|
|
5761
|
+
/**
|
|
5762
|
+
* 请求补差回退
|
|
5763
|
+
*
|
|
5764
|
+
* @param request - 补差回退请求参数
|
|
5765
|
+
* @returns 回退结果
|
|
5766
|
+
*/
|
|
5767
|
+
async returnSubsidy(request) {
|
|
5768
|
+
return this.client.post(
|
|
5769
|
+
"/v3/ecommerce/subsidies/return",
|
|
5770
|
+
request
|
|
5771
|
+
);
|
|
5772
|
+
}
|
|
5773
|
+
/**
|
|
5774
|
+
* 取消补差
|
|
5775
|
+
*
|
|
5776
|
+
* @param request - 取消补差请求参数
|
|
5777
|
+
* @returns 取消补差结果
|
|
5778
|
+
*/
|
|
5779
|
+
async cancelSubsidy(request) {
|
|
5780
|
+
return this.client.post(
|
|
5781
|
+
"/v3/ecommerce/subsidies/cancel",
|
|
5782
|
+
request
|
|
5783
|
+
);
|
|
5784
|
+
}
|
|
5785
|
+
};
|
|
5786
|
+
|
|
5787
|
+
// src/services/brand-profitsharing.ts
|
|
5788
|
+
var BrandProfitSharingService = class {
|
|
5789
|
+
client;
|
|
5790
|
+
constructor(client) {
|
|
5791
|
+
this.client = client;
|
|
5792
|
+
}
|
|
5793
|
+
/**
|
|
5794
|
+
* 请求分账
|
|
5795
|
+
*
|
|
5796
|
+
* @param request - 分账请求参数
|
|
5797
|
+
* @returns 分账结果
|
|
5798
|
+
*/
|
|
5799
|
+
async createOrder(request) {
|
|
5800
|
+
return this.client.post(
|
|
5801
|
+
"/v3/brand/profitsharing/orders",
|
|
5802
|
+
request
|
|
5803
|
+
);
|
|
5804
|
+
}
|
|
5805
|
+
/**
|
|
5806
|
+
* 查询分账结果
|
|
5807
|
+
*
|
|
5808
|
+
* @param brandMchid - 品牌主商户号
|
|
5809
|
+
* @param subMchid - 特约商户号
|
|
5810
|
+
* @param transactionId - 微信支付订单号
|
|
5811
|
+
* @param outOrderNo - 商户分账单号
|
|
5812
|
+
* @returns 分账结果详情
|
|
5813
|
+
*/
|
|
5814
|
+
async queryOrder(brandMchid, subMchid, transactionId, outOrderNo) {
|
|
5815
|
+
return this.client.get("/v3/brand/profitsharing/orders", {
|
|
5816
|
+
brand_mchid: brandMchid,
|
|
5817
|
+
sub_mchid: subMchid,
|
|
5818
|
+
transaction_id: transactionId,
|
|
5819
|
+
out_order_no: outOrderNo
|
|
5820
|
+
});
|
|
5821
|
+
}
|
|
5822
|
+
/**
|
|
5823
|
+
* 请求分账回退
|
|
5824
|
+
*
|
|
5825
|
+
* @param request - 分账回退请求参数
|
|
5826
|
+
* @returns 回退结果
|
|
5827
|
+
*/
|
|
5828
|
+
async createReturnOrder(request) {
|
|
5829
|
+
return this.client.post(
|
|
5830
|
+
"/v3/brand/profitsharing/returnorders",
|
|
5831
|
+
request
|
|
5832
|
+
);
|
|
5833
|
+
}
|
|
5834
|
+
/**
|
|
5835
|
+
* 查询分账回退结果
|
|
5836
|
+
*
|
|
5837
|
+
* @param brandMchid - 品牌主商户号
|
|
5838
|
+
* @param subMchid - 特约商户号
|
|
5839
|
+
* @param orderId - 微信分账单号
|
|
5840
|
+
* @param outReturnNo - 商户回退单号
|
|
5841
|
+
* @returns 回退结果详情
|
|
5842
|
+
*/
|
|
5843
|
+
async queryReturnOrder(brandMchid, subMchid, orderId, outReturnNo) {
|
|
5844
|
+
return this.client.get(
|
|
5845
|
+
"/v3/brand/profitsharing/returnorders",
|
|
5846
|
+
{
|
|
5847
|
+
brand_mchid: brandMchid,
|
|
5848
|
+
sub_mchid: subMchid,
|
|
5849
|
+
order_id: orderId,
|
|
5850
|
+
out_return_no: outReturnNo
|
|
5851
|
+
}
|
|
5852
|
+
);
|
|
5853
|
+
}
|
|
5854
|
+
/**
|
|
5855
|
+
* 完结分账
|
|
5856
|
+
*
|
|
5857
|
+
* @param request - 完结分账请求参数
|
|
5858
|
+
*/
|
|
5859
|
+
async finishOrder(request) {
|
|
5860
|
+
return this.client.post("/v3/brand/profitsharing/finish-order", request);
|
|
5861
|
+
}
|
|
5862
|
+
/**
|
|
5863
|
+
* 查询最大分账比例
|
|
5864
|
+
*
|
|
5865
|
+
* @param brandMchid - 品牌主商户号
|
|
5866
|
+
* @returns 最大分账比例
|
|
5867
|
+
*/
|
|
5868
|
+
async queryBrandMerchantRatio(brandMchid) {
|
|
5869
|
+
return this.client.get(
|
|
5870
|
+
`/v3/brand/profitsharing/brand-configs/${brandMchid}`
|
|
5871
|
+
);
|
|
5872
|
+
}
|
|
5873
|
+
/**
|
|
5874
|
+
* 查询订单剩余待分金额
|
|
5875
|
+
*
|
|
5876
|
+
* @param transactionId - 微信支付订单号
|
|
5877
|
+
* @returns 订单剩余待分金额
|
|
5878
|
+
*/
|
|
5879
|
+
async queryOrderAmount(transactionId) {
|
|
5880
|
+
return this.client.get(
|
|
5881
|
+
`/v3/brand/profitsharing/orders/${transactionId}/amounts`
|
|
5882
|
+
);
|
|
5883
|
+
}
|
|
5884
|
+
/**
|
|
5885
|
+
* 添加分账接收方
|
|
5886
|
+
*
|
|
5887
|
+
* @param request - 添加接收方请求参数
|
|
5888
|
+
* @returns 添加接收方结果
|
|
5889
|
+
*/
|
|
5890
|
+
async addReceiver(request) {
|
|
5891
|
+
return this.client.post(
|
|
5892
|
+
"/v3/brand/profitsharing/receivers/add",
|
|
5893
|
+
request
|
|
5894
|
+
);
|
|
5895
|
+
}
|
|
5896
|
+
/**
|
|
5897
|
+
* 删除分账接收方
|
|
5898
|
+
*
|
|
5899
|
+
* @param request - 删除接收方请求参数
|
|
5900
|
+
* @returns 删除接收方结果
|
|
5901
|
+
*/
|
|
5902
|
+
async deleteReceiver(request) {
|
|
5903
|
+
return this.client.post(
|
|
5904
|
+
"/v3/brand/profitsharing/receivers/delete",
|
|
5905
|
+
request
|
|
5906
|
+
);
|
|
5907
|
+
}
|
|
5908
|
+
};
|
|
5909
|
+
function loadCertificate(certificate) {
|
|
5910
|
+
return new crypto2__default.default.X509Certificate(certificate);
|
|
4784
5911
|
}
|
|
4785
|
-
function
|
|
4786
|
-
|
|
4787
|
-
const nonceStr = generateNonceStr();
|
|
4788
|
-
const sign2 = generatePayScorePaySign(
|
|
4789
|
-
appId,
|
|
4790
|
-
timestamp,
|
|
4791
|
-
nonceStr,
|
|
4792
|
-
serviceId,
|
|
4793
|
-
outOrderNo,
|
|
4794
|
-
privateKey
|
|
4795
|
-
);
|
|
4796
|
-
return {
|
|
4797
|
-
appid: appId,
|
|
4798
|
-
mchid: mchId,
|
|
4799
|
-
service_id: serviceId,
|
|
4800
|
-
out_order_no: outOrderNo,
|
|
4801
|
-
timestamp,
|
|
4802
|
-
nonce_str: nonceStr,
|
|
4803
|
-
sign_type: "RSA",
|
|
4804
|
-
sign: sign2
|
|
4805
|
-
};
|
|
5912
|
+
function loadCertificateFromPath(path) {
|
|
5913
|
+
return new crypto2__default.default.X509Certificate(fs2__default.default.readFileSync(path, "utf-8"));
|
|
4806
5914
|
}
|
|
4807
|
-
function
|
|
4808
|
-
|
|
4809
|
-
|
|
4810
|
-
|
|
4811
|
-
|
|
4812
|
-
|
|
4813
|
-
|
|
4814
|
-
|
|
4815
|
-
outOrderNo,
|
|
4816
|
-
privateKey
|
|
4817
|
-
);
|
|
4818
|
-
return {
|
|
4819
|
-
mchid: mchId,
|
|
4820
|
-
service_id: serviceId,
|
|
4821
|
-
out_order_no: outOrderNo,
|
|
4822
|
-
timestamp,
|
|
4823
|
-
nonce_str: nonceStr,
|
|
4824
|
-
sign_type: "RSA",
|
|
4825
|
-
sign: sign2
|
|
4826
|
-
};
|
|
5915
|
+
function loadPrivateKey(key) {
|
|
5916
|
+
if (Buffer.isBuffer(key)) return key.toString("utf-8");
|
|
5917
|
+
if (key.startsWith("-----BEGIN")) return key;
|
|
5918
|
+
try {
|
|
5919
|
+
return fs2__default.default.readFileSync(key, "utf-8");
|
|
5920
|
+
} catch {
|
|
5921
|
+
return key;
|
|
5922
|
+
}
|
|
4827
5923
|
}
|
|
4828
|
-
function
|
|
4829
|
-
|
|
4830
|
-
|
|
4831
|
-
|
|
4832
|
-
|
|
4833
|
-
|
|
4834
|
-
|
|
4835
|
-
|
|
4836
|
-
outOrderNo,
|
|
4837
|
-
privateKey
|
|
4838
|
-
);
|
|
4839
|
-
return {
|
|
4840
|
-
appid: appId,
|
|
4841
|
-
mchid: mchId,
|
|
4842
|
-
service_id: serviceId,
|
|
4843
|
-
out_order_no: outOrderNo,
|
|
4844
|
-
timestamp,
|
|
4845
|
-
nonce_str: nonceStr,
|
|
4846
|
-
sign_type: "RSA",
|
|
4847
|
-
sign: sign2
|
|
4848
|
-
};
|
|
5924
|
+
function loadPublicKey(key) {
|
|
5925
|
+
if (Buffer.isBuffer(key)) return key.toString("utf-8");
|
|
5926
|
+
if (key.startsWith("-----BEGIN")) return key;
|
|
5927
|
+
try {
|
|
5928
|
+
return fs2__default.default.readFileSync(key, "utf-8");
|
|
5929
|
+
} catch {
|
|
5930
|
+
return key;
|
|
5931
|
+
}
|
|
4849
5932
|
}
|
|
4850
|
-
|
|
4851
|
-
|
|
4852
|
-
function buildMedInsMiniProgramBridgeConfig(mchid, mixTradeNo) {
|
|
4853
|
-
return {
|
|
4854
|
-
appId: MED_INS_APPID,
|
|
4855
|
-
path: MED_INS_PATH,
|
|
4856
|
-
extraData: {
|
|
4857
|
-
mchid,
|
|
4858
|
-
mix_trade_no: mixTradeNo
|
|
4859
|
-
}
|
|
4860
|
-
};
|
|
5933
|
+
function getCertificateSerialNumber(cert) {
|
|
5934
|
+
return cert.serialNumber.toUpperCase();
|
|
4861
5935
|
}
|
|
4862
|
-
function
|
|
4863
|
-
const
|
|
4864
|
-
const
|
|
4865
|
-
|
|
4866
|
-
|
|
4867
|
-
|
|
4868
|
-
|
|
4869
|
-
|
|
4870
|
-
|
|
4871
|
-
|
|
4872
|
-
signer.update(signString);
|
|
4873
|
-
signer.end();
|
|
4874
|
-
const sign2 = signer.sign(privateKey, "base64");
|
|
4875
|
-
return {
|
|
4876
|
-
appid: appId,
|
|
4877
|
-
mchid: mchId,
|
|
4878
|
-
mix_trade_no: mixTradeNo,
|
|
4879
|
-
timestamp,
|
|
4880
|
-
nonce_str: nonceStr,
|
|
4881
|
-
sign_type: "RSA",
|
|
4882
|
-
sign: sign2
|
|
4883
|
-
};
|
|
5936
|
+
function isCertificateExpired(cert, now) {
|
|
5937
|
+
const checkTime = now ?? /* @__PURE__ */ new Date();
|
|
5938
|
+
const validTo = new Date(cert.validTo);
|
|
5939
|
+
return checkTime > validTo;
|
|
5940
|
+
}
|
|
5941
|
+
function isCertificateValid(cert, now) {
|
|
5942
|
+
const checkTime = now ?? /* @__PURE__ */ new Date();
|
|
5943
|
+
const validFrom = new Date(cert.validFrom);
|
|
5944
|
+
const validTo = new Date(cert.validTo);
|
|
5945
|
+
return checkTime >= validFrom && checkTime <= validTo;
|
|
4884
5946
|
}
|
|
4885
5947
|
|
|
4886
5948
|
exports.AppService = AppService;
|
|
4887
5949
|
exports.BillService = BillService;
|
|
5950
|
+
exports.BrandProfitSharingService = BrandProfitSharingService;
|
|
4888
5951
|
exports.BusinessCircleService = BusinessCircleService;
|
|
4889
5952
|
exports.CallbackHandler = CallbackHandler;
|
|
4890
5953
|
exports.CertificateManager = CertificateManager;
|
|
@@ -4897,6 +5960,9 @@ exports.CombineService = CombineService;
|
|
|
4897
5960
|
exports.ComplaintService = ComplaintService;
|
|
4898
5961
|
exports.CouponService = CouponService;
|
|
4899
5962
|
exports.DecryptionException = DecryptionException;
|
|
5963
|
+
exports.EcommerceProfitSharingService = EcommerceProfitSharingService;
|
|
5964
|
+
exports.EcommerceRefundService = EcommerceRefundService;
|
|
5965
|
+
exports.EcommerceSubsidyService = EcommerceSubsidyService;
|
|
4900
5966
|
exports.GoldPlanService = GoldPlanService;
|
|
4901
5967
|
exports.H5Service = H5Service;
|
|
4902
5968
|
exports.HttpException = HttpException;
|
|
@@ -4909,16 +5975,24 @@ exports.MerchantExclusiveCouponService = MerchantExclusiveCouponService;
|
|
|
4909
5975
|
exports.MerchantTransferService = MerchantTransferService;
|
|
4910
5976
|
exports.NativeService = NativeService;
|
|
4911
5977
|
exports.ParkingService = ParkingService;
|
|
5978
|
+
exports.PartnerAppService = PartnerAppService;
|
|
5979
|
+
exports.PartnerH5Service = PartnerH5Service;
|
|
5980
|
+
exports.PartnerJsapiService = PartnerJsapiService;
|
|
5981
|
+
exports.PartnerNativeService = PartnerNativeService;
|
|
5982
|
+
exports.PartnerTransferBatchService = PartnerTransferBatchService;
|
|
5983
|
+
exports.PartnerTransferService = PartnerTransferService;
|
|
4912
5984
|
exports.PartnershipService = PartnershipService;
|
|
4913
5985
|
exports.PayGiftActivityService = PayGiftActivityService;
|
|
4914
5986
|
exports.PayScoreService = PayScoreService;
|
|
4915
5987
|
exports.PayrollCardService = PayrollCardService;
|
|
4916
5988
|
exports.ProfitSharingService = ProfitSharingService;
|
|
5989
|
+
exports.RefundService = RefundService;
|
|
4917
5990
|
exports.RetailStoreService = RetailStoreService;
|
|
4918
5991
|
exports.ScanAndRideService = ScanAndRideService;
|
|
4919
5992
|
exports.SecurityService = SecurityService;
|
|
4920
5993
|
exports.ServiceException = ServiceException;
|
|
4921
5994
|
exports.SmartGuideService = SmartGuideService;
|
|
5995
|
+
exports.TransferBatchService = TransferBatchService;
|
|
4922
5996
|
exports.ValidationException = ValidationException;
|
|
4923
5997
|
exports.WxPayClient = WxPayClient;
|
|
4924
5998
|
exports.WxPayError = WxPayError;
|
|
@@ -4952,7 +6026,14 @@ exports.generateNonce = generateNonce;
|
|
|
4952
6026
|
exports.generateNonceStr = generateNonceStr;
|
|
4953
6027
|
exports.generatePayScorePaySign = generatePayScorePaySign;
|
|
4954
6028
|
exports.generatePaySign = generatePaySign;
|
|
6029
|
+
exports.getCertificateSerialNumber = getCertificateSerialNumber;
|
|
6030
|
+
exports.isCertificateExpired = isCertificateExpired;
|
|
6031
|
+
exports.isCertificateValid = isCertificateValid;
|
|
4955
6032
|
exports.isTimestampValid = isTimestampValid;
|
|
6033
|
+
exports.loadCertificate = loadCertificate;
|
|
6034
|
+
exports.loadCertificateFromPath = loadCertificateFromPath;
|
|
6035
|
+
exports.loadPrivateKey = loadPrivateKey;
|
|
6036
|
+
exports.loadPublicKey = loadPublicKey;
|
|
4956
6037
|
exports.oaepDecrypt = oaepDecrypt;
|
|
4957
6038
|
exports.oaepEncrypt = oaepEncrypt;
|
|
4958
6039
|
exports.registerSensitiveFields = registerSensitiveFields;
|