nodejs发送短信接口

该代码示例展示了如何使用腾讯云短信服务SDK发送手机验证码。首先定义了SDK所需的应用ID、AppKey、模板ID和签名,然后通过异步函数QsendSMS发送验证码到指定手机号。在接口文件中,检查手机号格式、发送次数限制和验证码有效期,最后将验证码信息存入数据库。
摘要由CSDN通过智能技术生成

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='验证成功';
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值