1. 程式人生 > >阿里雲簡訊服務 nodejs版本SDK,非阿里大魚

阿里雲簡訊服務 nodejs版本SDK,非阿里大魚

最近發現新註冊的阿里大魚全部轉移到阿里雲的簡訊伺服器,目前還沒有提供nodejs 的sdk,所以我自己寫了一個,有什麼問題大家可以指正。

有小夥伴反饋簡訊模組啟動後只能傳送一次,第二次就儲存,後來查看了一下,是SignatureNonce和Timestamp每次傳送都要更新,所以稍微修改一下。


/**
 * 阿里雲簡訊傳送介面 nodejs 版本
 * 阿里雲簡訊API官方文件: https://help.aliyun.com/document_detail/44364.html?spm=5176.8195934.507901.11.pLzahV
 */

const  http = require
('http'); const querystring=require("querystring"); const crypto = require('crypto'); var AliyunSMS = { //配置 config:{ AccessKeyId: '***', //阿里簡訊服務所用的金鑰 AccessKeySecret: "***", //阿里簡訊服務所用的金鑰值 Format: 'JSON', SignatureMethod: 'HMAC-SHA1', SignatureVersion: '1.0'
, Action: 'SendSms', Version: '2017-05-25', RegionId: 'cn-hangzhou' }, //傳送POST請求 POST: function (Data,callback){ const postData = querystring.stringify(Data); const options = {host: 'dysmsapi.aliyuncs.com', port: 80, path: '', method: 'POST', headers: {'Content-Type'
: 'application/x-www-form-urlencoded', 'Content-Length': Buffer.byteLength(postData)}}; const req = http.request(options, function(res){ res.setEncoding('utf8'); res.on('data', function(chunk){callback(chunk);}); res.on('end', function() {console.log('end');}); }); req.on('error', function(e){callback({'error':e.message});}); req.write(postData); req.end(); }, //簽名演算法 sign: function (param) { var json={},p=Object.keys(param).sort(); for(var i=0;i<p.length;i++){json[p[i]]=param[p[i]];} return crypto.createHmac('sha1', param.AccessKeySecret + '&').update(new Buffer('POST&' + encodeURIComponent('/') + '&' + encodeURIComponent(querystring.stringify(json, '&', '=')), 'utf-8')).digest('base64'); }, //傳送簡訊 send: function (data,callback) { data.SignatureNonce= Math.random().toString(); data.Timestamp=new Date().toISOString(); var param = Object.assign(data, this.config); param.Signature = this.sign(param); this.POST(param, function (data) { callback(data); }); } }; module.exports = AliyunSMS; AliyunSMS.config.AccessKeyId= '***'; //阿里簡訊服務所用的金鑰 AliyunSMS.config.AccessKeySecret= "****"; //阿里簡訊服務所用的金鑰值 AliyunSMS.send({ PhoneNumbers: '13411118888', //接收簡訊的手機,逗號隔開,最多20個號碼 SignName: '阿里雲簡訊', //簡訊簽名 TemplateCode: 'SMS_11118888', //簡訊模板 TemplateParam: JSON.stringify({ 'code':'1111' }) //簡訊模板中引數指定 }, function (data) { console.log('返回data:'+data); //傳送成功返回 {"Message":"OK","RequestId":"8AB21B6B-A92B-4110-A112-4F10A41511A5","BizId":"10876611111^1111773511111","Code":"OK"} // 失敗沒有OK,有具體錯誤提示,以此判斷是否傳送成功 });