首先进入容联云注册账户信息
注册后可以在测试号码添加要测试的号码
然后进入nodejs封装手机号码的验证和请求的接口
这里要下载 blueimp-md5、moment、js-base64三个模块
创建一个js文件在内部封装一个指定随机数的验证码,注意:这里的验证码只能是四位数
接下来就是向手机号发送验证码:
封装一个函数,它有三个参数分别是手机号、验证码和发送成功后的回调
前四个参数是你在注册后的控制台首页它会对每个账号生成四个:
分别是主账户ID:ACCOUNT SID
账户授权令牌:AUTH TOKEN
请求地址:Rest URL
AppID:AppID
这四个参数要改成自己所对应的
然后准备请求url
1.使用MD5加密(账户Id + 账户授权令牌 + 时间戳)。其中账户Id和账户授权令牌根据url的验证级别对应主账户。
时间戳是当前系统时间,格式"yyyyMMddHHmmss"。时间戳有效时间为24小时,如:20140416142030
2.SigParameter参数需要大写,如不能写成sig=abcdefg而应该写成sig=ABCDEFG
接下来准备请求体将发送请求的body封装好
下一步准备请求头
1.使用Base64编码(账户Id + 冒号 + 时间戳)其中账户Id根据url的验证级别对应主账户
2.冒号为英文冒号
3.时间戳是当前系统时间,格式"yyyyMMddHHmmss",需与SigParameter中时间戳相同。
最后发送请求,接收返还回来的值,调用callback
只有当 body.statusCode==='000000'才是发送成功
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));
/*
向指定号码发送指定验证码
*/
function sendCode(phone, code, callback) {
var ACCOUNT_SID = '2c94811c88bf35030188bf40bdeb000d';
var AUTH_TOKEN = '9d719aa98ada48a393456411bd127074';
var Rest_URL = 'https://app.cloopen.com:8883';
var AppID = '2c94811c88bf35030188bf40bf5d0014';
//1. 准备请求url
/*
1.使用MD5加密(账户Id + 账户授权令牌 + 时间戳)。其中账户Id和账户授权令牌根据url的验证级别对应主账户。
时间戳是当前系统时间,格式"yyyyMMddHHmmss"。时间戳有效时间为24小时,如:20140416142030
2.SigParameter参数需要大写,如不能写成sig=abcdefg而应该写成sig=ABCDEFG
*/
var sigParameter = '';
var time = moment().format('20230616103750');
sigParameter = md5(ACCOUNT_SID+AUTH_TOKEN+time);
var url = Rest_URL+'/2013-12-26/Accounts/'+ACCOUNT_SID+'/SMS/TemplateSMS?sig='+sigParameter;
//2. 准备请求体
var body = {
to : phone,
appId : AppID,
templateId : '1',
"datas":[code,"1"]
}
// body = JSON.stringify(body);
console.log(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);
console.log(body);
callback(body.statusCode==='000000');
});
}
module.exports = {sendCode,randomCode}
接下来就是请求接口,这里我写的是post请求,将刚刚暴露的引入 randomCode是我们要随机生成的验证码 sendCode是我们要对手机号码发送请求
这里的mobile可以写成自己的手机号,我是接受了传到后端的手机号
如果发送不成功可以打印success.statusMsg来查看返还的数字,这个在平台的短信测试码可以找到所对应的错误提示
更加详细的请看下面的代码
const { randomCode, sendCode } = require('./sendCode/getMessage');
let code = randomCode(4);
sendCode(mobile, code, function (success) {
if (success) {
res.send({
code: 200,
msg: '发送成功请在一分钟内填写',
sendCode: code,
})
} else {
res.send({
code: 401,
msg: success.statusMsg,
})
}
})