狗是人类的朋友,淘宝文档真心不如他们
前几天别人说阿里大鱼 发短信很快
这几天说充点钱试试 正好有个小项目
结果发现签名工具没有 Node.js的版本
淘宝的文档 谁看谁知道 这里不吐槽了 一点意思都没有
马老板别天天数钱,咱们不能特么好好做做基础设施建设
能不能造福广大程序猿 能不能快乐的玩耍
实在没办法 只能自己写一个
这里使用Hmac方式实现签名
/*
Node.js的 crypto 库实在搞不懂
所以下面的两行代码方式的Hmac结果永远都是不对的
谁知道怎么用 不妨留言给我
*/
var hmac = crypto.createHmac("md5", secret);
var result= hmac.update(message).digest('hex');
使用blueimp-md5 没有的自己装个npm install blueimp-md5
以下是库
var md5 = require("blueimp-md5").md5;
// 掏包网的App信息
var config = {
AppKey: '123456',
AppSecret: '123456'
};
var tbSign = 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]);
}
// 排序
arr.sort();
// 参数喘
var msg = arr.join('');
console.log(msg);
// Hmac 签名
var sign = md5(msg, config.AppSecret);
// 返回
return {
timestamp:timestamp,
sign:sign.toUpperCase()
}
}
module.exports.tbSign = tbSign;
下面 就简单了 使用 算一下 就好了
var helperTb = require('./helper_tbsign');
// 短信发送的参数对象
var obj = {
format : 'json',
method : 'alibaba.aliqin.fc.sms.num.send',
partner_id : 'top-sdk-java-20151020',
rec_num : '13901234567',
sign_method : 'hmac',
sms_type : 'normal',
sms_param : '{"code":"1234", "product":"Demo"}',
sms_free_sign_name : '注册验证',
sms_template_code : 'SMS_123456',
v : '2.0',
timestamp : '2015-10-20 20:41:05'
}
var sign = helperTb.tbSign(obj);
// 结果 4F045A8A04A1B0B5A7F196A91C6EF6D1
好了,代码能用了,各位参考,感兴趣按照你的实际情况自己优化
我这里就当弄个笔记了