开发中使用【容联 云通信】获取短信验证码的 Javascript 接口
- 注册账号:https://www.yuntongxun.com/,注册后送 8 元,开发试用可以用很久了。
- 在平台应用列表添加应用。
- 在测试号码中绑定测试手机号码,只有这个号码能接收验证短信。
- 在项目中绑定配置:将控制台首页的开发者主账号信息粘贴复制进下列接口代码的相应位置。
一个前后台分离的应用,在后台项目目录下建立 util
文件夹,建立 util/sms_util.js
文件,文件内写使用【容联 云通信】平台获取短信验证码的 Javascript 接口代码:
// 容联云通信 短信验证码接口
var md5 = require('blueimp-md5')
var moment = require('moment')
var Base64 = require('js-base64').Base64;
var request = require('request');
/*
生成指定长度的随机数
*/
function randomCode(length) {var chars = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
var result = ""; // 统一改名: alt + shift + R
for (var i = 0; i < length; i++) {var index = Math.ceil(Math.random() * 9);
result += chars[index];
}
return result;
}
// console.log(randomCode(6));
exports.randomCode = randomCode;
/*
向指定号码发送指定验证码
*/
// 将控制台首页的开发者主账号信息粘贴复制进下列接口代码的相应位置
function sendCode(phone, code, callback) {
var ACCOUNT_SID = '';
var AUTH_TOKEN = '';
var Rest_URL = '';
var AppID = '';
//1. 准备请求 url
/*
1. 使用 MD5 加密(账户 Id + 账户授权令牌 + 时间戳)。其中账户 Id 和账户授权令牌根据 url 的验证级别对应主账户。时间戳是当前系统时间,格式 "yyyyMMddHHmmss"。时间戳有效时间为 24 小时,如:20140416142030
2.SigParameter 参数需要大写,如不能写成 sig=abcdefg 而应该写成 sig=ABCDEFG
*/
var sigParameter = '';
var time = moment().format('YYYYMMDDHHmmss');
sigParameter = md5(ACCOUNT_SID + AUTH_TOKEN + time);
var url = Rest_URL + '/2019-6-16/Accounts/' + ACCOUNT_SID + '/SMS/TemplateSMS?sig=' + sigParameter;
//2. 准备请求体
var body = {
to: phone,
appId: AppID,
templateId: '1',
"datas": [code, "1"]
}
//body = JSON.stringify(body);
//3. 准备请求头
/*
1. 使用 Base64 编码(账户 Id + 冒号 + 时间戳)其中账户 Id 根据 url 的验证级别对应主账户
2. 冒号为英文冒号
3. 时间戳是当前系统时间,格式 "yyyyMMddHHmmss",需与 SigParameter 中时间戳相同。*/
var authorization = ACCOUNT_SID + ':' + time;
authorization = Base64.encode(authorization);
var headers = {
'Accept': 'application/json',
'Content-Type': 'application/json;charset=utf-8',
'Content-Length': JSON.stringify(body).length + '','Authorization': authorization
}
//4. 发送请求, 并得到返回的结果, 调用 callback
// callback(true);
request({
method: 'POST',
url: url,
headers: headers,
body: body,
json: true
}, function (error, response, body) {console.log(error, response, body);
callback(body.statusCode === '000000');
// callback(true);
});
}
exports.sendCode = sendCode;
/*
sendCode('13716962779', randomCode(6), function (success) {console.log(success);
})*/
5. 在后台路由文件 /routes/index.js
中引入,使用:
const sms_util = require('../util/sms_util')
/*
发送验证码短信
*/
router.get('/sendcode', function (req, res, next) {
//1. 获取请求参数数据
var phone = req.query.phone;
//2. 处理数据
// 生成验证码(6 位随机数)
var code = sms_util.randomCode(6);
// 发送给指定的手机号
console.log(` 向 ${phone}发送验证码短信: ${code}`);
sms_util.sendCode(phone, code, function (success) {//success 表示是否成功
if (success) {users[phone] = code
console.log('保存验证码:', phone, code)
res.send({"code": 0})
} else {
//3. 返回响应数据
res.send({"code": 1, msg: '短信验证码发送失败'})
}
})
})
6. 在前台应用中输入绑定的测试手机号,发送验证码。