/** * Copyright(c) Alibaba Group Holding Limited. * * @file: sms-sdk * @authors: qiankun (https://work.alibaba-inc.com/work/u/85053) * @date 18/1/31 */ 'use strict'; var _regenerator = require('babel-runtime/regenerator'); var _regenerator2 = _interopRequireDefault(_regenerator); var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator'); var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2); var _extends2 = require('babel-runtime/helpers/extends'); var _extends3 = _interopRequireDefault(_extends2); var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _createClass2 = require('babel-runtime/helpers/createClass'); var _createClass3 = _interopRequireDefault(_createClass2); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var DysmsapiClient = require('@alicloud/dysmsapi-2017-05-25'); var DybaseapiClient = require('@alicloud/dybaseapi'); var MNSClient = require('@alicloud/mns'); // 短信回执报告:SmsReport,短信上行:SmsUp var msgTypeList = ["SmsReport", "SmsUp"]; var DYSMSAPI_ENDPOINT = 'http://dysmsapi.aliyuncs.com'; var DYBASEAPI_ENDPOINT = 'http://dybaseapi.aliyuncs.com'; var DEFAULT_REGION = 'cn-hangzhou'; function hasOwnProperty(obj, key) { return Object.prototype.hasOwnProperty.call(obj, key); } var SMSClient = function () { function SMSClient(options) { (0, _classCallCheck3.default)(this, SMSClient); var accessKeyId = options.accessKeyId, secretAccessKey = options.secretAccessKey, smsApiEndpoint = options.smsApiEndpoint, baseApiEndpoint = options.baseApiEndpoint, regionId = options.regionId, mnsVpc = options.mnsVpc; if (!accessKeyId) { throw new TypeError('parameter "accessKeyId" is required'); } if (!secretAccessKey) { throw new TypeError('parameter "secretAccessKey" is required'); } this.dysmsapiClient = new DysmsapiClient({ accessKeyId: accessKeyId, secretAccessKey: secretAccessKey, regionId: regionId || DEFAULT_REGION, endpoint: smsApiEndpoint || DYSMSAPI_ENDPOINT }); this.dybaseClient = new DybaseapiClient({ accessKeyId: accessKeyId, secretAccessKey: secretAccessKey, regionId: regionId || DEFAULT_REGION, endpoint: baseApiEndpoint || DYBASEAPI_ENDPOINT }); this.mnsVpc = mnsVpc || { secure: false, // use https or http internal: false, // use internal endpoint vpc: false }; this.expire = []; this.mnsClient = []; } //群发短信 (0, _createClass3.default)(SMSClient, [{ key: 'sendBatchSMS', value: function sendBatchSMS(params) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; return this.dysmsapiClient.sendBatchSms(params, (0, _extends3.default)({ formatParams: false }, options)); } //发送短信 }, { key: 'sendSMS', value: function sendSMS(params) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; return this.dysmsapiClient.sendSms(params, options); } //查询详情 }, { key: 'queryDetail', value: function queryDetail(params) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; return this.dysmsapiClient.querySendDetails(params, options); } //失效时间与当前系统时间比较,提前2分钟刷新token }, { key: '_refresh', value: function _refresh(type) { return this.expire[type] - new Date().getTime() > 2 * 60 * 1000; } //获取token }, { key: '_getToken', value: function _getToken(type) { var msgType = msgTypeList[type]; return this.dybaseClient.queryTokenForMnsQueue({ MessageType: msgType }); } //根据类型获取mnsclient实例 }, { key: '_getMNSClient', value: function () { var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(type) { var _ref2, _ref2$MessageTokenDTO, SecurityToken, AccessKeyId, AccessKeySecret, mnsClient; return _regenerator2.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: if (!(this.mnsClient && this.mnsClient[type] instanceof MNSClient && this._refresh(type))) { _context.next = 2; break; } return _context.abrupt('return', this.mnsClient[type]); case 2: _context.next = 4; return this._getToken(type); case 4: _ref2 = _context.sent; _ref2$MessageTokenDTO = _ref2.MessageTokenDTO; SecurityToken = _ref2$MessageTokenDTO.SecurityToken; AccessKeyId = _ref2$MessageTokenDTO.AccessKeyId; AccessKeySecret = _ref2$MessageTokenDTO.AccessKeySecret; if (AccessKeyId && AccessKeySecret && SecurityToken) { _context.next = 11; break; } throw new TypeError('get token fail'); case 11: mnsClient = new MNSClient('1943695596114318', (0, _extends3.default)({ securityToken: SecurityToken, region: DEFAULT_REGION, accessKeyId: AccessKeyId, accessKeySecret: AccessKeySecret, // optional & default secure: false, // use https or http internal: false, // use internal endpoint vpc: false }, this.mnsVpc)); this.mnsClient[type] = mnsClient; this.expire[type] = new Date().getTime() + 10 * 60 * 1000; return _context.abrupt('return', mnsClient); case 15: case 'end': return _context.stop(); } } }, _callee, this); })); function _getMNSClient(_x4) { return _ref.apply(this, arguments); } return _getMNSClient; }() //typeIndex :0 为回执,1为上行 }, { key: 'receiveMsg', value: function () { var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2() { var typeIndex = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; var preQueueName = arguments[1]; var waitSeconds = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 10; var isDel = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; var queueName, mnsClient, res, code, ReceiptHandle; return _regenerator2.default.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: queueName = preQueueName + msgTypeList[typeIndex]; _context2.next = 3; return this._getMNSClient(typeIndex); case 3: mnsClient = _context2.sent; _context2.next = 6; return mnsClient.receiveMessage(queueName, waitSeconds); case 6: res = _context2.sent; code = res.code, ReceiptHandle = res.body.ReceiptHandle; if (!(isDel && code === 200 && ReceiptHandle)) { _context2.next = 11; break; } _context2.next = 11; return mnsClient.deleteMessage(queueName, ReceiptHandle); case 11: return _context2.abrupt('return', res); case 12: case 'end': return _context2.stop(); } } }, _callee2, this); })); function receiveMsg() { return _ref3.apply(this, arguments); } return receiveMsg; }() }]); return SMSClient; }(); module.exports = SMSClient;