sms.js
var QcloudSms = require("qcloudsms_js");
// 短信应用 SDK AppID
var appid = 14000000; // SDK AppID 以1400开头
// 短信应用 SDK AppKey
var appkey = "key";
// 需要发送短信的手机号码
// 短信模板 ID,需要在短信控制台中申请
var templateId = 7839; // NOTE: 这里的模板ID`7839`只是示例,真实的模板 ID 需要在短信控制台中申请
// 签名
var smsSign = "签名"; // NOTE: 签名参数使用的是`签名内容`,而不是`签名ID`。这里的签名"腾讯云"只是示例,真实的签名需要在短信控制台申请
// 实例化 QcloudSms
var qcloudsms = QcloudSms(appid, appkey);
// 设置请求回调处理, 这里只是演示,用户需要自定义相应处理回调
var ssender = qcloudsms.SmsSingleSender();
async function QsendSMS(phoneNumber,vcode){
var params = [vcode];
return new Promise((resolve,reject)=>{
ssender.sendWithParam("86", phoneNumber, templateId,params, smsSign, "", "", function(err, res, resData){
if (err) {
console.log("err: ", err);
reject(err)
} else {
console.log("request data: ", res.req);
console.log("response data: ", resData);
resolve(resData)
}
});
});
}
exports.QsendSMS = QsendSMS;
接口文件 xx.js
const {
QsendSMS
} = require('./sms.js');
var sendSMSCode = async (ctx, next) => {
var code = Math.floor(Math.random() * 9000 + 1000);
var addtime = ctx.state.$time;
var ip = ctx.state.$ip;
var {
mobile
} = ctx.request.body
if(!(isMobile(mobile))){
throw '请输入正确的手机号'
}
// 手机号 调用次数限制 24小时内限制三次
//
var sendCount = await mysql('sql').count('id as send')
.first()
.where({
mobile: mobile
})
.andWhere('addtime', '>', ctx.state.$time - 86400)
if (sendCount['send'] > 3) {
throw '24小时内发送数量已超限制,请稍后再来';
}
var qres = await QsendSMS(mobile, code, isNew);
qres = JSON.stringify(qres)
await mysql('sql').insert({
mobile,
code,
addtime,
ip,
qres,
channel: 'zt'
});
ctx.state.$message='发送成功';
}
验证接口文件 xx.js
var addtime = ctx.state.$time;
var {
phone,
code
} = ctx.request.body;
var row = await mysql('jw_collect_code')
.first('code', 'addtime', 'id', 'error_times')
.where({
mobile: phone,
used: 0,
})
.orderBy('id', 'desc')
if (!row) {
throw '未发送验证码'
}
if (ctx.state.$time - row['addtime'] > 600) {
throw '验证码已失效'
}
if (row['error_times'] > 2) {
throw '失败次数过多,验证码已失效';
}
if (row['code'] != code) {
//add lenir 增加失败次数验证 防止循环快速请求达到登录目的 180703
await mysql('sql')
.increment('error_times', 1)
.where({
id: row['id']
})
.catch((err) => {
// console.log(err)
});
throw '验证码不正确'
}
sms_row_id = row['id'];
ctx.state.$message='验证成功';