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 相关文章推荐
nodejs命令行参数处理模块commander使用实例
Sep 17 NodeJs
Nodejs实现批量下载妹纸图
May 28 NodeJs
nodejs创建web服务器之hello world程序
Aug 20 NodeJs
基于Nodejs利用socket.io实现多人聊天室
Feb 22 NodeJs
nodejs 终端打印进度条实例代码
Apr 22 NodeJs
CentOS 安装NodeJS V8.0.0的方法
Jun 15 NodeJs
Nodejs实现文件上传的示例代码
Sep 26 NodeJs
Nodejs+angularjs结合multiparty实现多图片上传的示例代码
Sep 29 NodeJs
nodejs使用express获取get和post传值及session验证的方法
Nov 09 NodeJs
详解nodejs通过响应回写的方式渲染页面资源
Apr 07 NodeJs
Nodejs 和 Electron ubuntu下快速安装过程
May 04 NodeJs
nodejs的路径问题的解决
Jun 30 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
PHP获取数组中重复最多的元素的实现方法
2014/11/11 PHP
php输出形式实例整理
2020/05/05 PHP
bcastr2.0 通用的图片浏览器
2006/11/22 Javascript
javascript 词法作用域和闭包分析说明
2010/08/12 Javascript
JS获取URL中的参数数据
2013/12/05 Javascript
基于jquery实现的文字向上跑动类似跑马灯的效果
2014/06/17 Javascript
JQuery中上下文选择器实现方法
2015/05/18 Javascript
jquery实现动画菜单的左右滚动、渐变及图形背景滚动等效果
2015/08/25 Javascript
jquery实现带缩略图的可定制高度画廊效果(5种)
2015/08/28 Javascript
JS实现网页标题栏显示当前时间和日期的完整代码
2015/11/02 Javascript
dedecms页面如何获取会员状态的实例代码
2016/03/15 Javascript
配置nodejs环境的方法
2017/05/13 NodeJs
微信小程序出现wx.navigateTo页面不跳转问题的解决方法
2017/12/26 Javascript
全面介绍vue 全家桶和项目实例
2017/12/27 Javascript
angularjs实现的购物金额计算工具示例
2018/05/08 Javascript
JavaScript和TypeScript中的void的具体使用
2019/09/12 Javascript
vue双向绑定数据限制长度的方法
2019/11/04 Javascript
js 计数排序的实现示例(升级版)
2020/01/12 Javascript
vue实现简单图片上传
2020/06/30 Javascript
快速查询Python文档方法分享
2017/12/27 Python
shell命令行,一键创建 python 模板文件脚本方法
2018/03/20 Python
Python爬虫实现全国失信被执行人名单查询功能示例
2018/05/03 Python
python+PyQT实现系统桌面时钟
2020/06/16 Python
Python中请不要再用re.compile了
2019/06/30 Python
python查看数据类型的方法
2019/10/12 Python
互斥锁解决 Python 中多线程共享全局变量的问题(推荐)
2020/09/28 Python
python爬虫调度器用法及实例代码
2020/11/30 Python
德国最大的设计师鞋网上商店:Budapester
2017/12/07 全球购物
幼儿教师思想汇报
2014/01/10 职场文书
中国梦演讲稿3分钟
2014/08/19 职场文书
党的群众路线教育实践活动个人对照检查材料(医生)
2014/11/05 职场文书
2015年度党员个人总结
2015/02/14 职场文书
2019年世界儿童日宣传标语
2019/11/22 职场文书
送给自己的励志语句:要安静的优秀,悄无声息的坚强
2019/11/26 职场文书
MySQL 8.0 驱动与阿里druid版本兼容问题解决
2021/07/01 MySQL
vue3语法糖内的defineProps及defineEmits
2022/04/14 Vue.js