UNPKG

node-easysms

Version:

EasySMS is an SMS sender for Node.js

90 lines (88 loc) 4.54 kB
'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 }); exports.TencentGateway = void 0; const GatewayErrorException_1 = require("../Core/Exceptions/GatewayErrorException"); const Gateway_1 = require("../Core/Gateway"); const Utils_1 = require("../Core/Support/Utils"); /** * 腾讯云短信服务 * @see https://cloud.tencent.com/document/product/382/55981 */ class TencentGateway extends Gateway_1.Gateway { send(to, message) { return __awaiter(this, void 0, void 0, function* () { var _a, _b; let data = yield message.getData(this); let signName = (_b = (_a = (yield message.getSignName(this))) !== null && _a !== void 0 ? _a : this.config['sign_name']) !== null && _b !== void 0 ? _b : ''; let phone = to.getUniversalNumber(); let params = { PhoneNumberSet: [phone], SmsSdkAppId: this.config['sdk_app_id'], SignName: signName, TemplateId: yield message.getTemplate(this), TemplateParamSet: Object.values(data) || [], }; let time = (0, Utils_1.timestamp)(); let result = yield this.postJson(TencentGateway.ENDPOINT_URL, params, { Authorization: this.generateSign(params, time), Host: TencentGateway.ENDPOINT_HOST, 'X-TC-Action': TencentGateway.ENDPOINT_METHOD, 'X-TC-Region': this.config['region'] || 'ap-guangzhou', 'X-TC-Timestamp': time, 'X-TC-Version': TencentGateway.ENDPOINT_VERSION, }); if (result['Response']['Error'] && result['Response']['Error']['Code']) { throw new GatewayErrorException_1.GatewayErrorException(result['Response']['Error']['Message'], result); } if (result['Response']['SendStatusSet']) { for (let set of result['Response']['SendStatusSet']) { if (set['Code'] !== 'OK') { throw new GatewayErrorException_1.GatewayErrorException(set['Message'], result); } } } return result; }); } generateSign(params, time) { let date = (0, Utils_1.timestampUTC)('YYYY-MM-DD', new Date(parseInt(time + '000'))); let secretKey = this.config['secret_key']; let secretId = this.config['secret_id']; let CanonicalURI = '/'; let CanonicalQueryString = ''; let canonicalRequest = `POST ${CanonicalURI} ${CanonicalQueryString} content-type:application/json; charset=utf-8 host:${TencentGateway.ENDPOINT_HOST} content-type;host ${(0, Utils_1.createHash)(JSON.stringify(params), 'sha256')}`; let stringToSign = `TC3-HMAC-SHA256 ${time} ${date}/${TencentGateway.ENDPOINT_SERVICE}/tc3_request ${(0, Utils_1.createHash)(canonicalRequest, 'sha256')}`; let secretDate = (0, Utils_1.createHmac)(date, `TC3${secretKey}`, 'sha256', null); let secretService = (0, Utils_1.createHmac)(TencentGateway.ENDPOINT_SERVICE, secretDate, 'sha256', null); let secretSigning = (0, Utils_1.createHmac)('tc3_request', secretService, 'sha256', null); let signature = (0, Utils_1.createHmac)(stringToSign, secretSigning, 'sha256'); return 'TC3-HMAC-SHA256' + ` Credential=${secretId}/${date}/${TencentGateway.ENDPOINT_SERVICE}/tc3_request` + `, SignedHeaders=content-type;host, Signature=${signature}`; } } exports.TencentGateway = TencentGateway; TencentGateway.ENDPOINT_URL = 'https://sms.tencentcloudapi.com'; TencentGateway.ENDPOINT_HOST = 'sms.tencentcloudapi.com'; TencentGateway.ENDPOINT_SERVICE = 'sms'; TencentGateway.ENDPOINT_METHOD = 'SendSms'; TencentGateway.ENDPOINT_VERSION = '2021-01-11'; TencentGateway.ENDPOINT_FORMAT = 'json';