NodeJS实现阿里大鱼短信通知发送


Posted in NodeJs onJanuary 17, 2016

1、说明

阿里大鱼提供了验证码,短信通知,语音等服务,在使用后感觉挺方便,不愧是阿里旗下的产品。

最近想搞个NodeJS发送短信通知的功能,这里没有使用 alidayu-node (开始做的时候并不知道有这个。如果使用alidayu-node那就简单了。),自己整一个签名sign,实现短信发送。

官方的 文档 说明了签名 sign 的生成步骤,不过第三步骤:

3、连接字符串 连接参数名与参数值,并在首尾加上secret

有错误( 首尾加上secret 是错的)

2、代码实现

生成 sign

/**
 * 根据淘宝官网提供的教程
 * http://open.taobao.com/doc2/detail.htm?articleId=101617&docType=1&treeId=1
 */
var md5 = require("blueimp-md5");

// 淘宝应用App信息(换成自己的)
var config = {
  AppKey: '233002**',
  AppSecret: '3403636b338e100399**'
};
exports.config=config;

var dySign = function (obj) {
  // 生成时间戳
  var time = new Date();
  var timestamp = time.getFullYear() + "-" +
    ("0" + (time.getMonth() + 1)).slice(-2) + "-" +
    ("0" + time.getDate()).slice(-2) + ' ' +
    ("0" + time.getHours()).slice(-2)  + ":" +
    ("0" + time.getMinutes()).slice(-2) + ":" +
    ("0" + time.getSeconds()).slice(-2);
  obj.timestamp = timestamp;

  // 程序key
  obj.app_key = config.AppKey;
  
  // 参数数组
  var arr = [];
  // 循环添加参数项
  for(var p in obj){
    arr.push(p + obj[p]);
  }
  // 2、按首字母升序排列
  arr.sort();
  // 3、连接字符串
  var msg = arr.join('');
  // console.log(msg);

  // 生成签名 sign hmac
  var sign = md5(msg, config.AppSecret);

  // 返回
  return sign.toUpperCase();
}

module.exports.dySign = dySign;

拼接字符串并发送请求

var signGenerate = require('./create_dysign');
var http = require('http');
var qs = require('querystring');

var alidayuUrl = 'http://gw.api.taobao.com/router/rest';
// 短信发送的参数对象
var obj = {
  format: 'json',
  method: 'alibaba.aliqin.fc.sms.num.send',
  v: '2.0',
  timestamp: '2016-1-16 02:33:30',
  partner_id: 'top-sdk-nodejs-20160116',
  rec_num: '15110****', //手机号多个以逗号间隔
  sign_method: 'hmac',
  sms_type: 'normal',
  sms_param: '{"code":"giscafer","product":"alidayu短信测试"}',
  sms_free_sign_name: '身份验证',
  sms_template_code: 'SMS_4725038'
}
//生成签名并拼接请求参数链接
var sign = signGenerate.dySign(obj);
console.log('签名:', sign);

obj.sign = sign;
obj.app_key = signGenerate.config.AppKey;
var arr = [];
for (var p in obj) {
  arr.push(p + '=' + obj[p]);
}
var msg = arr.join('&')
var sendurl = alidayuUrl + '?' + msg;
console.log('完成请求地址:' + sendurl);

/**
 * 短信发送请求测试
 */
var params = qs.stringify(obj);
var options = {
  hostname: 'gw.api.taobao.com',
  port: 80,
  path: '/router/rest?' + params,
  method: 'GET'
};
var req = http.request(options, function (res) {
  console.log('STATUS: ' + res.statusCode);
  // console.log('HEADERS: ' + JSON.stringify(res.headers));
  // console.log(req.path);
  res.setEncoding('utf8');
  res.on('data', function (chunk) {
    console.log('RESULT: ' + chunk);
  });
});

req.on('error', function (e) {
  console.log('ERROR: ' + e.message);
});

// write data to request body
req.write("执行完毕!");

req.end();

请求结果

{"alibaba_aliqin_fc_sms_num_send_response":{"result":{"err_code":"0","model":"100545278271^1100912293896","success":true},"request_id":"15q8um2g8w8ef"}}

NodeJs 相关文章推荐
windows系统下简单nodejs安装及环境配置
Jan 08 NodeJs
NodeJS url验证(url-valid)的使用方法
Nov 18 NodeJs
Nodejs异步回调的优雅处理方法
Sep 25 NodeJs
Nodejs关于gzip/deflate压缩详解
Mar 04 NodeJs
深入浅析NodeJs并发异步的回调处理
Dec 21 NodeJs
NodeJS处理Express中异步错误
Mar 26 NodeJs
nodejs爬虫遇到的乱码问题汇总
Apr 07 NodeJs
nodejs中sleep功能实现暂停几秒的方法
Jul 12 NodeJs
nodejs实现爬取网站图片功能
Dec 14 NodeJs
nodejs更新package.json中的dependencies依赖到最新版本的方法
Oct 10 NodeJs
Nodejs实现用户注册功能
Apr 14 NodeJs
实例详解Nodejs 保存 payload 发送过来的文件
Jan 14 #NodeJs
Nodejs express框架一个工程中同时使用ejs模版和jade模版
Dec 28 #NodeJs
深入浅析NodeJs并发异步的回调处理
Dec 21 #NodeJs
基于nodejs+express(4.x+)实现文件上传功能
Nov 23 #NodeJs
Nodejs Express4.x开发框架随手笔记
Nov 23 #NodeJs
Nodejs的express使用教程
Nov 23 #NodeJs
nodejs初步体验篇
Nov 23 #NodeJs
You might like
虫族 Zerg 历史背景
2020/03/14 星际争霸
PHP连接SQLServer2005的实现方法(附ntwdblib.dll下载)
2012/07/02 PHP
windows下配置apache+php+mysql时出现问题的处理方法
2014/06/20 PHP
PHP处理大量表单字段的便捷方法
2015/02/07 PHP
Yii2中SqlDataProvider用法示例
2016/09/22 PHP
javascript入门基础之私有变量
2010/02/23 Javascript
浅谈Javascript中匀速运动的停止条件
2014/12/19 Javascript
js实现仿Windows风格选项卡和按钮效果实例
2015/05/13 Javascript
javascript同步服务器时间和同步倒计时小技巧
2015/09/24 Javascript
基于javascript实现窗口抖动效果
2016/01/03 Javascript
微信小程序 购物车简单实例
2016/10/24 Javascript
jQuery-mobile事件监听与用法详解
2016/11/23 Javascript
基于ES6 Array.of的用法(实例讲解)
2017/09/05 Javascript
微信小程序使用video组件播放视频功能示例【附源码下载】
2017/12/08 Javascript
Nuxt.js实战详解
2018/01/18 Javascript
node中modules.exports与exports导出的区别
2018/06/08 Javascript
JavaScript创建对象的常用方式总结
2018/08/10 Javascript
Vue父子之间值传递的实例教程
2020/07/02 Javascript
[58:18]2018DOTA2亚洲邀请赛3月29日 小组赛B组 iG VS Mineski
2018/03/30 DOTA
Python性能优化的20条建议
2014/10/25 Python
使用Python的判断语句模拟三目运算
2015/04/24 Python
python修改操作系统时间的方法
2015/05/18 Python
python抓取百度首页的方法
2015/05/19 Python
Django 导出 Excel 代码的实例详解
2017/08/11 Python
TensorFlow 模型载入方法汇总(小结)
2018/06/19 Python
Python中几种属性访问的区别与用法详解
2018/10/10 Python
Django Sitemap 站点地图的实现方法
2019/04/29 Python
Python实现的插入排序,冒泡排序,快速排序,选择排序算法示例
2019/05/04 Python
Waterford英国官方网站:世界上最受欢迎的优质水晶品牌
2019/08/17 全球购物
ASICS印度官方网站:日本专业运动品牌
2020/06/20 全球购物
村干部承诺书
2014/03/28 职场文书
《雪儿》教学反思
2014/04/17 职场文书
个人收入证明范本
2014/09/18 职场文书
2014年数学教师工作总结
2014/12/03 职场文书
董事长岗位职责
2015/02/13 职场文书
处罚决定书范文
2015/06/24 职场文书