/*
name:网易短信服务集成nodejs版;
author:zeq
time:20180607
test:
// checkValidCode('157****6954','284561').then(res=>console.log(res))
// .catch(err=>console.log(err));
// sendMsg(3992798,['157****6954'],['zeq']).then(res=>{
//     console.log(JSON.stringify(res));
// }).catch(e=>{
//     console.log(JSON.stringify(e));
// });
// sendValidCode('15726656954').then(res=>{
//     console.log(res);
// }).catch(e=>{
//     console.log(e);
// });
*/

var http =require('http');
var qs = require('querystring');
var crypto = require('crypto');
var util = require('./util');


const appKey = '';
const appSecret = '';
const noticeMsgUrl = 'https://api.netease.im/sms/sendtemplate.action';
const validCodeUrl = 'https://api.netease.im/sms/sendcode.action';
const checkValidCodeUrl = 'https://api.netease.im/sms/verifycode.action';


module.exports = {
    sendValidCode,
    sendMsg,
    checkValidCode
};

function checkValidCode(mobile,code){
    return new Promise((resolve,reject)=>{
        let postData = qs.stringify({
            mobile,
            code
        });
        let options = packageHeaders('/sms/verifycode.action',postData);
        let req = http.request(options,res=>{
            var data = '';
            res.on('data',d=> data += d);
            res.on('end',()=>resolve(data));
            res.on('error',(err)=>reject(err));
        });
        req.on('error',(err)=>reject(err));
        req.write(postData);
        req.end();
    });
}

function sendMsg(templateid,mobiles,params){
    return new Promise((resolve,reject) => {
        mobiles = JSON.stringify(mobiles);
        params = JSON.stringify(params);
        let postData = `templateid=${templateid}&mobiles=${mobiles}&params=${params}`;
        let options = packageHeaders('/sms/sendtemplate.action',postData);
        let req = http.request(options,(res)=>{
            res.on('error',(res)=>{
                reject(res);
            });
            let resData = '';
            res.on('data',d=>{
                resData += d;
            });
            res.on('end',()=>{
                resolve(resData);
            });
        });
        req.on('error',(err)=>{
            reject(err);
        });
        req.on('warning',(err)=>{
            reject(err);
        });
        req.write(postData);
        req.end();
    });
}
function sendValidCode(tel){
    return new Promise((resolve,reject) => {
        const data = qs.stringify({
            mobile:tel,
            codeLen:6
        });
        let options = packageHeaders('/sms/sendcode.action',data);
        let req = http.request(options,(res)=>{
            var resData = '';
            res.on('data',d=>{
                resData += d;
            });
            res.on('end',()=>{
                resolve(resData);
            });
        });

        req.on('error',(err)=>{
            console.log(err);
            reject(err);
        });
        req.write(data);
        req.end();
    })
}
/*sha1 加密 其实是在util里的*/
function sha1(str){
    var sha1 = crypto.createHash('sha1');
    sha1.update(str);
    var secret = sha1.digest('hex');
    return secret;
}

/*请求header里的参数*/
function packageHeaders(urlPath,postData){
    var Nonce = util.createRandomNum(10);
    var CurTime = Date.now();
    var CheckSum = sha1([appSecret,Nonce,CurTime].join(''));
    return {
        hostname:'api.netease.im',
        port:80,
        path:urlPath,
        method:'POST',
        headers:{
            appKey,
            Nonce,
            CurTime,
            CheckSum,
            'content-type': contentType,
            'content-length':Buffer.byteLength(postData)
        }
    }
}

网易短信网关nodejs项目集成,已经调通。如果有网易的IM帐号,就可以直接用,只需要修改appId,appSecret就可以了。需要的拿走,不谢。