UNPKG

wsign

Version:

generate wechat / wework pay signture

142 lines (141 loc) 4.33 kB
"use strict"; /* * @Author: Yoney Y (YuTianyuan) * @Date: 2022-02-19 18:52:12 * @Last Modified by: YoneyY (YuTianyuan) * @Last Modified time: 2022-02-21 23:51:23 */ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const fs_1 = __importDefault(require("fs")); const strdm_1 = __importDefault(require("strdm")); const https_1 = __importDefault(require("https")); const crypto_1 = __importDefault(require("crypto")); /** * 兼容微信/企业微信支付参数加密使用 * Compatible with WeChat / WeWork payment parameter encryption */ class WxSign { state; /** * 兼容微信/企业微信支付参数加密使用 * Compatible with WeChat / WeWork payment parameter encryption * @param state */ constructor(state) { if (state.params) throw new Error('`params` field must be passed in through the `setParams` function'); this.state = state; } /** * generate random string * If you just want to generate random strings, you can install strdm library * 如果只想生成随机字符串,可以安装 strdm 库 * @link see strdm library https://www.npmjs.com/package/strdm * @param length * @param options * @returns */ generateString(length, options) { return (0, strdm_1.default)(length, options); } /** * generate only order * @param num * @returns */ generateOrder(num) { if (num < 6) throw new Error('The length of num cannot be less than 6'); const d = new Date(); const dl = [ d.getFullYear(), d.getMonth() + 1, d.getDate(), d.getHours(), d.getMinutes(), d.getSeconds() ]; const dt = dl.map(item => `${item}`?.[1] ? item : '0' + item).join(''); const order = dt + (0, strdm_1.default)(num - dt.length, { strings: false }); return order; } /** * generate sign * @param type * @returns */ generateSign(type = 'workwx_sign') { const { params = {} } = this.state; const stringSignTemp = Reflect .ownKeys(params) .sort() .map((item) => (`${item}=${params[item]}`)).join('&'); const result = crypto_1.default .createHash('md5') .update(type === 'sign' ? stringSignTemp + '&key=' + this.state.key : stringSignTemp + '&secret=' + this.state.secret, 'utf8') .digest('hex') .toUpperCase(); return result; } /** * generate sign XML * @param field * @returns */ generateSignXML(field) { const { params = {} } = this.state; params[field] = this.generateSign('sign'); const xmlStr = `<xml>${Reflect.ownKeys(params).map((item) => `<${item}>${params[item]}</${item}>`).join('')}</xml>`; return xmlStr; } /** * generate agent * @returns */ generateAgent() { if (!this.state.agent) throw new Error('Please pass in `agent` when instantiating'); const { key, cert } = this.state.agent; return new https_1.default.Agent({ key: fs_1.default.existsSync(key) ? fs_1.default.readFileSync(key) : key, cert: fs_1.default.existsSync(cert) ? fs_1.default.readFileSync(cert) : cert }); } /** * setData * @param key * @param value * @returns */ setData(key, value) { if (key == null) throw new Error('`key` param must be required'); if (value == null) throw new Error('`value` param must be required'); if (typeof key !== 'string') throw new Error('`key` param must be string type'); if (!this.state.params) this.state.params = {}; this.state.params[key] = value; return this; } /** * setParams * @param params * @returns */ setParams(params = {}) { this.state.params = params; return this; } } exports.default = WxSign;