阿里大于账号的申请和短信签名、短信模板的申请,在此不再赘述。
本文主要介绍的是在nodejs上的代码实现。
要点:
- 安装npm包
- SDK的引用
- 验证码生成后和前端的匹配
- 验证码格式
1.除了正常开发需要安装的npm包之外,关于阿里大于的只需要安装一个,原因是阿里大于和阿里云合并了
$ npm install --save @alicloud/sms-sdk
2.首先是sdk的引用,在阿里大于官网上找到nodejs版本的sdk包后直接下载,是一个压缩包,解压缩后,文件结构如下:
然后将其中的lib文件夹和index.js文件复制粘贴到自己项目的js文件夹中。
然后在main.js(或app.js)中添加如下代码:
//index.js就是sdk中的index.js
ApiClient = require('./www/js/index.js').ApiClient;
app.post('前端发送的请求',function(req,res){
var form = new formidable.IncomingForm();
form.parse(req , function(err , fields){
//获得要发送的电话号码
var phoneNumber = fields.phoneNumber;
//随机的4位数验证码,code是个全局变量,方便下方另一个请求中的验证
code = parseInt(Math.random()*9000+1000).toString();
//发送短信的语句,具体参数看官网api
const client = new ApiClient({
'appkey': '你的appkey',
'appsecret': '你的appsecret',
'REST_URL': 'http://gw.api.taobao.com/router/rest'
});
client.execute('alibaba.aliqin.fc.sms.num.send', {
'sms_type':'normal',
'sms_free_sign_name':'你的name',
'sms_param':'{\"code\":\"'+ code +'\",\"product\":\"你要填的内容\"}',
'rec_num':phoneNumber,
'sms_template_code':'你的模板'
}, function(error, response) {
if (!error) {
console.log(response);
}else{
console.log(error);
}
});
})
})
3.验证码和前端输入的验证
在前端输入收到的短信验证码后。点击登录或者注册或者….等按钮时,再次发送请求。传递输入的验证码等信息,和之前的code对比,代码如下
app.post("你的请求",function(req,res){
var form = new formidable.IncomingForm();
form.parse(req , function(err , fields){
//输入的短信验证码
var msgcode = fields.msgcode;
//进行验证判断
if(msgcode == code){
do something...
}else{
res.send("errormsg");
}
});
上述代码的结尾,如果验证码错误就会输出一条信息,没错就不输出信息,可以在前端接收,如果有信息输出,就弹出错误,否则do something…
前端验证部分代码:
$.post("你的请求",{
//参数是输入的短信验证码
"msgcode":$("#dxyzm").val()
},function(data){
//此处的data就是node端send的内容
if(data){
alert("短信验证码错误");
}else{
//没错的话
do something...
}
});
4.验证码格式问题
在发送短信验证码部分的代码有一个属性是:
'sms_param':'{\"code\":\"'+ code +'\",\"product\":\"你的内容\"}'
注意不要省略 \ 转义,写成:
'sms_param':'{"code":"'+ code +'","product":"你的内容"}'
写成这样的话。逻辑上不会有错误,判定依然可以正确执行,但是用户收到的验证码会有小数点。比如你生成的code是 2234 ,用户收到的就是 2234.0