嗯,明明有阿里短信,非要搞这个。
官网提供参考demo,只有java、php、net、 Python、C#、 没有node,
api能有node demo 比较少,很想回归java,
接口使用的参数:
1.主账号的id:account sid
2.主账号的秘钥:auth token
3.应用的id: appid
4.短信模板的id(这个地,新建模板后才能看到。测试使用:1)
5 .就是参数的组合加密 md5(大写)、 base64(小写)
6. 需要注意的是:消息头的设置,有个 Authorization,
7. ## 第一次使用,需要联系客服进行初审,官方备案
形式为:【云通讯】您使用的是云通讯短信模板,您的验证码是{1},请于{2}分钟内正确输入。
其中{1}和{2}为短信模板的参数。
下面是账号内的部分 参数位置
代码
const util = require("../../../utils/MD5.js")
function sendSMS(req, res) {
var accountSid = "8aaf07086904be0b01********8c1d0b";//主账户 account sid
var AUTH_TOKEN = "e*****33cd404b40a*****808b268946";//主账户秘钥 auth_token
var sm = new Date()
var yy = sm.getFullYear();
var mm = sm.getMonth() + 1;
var dd = sm.getDate();
var hh = sm.getHours();
var ff = sm.getSeconds();
var ss = sm.getMinutes();
var timestmp = "" + yy +
(mm < 10 ? "0" + mm : mm) +
(dd < 10 ? "0" + dd : dd) +
(hh < 10 ? "0" + hh : hh) +
(ff < 10 ? "0" + ff : ff) +
(ss < 10 ? "0" + ss : ss);
var Authorization = util.base64_enc(accountSid + ":" + timestmp);
util.md5_enc({
"Str": accountSid + AUTH_TOKEN + timestmp,
"Type": "DX"
}, function(data) {
console.log(timestmp, data,Authorization)
var url = "https://app.cloopen.com:8883/2013-12-26/Accounts/" + accountSid + "/SMS/TemplateSMS?sig=" + data;
requests({
method: "POST",
url: url,
headers: {
// "content-Length": "Content-Length",
"Accept": "application/json",
"Content-Type": "application/json;charset = utf-8",
"Authorization": Authorization
},
body: {
to: "15922294369", // String 必选 短信接收端手机号码集合,用英文逗号分开,数量不得超过200个
appId: "8a216da869d**********b39092e14bf", //String: 必选 应用Id
templateId: "1", // String 必选 模板Id
datas: ["替换内容", "替换内容"], // String 可选 内容数据外层节点,模板如果没有变量,此参数可不传
},
json: true
}, function(error, response, body) {
if(!error && response.statusCode == 200) {
res.send(body)
}
})
})
}
module.exports = {
sendSMS:sendSMS
}
md5.js
const express = require('express');
const app = express();
var crypto = require('crypto');
function md5_enc(MD5,callback) {
var md5 = crypto.createHash("md5");
md5.update(MD5.Str);
var str = md5.digest('hex');
var back = "";
if(MD5.Type == "DX") {
back = str.toUpperCase(); //32位大写
}
if(MD5.Type == "XX") {
back = str
}
return callback(back)
}
function base64_enc(str) {
return new Buffer(str).toString('base64');
}
module.exports = {
md5_enc: md5_enc,
base64_enc: base64_enc,
}