/*
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就可以了。需要的拿走,不谢。

网易短信接口集成 nodejs 版的更多相关文章

  1. 阿里大鱼短信接口(Python3版)

    近期由于须要用到短信接口,选型的的结果是用阿里大鱼的短信服务,然而淘宝开放平台(TOP)的SDK已经非常多年没有更新了.不支持python3.自己动手改了半天,还是不太正常,索性不用它,自己写一个算了 ...

  2. 阿里短信接口使用(JAVA版)

    近期项目需要使用短信接口,对比下选择了阿里的短信接口 以下为开发笔记: maven pom.xml中引入: <dependency> <groupId>com.aliyun&l ...

  3. 模板短信接口调用java,pythoy版(一) 网易云信

    说明 短信服务平台有很多,我只是个人需求,首次使用,算是测试用的,故选个网易(大公司). 稳定性:我只测试了15条短信... 不过前3条短信5分钟左右的延时,后面就比较快.... 我只是需要发短信,等 ...

  4. asp.net mvc短信接口调用——阿里大于API开发心得

    互联网上有许多公司提供短信接口服务,诸如网易云信.阿里大于等等.我在自己项目里需要使用到短信服务起到通知作用,实际开发周期三天,完成配置.开发和使用,总的说,阿里大于提供的接口易于开发,非常的方便,短 ...

  5. Thinkphp框架 -- 短信接口验证码

    我用的是一款名叫 短信宝 的应用,新注册的用户可以免费3条测试短信,发现一个BUG,同个手机可以无限注册,自己玩玩还是可以的. 里面的短信接口代码什么信息都没有,感觉看得不是很明白,自己测试了一遍,可 ...

  6. 阿里云短信验证解决方案(java版)(redis存储)

    最近搞了一个互联网项目的注册,需要写一个手机号验证(由于之前没有轮子,只能自己摸索了); 1:基本思路: 1>购买了阿里云短信服务->下载阿里云短信发送demo(java版); 2> ...

  7. ABP框架中短信发送处理,包括阿里云短信和普通短信商的短信发送集成

    在一般的系统中,往往也有短信模块的需求,如动态密码的登录,系统密码的找回,以及为了获取用户手机号码的短信确认等等,在ABP框架中,本身提供了对邮件.短信的基础支持,那么只需要根据自己的情况实现对应的接 ...

  8. asp.net两种方式的短信接口使用(提供接口的都是收费的)

    一种是http请求的方式,另一种就是提供WebService接口供调用的. //服务商 sms.webchinese.cn //sms_url="http://sms.webchinese. ...

  9. destoon短信接口修改方法

    destoon是很优秀的B2B行业站程序.程序模块化开发契合度很高,二次开发起来也很顺畅.数据缓存,权限分配,SEO功能方面都不错. 但是在使用这套程序的时候,常常要用到发送短信的功能,而destoo ...

随机推荐

  1. SharedPreferences 存储数组+双击退出

    public static void saveApkEnalbleArray(Context context,boolean[] booleanArray) { SharedPreferences p ...

  2. Python种使用Excel

    今天用到Excel的相关操作,看了一些资料,借此为自己保存一些用法. 参考资料: python excel 的相关操作 python操作excel之xlrd python操作Excel读写--使用xl ...

  3. spring data jpa使用原生sql查询

    spring data jpa使用原生sql查询 @Repository public interface AjDao extends JpaRepository<Aj,String> { ...

  4. 如何细粒度地控制你的MyBatis二级缓存(mybatis-enhanced-cache插件实现)

    前几天网友chanfish 给我抛出了一个问题,笼统地讲就是如何能细粒度地控制MyBatis的二级缓存问题,酝酿了几天,觉得可以写个插件来实现这个这一功能.本文就是从问题入手,一步步分析现存的MyBa ...

  5. Collection接口和Collections类的简单区别和讲解

    这里仅仅进行一些简单的比较,如果你想要更加详细的信息话,请自己百度. 1.Collection: 是集合类的上层接口.本身是一个Interface,里面包含了一些集合的基本操作. Collection ...

  6. Effective C++ 条款17 以独立语句将newed对象置入智能指针

      对于函数: int priority(); void processWidget(std::tr1::  shared_ptr<Widget> pw,int priority); 调用 ...

  7. PostgreSQL源码解读 基础结构 node

    一.node节点的定义 源代码路径postgresql-9.2.3/src/include/nodes/nodes.h 在查询解析SQL的查询部分,要用到大量的结构体,许多函数处理的逻辑类似,就是传入 ...

  8. 文本分析实例---QQ聊天记录分析

    对QQ聊天记录进行分析,由于每天产生的聊天记录比較多,所以选取的是从2月份整月的聊天记录数据.分析要产生的结果有三个,聊天记录中发消息的人前top15.统计24小时时间段那个时间段发贴人最多,还有对消 ...

  9. openwrt 编译 gmediarender

    output_gstreamer.o: In function `my_bus_callback': output_gstreamer.c:(.text+0xf68): undefined refer ...

  10. MYSQL强制使用索引和禁止使用索引

    mysql强制索引和禁止某个索引 1.mysql强制使用索引:force index(索引名或者主键PRI) 例如: select * from table force index(PRI) limi ...