网易短信接口集成 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 ...
随机推荐
- python3.x对python2.x变动
原文地址:http://rookiedong.iteye.com/blog/1185403 python 2.4 与 python 3.0 的比较 一. print 从语句变为函数 原: pr ...
- 第2章 CentOS网络配置
一.配置说明 1.1 说明 1.本文以VM仅本机模式下与宿主机的网络配置为例. 1.2 达成目标 1.Windows能ping通centOS 2 centOS能够ping通Windows 3 cent ...
- Linux最常用的命名
一.环境配置 vim /etc/sysconfig/network-scripts/ifcfg-eth0 vim /etc/sysconfig/network vim /etc/hostname vi ...
- 深入理解iPhone数据持久化(手把手教你iphone开发 – 基础篇)
在所有的移动开发平台数据持久化都是很重要的部分:在j2me中是rms或保存在应用程序的目录中,在symbian中可以保存在相应的磁盘目录中和数据库中.symbian中因为权限认证的原因,在3rd上大多 ...
- js 中 Map/Set 集合
Map Map是一组键值对的结构,具有极快的查找速度. 举个例子,假设要根据同学的名字查找对应的成绩,如果用Array实现,需要两个Array: 1 var names = ['Michael', ...
- SqlServer 数据恢复
首先看看微软官方的给出的建议(摘自:http://technet.microsoft.com/zh-cn/library/ms189272.aspx): 在从完整恢复模式或大容量日志恢复模式切换前,请 ...
- [poj 2331] Water pipe ID A*迭代加深搜索(dfs)
Water pipe Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 2265 Accepted: 602 Description ...
- 基于社交网络的情绪化分析IV
基于社交网络的情绪化分析IV By 白熊花田(http://blog.csdn.net/whiterbear) 转载需注明出处,谢谢. 前面进行了微博数据的抓取,简单的处理,类似度分析.后面两篇进行学 ...
- uva 11488 - Hyper Prefix Sets(字典树)
H Hyper Prefix Sets Prefix goodness of a set string is length of longest common prefix*number of str ...
- 【转载】关于Hash
这个HASH算法不是大学里数据结构课里那个HASH表的算法.这里的HASH算法是密码学的基础,比较常用的有MD5和SHA,最重要的两条性质,就是不可逆和无冲突.所谓不可逆,就是当你知道x的HASH值, ...