在大部分的webApp和app在登录或者注册的时候都使用短信验证码的功能,一般小型网站后端或者个人开发的app不可能重新开发自己的sms短信验证码服务,大多采用第三方集成的sdk,本文使用阿里云通信实现nodejs后端短信验证码的功能。

注册阿里云

首先需要注册阿里云的账户,一般使用淘宝账号即可,进入控制台短信服务,开通短信服务功能,前身为阿里大鱼,注册时采会送10元的代金券,一条短信4.5分,价格还算公道。

编辑短信签名

进入短信签名,填写短信签名(短信方括号里面的内容),提交审核,大概10分钟就审核通过了,很快。

编辑短信模板

进入短信模板,填写短信模板内容,其中变量名以${*}表示,例如”您的短信验证码为:${code}“,提交审核,大概也是10分钟就审核通过了,也很快。

创建阿里云平台秘钥

进入秘钥管理中心,创建秘钥,可以获取账号的Access Key的id和secret,方便我们nodejs后端使用。

nodejs测试

创建app.js,样子长这样:

const SMSClient = require('@alicloud/sms-sdk')

//根据实际申请的账号信息进行替换accessKeyId和secretAccessKey
const accessKeyId = 'LTAIoIA57UVyHeLn'
const secretAccessKey = 'fqoEMuQs0Fx9QUHJKKVxg9MzNBKftT'

//初始化sms_client
let smsClient = new SMSClient({accessKeyId, secretAccessKey})

//发送短信
smsClient.sendSMS({
    PhoneNumbers: 'phone-number',
    SignName: '×××',
    TemplateCode: 'SMS_00000000',
    TemplateParam: '{"code":"10086"}'
}).then(function (res) {
    let {Code}=res
    if (Code === 'OK') {
        //处理返回参数
        console.log(res)
    }
}, function (err) {
    console.log(err)
})

解释一下上面的代码,首先引入阿里云的sms服务的nodejs sdk,然后声明两个变量存储你的Access key和Access secret,实例化一个smsClient,把以上两变量通过对象传入,最后调用sendSMS方法,该方法接受两个参数,第一和是需要发送验证码短信的一些相关信息,全部以字符串传入,第二个参数是一个回调函数,这里采用promise对象的then方法,效果一致,成功打印response信息,失败打印error信息。
经过测试,运行以上appjs 控制台打印成功ok,手机收到之前填写的模板内容和签名短信,速度很快大概3秒吧。