| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180 | 'use strict';import Request from "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);        }    }    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;
 |