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 express框架一个工程中同时使用ejs模版和jade模版
Dec 28 NodeJs
NodeJs的优势和适合开发的程序
Aug 14 NodeJs
Nodejs+Socket.io实现通讯实例代码
Feb 13 NodeJs
NodeJs中express框架的send()方法简介
Jun 20 NodeJs
NodeJS实现图片上传代码(Express)
Jun 30 NodeJs
nodejs基于WS模块实现WebSocket聊天功能的方法
Jan 12 NodeJs
nodejs连接mysql数据库及基本知识点详解
Mar 20 NodeJs
nodeJs爬虫的技术点总结
May 13 NodeJs
nodejs使用async模块同步执行的方法
Mar 02 NodeJs
详解nodejs 开发企业微信第三方应用入门教程
Mar 12 NodeJs
nodejs实现聊天机器人功能
Sep 19 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 远程图片保存到本地的函数类
2008/12/08 PHP
PHP合并静态文件详解
2014/11/14 PHP
jQuery+Ajax+PHP“喜欢”评级功能实现代码
2015/10/08 PHP
理解PHP中的Session及对Session有效期的控制
2016/01/08 PHP
php empty 函数判断结果为空但实际值却为非空的原因解析
2018/05/28 PHP
laravel 事件/监听器实例代码
2019/04/12 PHP
PHP 进程池与轮询调度算法实现多任务的示例代码
2019/11/26 PHP
学习ExtJS border布局
2009/10/08 Javascript
jQuery的each终止或跳过示例代码
2013/12/12 Javascript
兼容IE、firefox以及chrome的js获取时间(getFullYear)
2014/07/04 Javascript
超精准的javascript验证身份证号的具体实现方法
2015/11/18 Javascript
Javascript之Number对象介绍
2016/06/07 Javascript
JS使用JSON作为参数实例分析
2016/06/23 Javascript
Vue.js每天必学之数据双向绑定
2016/09/05 Javascript
JavaScript"模拟事件"的注意要点详解
2019/02/13 Javascript
微信小程序人脸识别功能代码实例
2019/05/07 Javascript
微信小程序实现搜索功能并跳转搜索结果页面
2019/05/18 Javascript
微信小程序实现搜索指定景点周边美食、酒店
2019/05/18 Javascript
JavaScript 继承 封装 多态实现及原理详解
2019/07/29 Javascript
微信小程序跳转到其他网页(外部链接)的实现方法
2019/09/20 Javascript
浅谈javascript事件环微任务和宏任务队列原理
2020/09/12 Javascript
Python书单 不将就
2017/07/11 Python
django的登录注册系统的示例代码
2018/05/14 Python
Python数据分析模块pandas用法详解
2019/09/04 Python
Python3 操作 MySQL 插入一条数据并返回主键 id的实例
2020/03/02 Python
Python 改变数组类型为uint8的实现
2020/04/09 Python
css3一款3D字体带阴影效果的实现步骤
2013/03/20 HTML / CSS
斯巴达比赛商店:Spartan Race
2019/01/08 全球购物
巴西最大的巴士票务门户:Quero Passagem
2020/11/21 全球购物
公司开业庆典主持词
2014/03/21 职场文书
函授生自我鉴定
2014/03/25 职场文书
运动会开幕式主持词
2014/03/28 职场文书
尊师重教演讲稿
2014/09/04 职场文书
工作证明英文模板
2014/10/21 职场文书
避暑山庄导游词
2015/02/04 职场文书
2015年先进个人自荐书
2015/03/24 职场文书