网易短信接口集成 nodejs 版
/*
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就可以了。需要的拿走,不谢。
网易短信接口集成 nodejs 版的更多相关文章
- 阿里大鱼短信接口(Python3版)
近期由于须要用到短信接口,选型的的结果是用阿里大鱼的短信服务,然而淘宝开放平台(TOP)的SDK已经非常多年没有更新了.不支持python3.自己动手改了半天,还是不太正常,索性不用它,自己写一个算了 ...
- 阿里短信接口使用(JAVA版)
近期项目需要使用短信接口,对比下选择了阿里的短信接口 以下为开发笔记: maven pom.xml中引入: <dependency> <groupId>com.aliyun&l ...
- 模板短信接口调用java,pythoy版(一) 网易云信
说明 短信服务平台有很多,我只是个人需求,首次使用,算是测试用的,故选个网易(大公司). 稳定性:我只测试了15条短信... 不过前3条短信5分钟左右的延时,后面就比较快.... 我只是需要发短信,等 ...
- asp.net mvc短信接口调用——阿里大于API开发心得
互联网上有许多公司提供短信接口服务,诸如网易云信.阿里大于等等.我在自己项目里需要使用到短信服务起到通知作用,实际开发周期三天,完成配置.开发和使用,总的说,阿里大于提供的接口易于开发,非常的方便,短 ...
- Thinkphp框架 -- 短信接口验证码
我用的是一款名叫 短信宝 的应用,新注册的用户可以免费3条测试短信,发现一个BUG,同个手机可以无限注册,自己玩玩还是可以的. 里面的短信接口代码什么信息都没有,感觉看得不是很明白,自己测试了一遍,可 ...
- 阿里云短信验证解决方案(java版)(redis存储)
最近搞了一个互联网项目的注册,需要写一个手机号验证(由于之前没有轮子,只能自己摸索了); 1:基本思路: 1>购买了阿里云短信服务->下载阿里云短信发送demo(java版); 2> ...
- ABP框架中短信发送处理,包括阿里云短信和普通短信商的短信发送集成
在一般的系统中,往往也有短信模块的需求,如动态密码的登录,系统密码的找回,以及为了获取用户手机号码的短信确认等等,在ABP框架中,本身提供了对邮件.短信的基础支持,那么只需要根据自己的情况实现对应的接 ...
- asp.net两种方式的短信接口使用(提供接口的都是收费的)
一种是http请求的方式,另一种就是提供WebService接口供调用的. //服务商 sms.webchinese.cn //sms_url="http://sms.webchinese. ...
- destoon短信接口修改方法
destoon是很优秀的B2B行业站程序.程序模块化开发契合度很高,二次开发起来也很顺畅.数据缓存,权限分配,SEO功能方面都不错. 但是在使用这套程序的时候,常常要用到发送短信的功能,而destoo ...
随机推荐
- Day 4 Linux基础
Linux基础(指令篇) 一.Linux命令 1.Linux命令行的语法格式: 命令+选项+参数 命令:告诉Linux(UNIX)操作系统做(执行)什么. 选项:说明命令运行的方式(可以改变命令的功能 ...
- JVM内存分为哪几部分?各个部分的作用是什么?
JVM内存分为哪几部分?各个部分的作用是什么? 1. Java虚拟机内存的五大区域 Java的运行离不开Java虚拟机的支持,今天我就跟大家探讨一下Java虚拟机的一些基础知识. JVM内存区域分 ...
- 【Java TCP/IP Socket】基于线程池的TCP服务器(含代码)
了解线程池 在http://blog.csdn.net/ns_code/article/details/14105457(读书笔记一:TCP Socket)这篇博文中,服务器端采用的实现方式是:一个客 ...
- Linux查看系统状态命令top
用法 top 自动刷新系统状态,要结束使用[Ctrl]+[C] 效果图: 信息解释(转自百度经验http://jingyan.baidu.com/article/4d58d5412917cb9dd4e ...
- Java 读写文件大全
原文:http://www.open-open.com/code/view/1423281836529 java中多种方式读文件 一.多种方式读文件内容. 1.按字节读取文件内容 2.按字符读取文件内 ...
- UNIDAC如何驱动MSSQL2000
UNIDAC如何驱动MSSQL2000 如下图,PROVIDER必须设置为PRSQL.默认的PRAUTO,如果操作系统是XP可以,如果是WIN7以上的,不可以. 原因是MSSQL NATIVE 11已 ...
- centos下开启htaccess
不知道原本 centOS是否默认支持 .htaccess 可能是因为我总弄配置文件无意中给搞坏了 今天要用到就查了下怎么开启 想要顺利开启需注意以下几点, 这几点都是在httpd.conf 这个配置文 ...
- ffmpeg实时编码解码部分代码
程序分为编码端和解码端,两端通过tcp socket通信,编码端一边编码一边将编码后的数据发送给解码端.解码端一边接收数据一边将解码得到的帧显示出来. 代码中的编码端编码的是实时屏幕截图. 代码调用 ...
- GBDT调参
gbm算法流程图: gbdt 参数:参考scikit-learn The overall parameters can be divided into 3 categories: Tree-Speci ...
- 1054. 求平均值 (20)-PAT乙级真题
今天刚刚到学校,2017年学习正式开始了,今天看到了浙大的<数据结构>这学期又要开课了,决定一定要跟着学习一遍:在大学生mooc网上学习:http://www.icourse163.org ...