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中利用Promise来封装异步函数
Feb 25 NodeJs
nodejs爬虫抓取数据乱码问题总结
Jul 03 NodeJs
Nodejs Stream 数据流使用手册
Apr 17 NodeJs
详解nodejs中的process进程
Mar 19 NodeJs
nodejs批量下载图片的实现方法
May 19 NodeJs
深入理解Nodejs Global 模块
Jun 03 NodeJs
ajax +NodeJS 实现图片上传实例
Jun 06 NodeJs
Nodejs+express+ejs简单使用实例代码
Sep 18 NodeJs
nodejs取得当前执行路径的方法
May 13 NodeJs
Nodejs处理异常操作示例
Dec 25 NodeJs
nodejs 使用http进行post或get请求的实例(携带cookie)
Jan 03 NodeJs
详解NodeJS模块化
Jun 15 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删除目录及目录下所有文件的方法详解
2013/06/06 PHP
php判断是否为json格式的方法
2014/03/04 PHP
PHP实现通过URL提取根域名
2016/03/31 PHP
Yii2.0 模态弹出框+ajax提交表单
2016/05/22 PHP
IE6弹出“已终止操作”的解决办法
2010/11/27 Javascript
基于JavaScript实现 获取鼠标点击位置坐标的方法
2013/04/12 Javascript
调用jQuery滑出效果时闪烁的解决方法
2014/03/27 Javascript
基于Vuejs框架实现翻页组件
2020/06/29 Javascript
javaScript字符串工具类StringUtils详解
2017/12/08 Javascript
axios简单实现小程序延时loading指示
2018/07/30 Javascript
Vue模拟数据,实现路由进入商品详情页面的示例
2018/08/31 Javascript
Nuxt.js之自动路由原理的实现方法
2018/11/21 Javascript
解决vue组件中click事件失效的问题
2019/11/09 Javascript
vue中实现图片压缩 file文件的方法
2020/05/28 Javascript
Vue axios 跨域请求无法带上cookie的解决
2020/09/08 Javascript
JavaScript 实现轮播图特效的示例
2020/11/05 Javascript
[46:43]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第三局
2016/02/28 DOTA
[02:55]含熏伴清风,风行者至宝、屠夫身心及典藏宝瓶二展示
2020/09/08 DOTA
Python读写Excel文件的实例
2013/11/01 Python
Python3实现连接SQLite数据库的方法
2014/08/23 Python
Python文件和目录操作详解
2015/02/08 Python
Python IDLE入门简介
2017/12/08 Python
Django Admin实现三级联动的示例代码(省市区)
2018/06/22 Python
python2与python3中关于对NaN类型数据的判断和转换方法
2018/10/30 Python
Python Series从0开始索引的方法
2018/11/06 Python
使用python绘制3维正态分布图的方法
2018/12/29 Python
基于python实现判断字符串是否数字算法
2020/07/10 Python
使用CSS3实现多列布局与多背景的技巧
2016/02/29 HTML / CSS
英国儿童家具专卖店:GLTC
2016/09/24 全球购物
设计师家具购买和委托在线市场:Viyet
2016/11/16 全球购物
日本著名化妆品零售网站:Cosme Land
2019/03/01 全球购物
网络工程师的自我评价
2013/10/02 职场文书
木工主管岗位职责
2013/12/08 职场文书
2014优秀党员事迹材料
2014/08/14 职场文书
小兵张嘎电影观后感
2015/06/03 职场文书
win10识别不了U盘怎么办 win10系统读取U盘失败的解决办法
2022/08/05 数码科技