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服务器(4):路由
Dec 18 NodeJs
nodejs批量修改文件编码格式
Jan 22 NodeJs
nodejs开发微博实例
Mar 25 NodeJs
Nodejs中Express 常用中间件 body-parser 实现解析
May 22 NodeJs
nodejs实现的连接MySQL数据库功能示例
Jan 25 NodeJs
通过nodejs 服务器读取HTML文件渲染到页面的方法
May 17 NodeJs
深入理解nodejs搭建静态服务器(实现命令行)
Feb 05 NodeJs
nodejs使用async模块同步执行的方法
Mar 02 NodeJs
Nodejs实现用户注册功能
Apr 14 NodeJs
NodeJs 实现简单WebSocket即时通讯的示例代码
Aug 05 NodeJs
通过实例了解Nodejs模块系统及require机制
Jul 16 NodeJs
NodeJs使用webpack打包项目的方法详解
Feb 28 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运行SVN命令显示某用户的文件更新记录的代码
2014/01/03 PHP
PHP仿tp实现mvc框架基本设计思路与实现方法分析
2018/05/23 PHP
Laravel用户授权系统的使用方法示例
2018/09/16 PHP
给moz-firefox下添加IE方法和属性
2007/04/10 Javascript
基于jquery的二级联动菜单实现代码
2011/04/25 Javascript
深入理解JavaScript系列(16) 闭包(Closures)
2012/04/12 Javascript
jQuery $.data()方法使用注意细节
2012/12/31 Javascript
Javascript对象属性方法汇总
2013/11/21 Javascript
jquery中html、val与text三者属性取值的联系与区别介绍
2013/12/29 Javascript
JQuery实现动态适时改变字体颜色的方法
2015/03/10 Javascript
jQuery实现3D文字特效的方法
2015/03/10 Javascript
关于JavaScript限制字数的输入框的那些事
2016/08/14 Javascript
Nodejs进阶:如何将图片转成datauri嵌入到网页中去实例
2016/11/21 NodeJs
JS使用正则实现去掉字符串左右空格的方法
2016/12/27 Javascript
selenium 与 chrome 进行qq登录并发邮件操作实例详解
2017/04/06 Javascript
javascript数据结构中栈的应用之符号平衡问题
2017/04/11 Javascript
ES6中字符串string常用的新增方法小结
2017/11/07 Javascript
Angular使用操作事件指令ng-click传多个参数示例
2018/03/27 Javascript
JavaScript设计模式之工厂模式和抽象工厂模式定义与用法分析
2018/07/26 Javascript
JS数组实现分类统计实例代码
2018/09/30 Javascript
Vue中使用canvas方法总结
2019/02/12 Javascript
Node4-5静态资源服务器实战以及优化压缩文件实例内容
2019/08/29 Javascript
vue设置动态请求地址的例子
2019/11/01 Javascript
Vue router传递参数并解决刷新页面参数丢失问题
2020/12/02 Vue.js
python判断windows系统是32位还是64位的方法
2015/05/11 Python
解决uWSGI的编码问题详解
2017/03/24 Python
python实现rsa加密实例详解
2017/07/19 Python
django中的setting最佳配置小结
2017/11/21 Python
关于Python的一些学习总结
2018/05/25 Python
python使用response.read()接收json数据的实例
2018/12/19 Python
python 中Arduino串口传输数据到电脑并保存至excel表格
2019/10/14 Python
搭建pypi私有仓库实现过程详解
2020/11/25 Python
享受加州生活方式的时尚舒适:XCVI
2018/07/09 全球购物
美国牙科折扣计划:DentalPlans.com
2019/08/26 全球购物
mysql_pconnect()和mysql_connect()有什么区别
2012/05/25 面试题
正规欠条模板
2015/07/03 职场文书