淘寶API 相關的簽名算法 Node.js版本 (阿里大魚短信)

狗是人類的朋友,淘寶文檔真心不如他們
前幾天別人說阿里大魚 發短信很快
這幾天說充點錢試試 正好有個小項目
結果發現簽名工具沒有 Node.js的版本
淘寶的文檔 誰看誰知道 這裏不吐槽了 一點意思都沒有
馬老闆別每天數錢,我們不能特麼好好作作基礎設施建設
能不能造福廣大程序猿 能不能快樂的玩耍javascript

實在沒辦法 只能本身寫一個java

這裏使用Hmac方式實現簽名npm

/*
 Node.js的 crypto 庫實在搞不懂
 因此下面的兩行代碼方式的Hmac結果永遠都是不對的
 誰知道怎麼用 不妨留言給我
*/
var hmac = crypto.createHmac("md5", secret);
var result= hmac.update(message).digest('hex');

使用blueimp-md5 沒有的本身裝個
npm install blueimp-md5json

如下是庫數組

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;

下面 就簡單了 使用 算一下 就行了app

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

好了,代碼能用了,各位參考,感興趣按照你的實際狀況本身優化
我這裏就當弄個筆記了工具

相關文章
相關標籤/搜索