Files
2026-10-08 18:14:56 +08:00

173 lines
7.9 KiB
JavaScript

"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const CryptoJS = require("crypto-js");
const request = require("request");
var AuthorizationType;
(function (AuthorizationType) {
AuthorizationType[AuthorizationType["OPEN-FORM-PARAM"] = 0] = "OPEN-FORM-PARAM";
AuthorizationType[AuthorizationType["OPEN-BODY-SIG"] = 1] = "OPEN-BODY-SIG";
AuthorizationType[AuthorizationType["OPEN-ACCESS-TOKEN"] = 2] = "OPEN-ACCESS-TOKEN";
})(AuthorizationType || (AuthorizationType = {}));
/**
* Open SDK for Node.JS
*/
class OpenSdk {
/**
* @class
* @param {OpenSdkConfig} config 初始化 SDK 配置
*/
constructor(config) {
if (!config.appId) {
throw Error('config.appId is required');
}
if (!config.appKey) {
throw Error('config.appKey is required');
}
this.config = config;
}
/**
* 生成请求字符串
* @param {QueryParams} params 请求参数
* @return {string} 请求字符串
*/
generateSignature(params) {
if (params.authorization !== 'OPEN-FORM-PARAM' && !AuthorizationType[params.authorization]) {
params.authorization = AuthorizationType['OPEN-BODY-SIG'];
}
let content = JSON.stringify(params.content);
if (params.authorization === AuthorizationType['OPEN-FORM-PARAM'] || params.authorization === 'OPEN-FORM-PARAM') {
let contentHash = CryptoJS.SHA256(content).toString();
let signStr = this.config.appId + params.timestamp + params.nonce + contentHash;
let signature = CryptoJS.HmacSHA256(signStr, this.config.appKey);
let signatureStr = CryptoJS.enc.Base64.stringify(signature);
let signatureEncode = encodeURIComponent(signatureStr);
let str = `?authorization=${params.authorization}&appId=${this.config.appId}&timestamp=${params.timestamp}&nonce=${params.nonce}&content=${encodeURIComponent(content)}&signature=${signatureEncode}`;
return str;
}
if (params.authorization === AuthorizationType['OPEN-BODY-SIG']) {
let contentHash = CryptoJS.SHA256(content).toString();
let signStr = this.config.appId + params.timestamp + params.nonce + contentHash;
let signature = CryptoJS.HmacSHA256(signStr, this.config.appKey);
let signatureStr = CryptoJS.enc.Base64.stringify(signature);
return signatureStr;
}
if (params.authorization === AuthorizationType['OPEN-ACCESS-TOKEN']) {
let signStr = this.config.appId + params.timestamp + params.nonce + this.config.appKey;
let signatureStr = CryptoJS.SHA256(signStr).toString();
return signatureStr;
}
}
/**
* 发送请求
* @param {QueryParams} params 请求参数
* @return {Promise<OpenSdkCommonResult | string>} 请求执行结果
*/
exec(params) {
return __awaiter(this, void 0, void 0, function* () {
if (!params.queryUrl) {
throw Error('params.queryUrl is required');
}
if (!params.nonce) {
throw Error('params.nonce is required');
}
if (!params.timestamp) {
throw Error('params.timestamp is required');
}
const str = this.generateSignature(params);
const config = this.config;
// console.log('test', params.authorization === AuthorizationType['OPEN-FORM-PARAM'] || params.authorization === 'OPEN-FORM-PARAM', params.authorization === AuthorizationType['OPEN-FORM-PARAM'] , params.authorization === 'OPEN-FORM-PARAM')
if (params.authorization === AuthorizationType['OPEN-FORM-PARAM'] || params.authorization === 'OPEN-FORM-PARAM') {
// const Url = params.queryUrl + encodeURIComponent(str);
return params.queryUrl + str;
// return new Promise((resolve, reject) => {
// request(Url, (error, _response, body) => {
// if (!error) {
// if (typeof (body) === 'object') {
// resolve(JSON.parse(body));
// }
// else {
// resolve(body);
// }
// }
// reject(error);
// });
// });
}
if (params.authorization === AuthorizationType['OPEN-BODY-SIG']) {
const Url = params.queryUrl;
return new Promise((resolve, reject) => {
request({
url: Url,
method: "POST",
headers: {
"Authorization": `OPEN-BODY-SIG AppId="${config.appId}", Timestamp="${params.timestamp}", Nonce="${params.nonce}", Signature="${str}"`,
},
body: JSON.stringify(params.content),
}, (error, _response, body) => {
if (!error) {
if (typeof (body) === 'object') {
resolve(JSON.parse(body));
}
else {
resolve(body);
}
}
reject(error);
});
});
}
if (params.authorization === AuthorizationType['OPEN-ACCESS-TOKEN']) {
const Url = params.queryUrl;
const token = yield new Promise((resolve, reject) => {
request({
url: 'https://test-api-open.chinaums.com/v1/token/access',
method: "POST",
body: JSON.stringify({
appId: config.appId,
timestamp: params.timestamp,
nonce: params.nonce,
signMethod: 'SHA256',
Signature: str
})
}, (error, _response, body) => {
if (!error) {
resolve(JSON.parse(body).accessToken);
}
reject(error);
});
});
return new Promise((resolve, reject) => {
request({
url: Url,
method: "POST",
headers: {
"Authorization": `OPEN-ACCESS-TOKEN AccessToken="${token}"`,
},
body: JSON.stringify(params.content),
}, (error, _response, body) => {
if (!error) {
if (typeof (body) === 'object') {
resolve(JSON.parse(body));
}
else {
resolve(body);
}
}
reject(error);
});
});
}
});
}
}
exports.default = OpenSdk;
//# sourceMappingURL=base.js.map