123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225 |
- 'use strict';
- const Request = require("request");
- /**
- * 建筑短信发送相关接口
- *
- * @author CaiAoLin
- * @date 2018/1/25
- * @version
- */
- const crypto = require('crypto');
- class SMS {
- /**
- * 构造函数
- *
- * @return {void}
- */
- constructor() {
- this.url = 'http://www.sendcloud.net/smsapi/send';
- this.smsUser = 'smartcost';
- this.smskey = 'kuGmqTt10n6vBXivhxXsAuG8aoCsQ1x6';
- }
- /**
- * 发送信息
- *
- * @param {String|Array} mobile - 发送的电话号码
- * @param {String} code - 验证码
- * @return {Boolean} - 发送结果
- */
- async send(mobile, code) {
- try {
- const formData = {
- smsUser: this.smsUser,
- templateId: 25595,
- msgType: 0,
- phone: mobile,
- vars: '{"%code%":'+ code +'}',
- };
- const signature = await this.getSignature(this.sortDict(formData), this.smskey);
- formData.signature = signature;
- let postData = {
- url: this.url,
- form: formData,
- encoding: 'utf8'
- };
- return new Promise(function (resolve, reject) {
- try {
- // 请求接口
- Request.post(postData, function (err, postResponse, body) {
- if (err) {
- throw '请求错误';
- }
- if (postResponse.statusCode !== 200) {
- throw '短信发送失败!';
- }
- resolve(body);
- });
- } catch (error) {
- reject([]);
- }
- });
- } catch (error) {
- console.log(error);
- }
- }
- async sendLoginMsg(mobile, name, date, time, local, ip) {
- console.log(mobile, name, time, local, ip);
- try {
- const formData = {
- smsUser: this.smsUser,
- templateId: 27561,
- msgType: 0,
- phone: mobile,
- vars: '{"%name%": "' + name + '", "%date%": "' + date + '", "%time%": "' + time + '", "%local%": "' + local + '", "%IP%": "' + ip + '"}',
- };
- const signature = await this.getSignature(this.sortDict(formData), this.smskey);
- formData.signature = signature;
- let postData = {
- url: this.url,
- form: formData,
- encoding: 'utf8'
- };
- return new Promise(function (resolve, reject) {
- try {
- // 请求接口
- Request.post(postData, function (err, postResponse, body) {
- if (err) {
- throw '请求错误';
- }
- if (postResponse.statusCode !== 200) {
- throw '短信发送失败!';
- }
- resolve(body);
- });
- } catch (error) {
- reject([]);
- }
- });
- } catch (error) {
- console.log(error);
- }
- }
- async sendProductMsg(mobile, status, name, product, deadline) {
- try {
- let templateId = 0;
- switch (status) {
- case 1: templateId = 746377;break;// 产品升级通知
- case 2: templateId = 746376;break;// 产品降级通知
- case 3: templateId = 746378;break;// 产品延期通知
- }
- const formData = {
- smsUser: this.smsUser,
- templateId: templateId,
- msgType: 0,
- phone: mobile,
- };
- formData.vars = '{"%name%": "' + name + '", "%product%": "' + product + '"' + (status !== 2 ? ', "%deadline%": "' + deadline + '"' : '') +'}';
- const signature = await this.getSignature(this.sortDict(formData), this.smskey);
- formData.signature = signature;
- let postData = {
- url: this.url,
- form: formData,
- encoding: 'utf8'
- };
- return new Promise(function (resolve, reject) {
- try {
- // 请求接口
- Request.post(postData, function (err, postResponse, body) {
- if (err) {
- throw '请求错误';
- }
- if (postResponse.statusCode !== 200) {
- throw '短信发送失败!';
- }
- resolve(body);
- });
- } catch (error) {
- reject([]);
- }
- });
- } catch (error) {
- console.log(error);
- }
- }
- md5(data) {
- var str = data;
- return crypto.createHash("md5").update(str).digest("hex");
- }
- sortDict(dict){
- var dict2={},
- keys = Object.keys(dict).sort();
- for (var i = 0, n = keys.length, key; i < n; ++i) {
- key = keys[i];
- dict2[key] = dict[key];
- }
- return dict2;
- }
- async getSignature (sorted_param, smsKey) {
- var param_str = "";
- for(var key in sorted_param)
- param_str += (key + '=' + sorted_param[key] + '&')
- var param_str = smsKey + '&' + param_str + smsKey;
- var sign = this.md5(param_str);
- return sign.toUpperCase();
- }
- /**
- * 生成随机字符串
- *
- * @param {Number} length - 需要生成字符串的长度
- * @param {Number} type - 1为数字和字符 2为纯数字 3为纯字母
- * @return {String} - 返回生成结果
- */
- generateRandomString(length, type = 1) {
- length = parseInt(length);
- length = isNaN(length) ? 1 : length;
- let randSeed = [];
- let numberSeed = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
- let stringSeed = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',
- 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
- 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'];
- switch (type) {
- case 1:
- randSeed = stringSeed.concat(numberSeed);
- stringSeed = numberSeed = null;
- break;
- case 2:
- randSeed = numberSeed;
- break;
- case 3:
- randSeed = stringSeed;
- break;
- default:
- break;
- }
- const seedLength = randSeed.length - 1;
- let result = '';
- for (let i = 0; i < length; i++) {
- const index = Math.ceil(Math.random() * seedLength);
- result += randSeed[index];
- }
- return result;
- }
- }
- module.exports = SMS;
|