/* 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}¶ms=${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就可以了。需要的拿走,不谢。
A pure heart will go far.