node.js获取手机短信验证码的实现

924 阅读1分钟

1.注册容联云平台账号(免费)

1.点击注册进入官网进行注册

Snipaste_2022-07-13_21-10-33.png 2.注册成功后进入控制台首页(含赠送余额)

需要在node.js服务端板使用的四个关键信息:ACCOUNT SID、AUTH TOKE、REST URL(默认)、AppID Snipaste_2022-07-13_21-16-39.png 3.设置测试账号(设置短信模板需要收费,因为开发测试只需要使用测试号码即可)

Snipaste_2022-07-13_21-25-15.png

2.node.js服务端代码

容联云的文档中是没有node.js的demo的

1.首先下载并引入需要用到的包

1.npm i blueimp-md5 --save
2.npm i moment --save
3.npm i js-base64 --save
4.npm i request --save

2.在src目录下创建utils/getMessage.js写入代码

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));
exports.randomCode = randomCode;

/*
向指定号码发送指定验证码
 */
function sendCode(phone, code, callback) {
    var ACCOUNT_SID = '7868asdaw87sad8w78s87227sfdasd';
    var AUTH_TOKEN = 'asdaw32w3e2359dssdf9vds8s56';
    var Rest_URL = 'https://xxx.xxxxxxx.com:8000';
    var AppID = 'asdawsdasdawdawsdasddawdasda';
    //1. 准备请求url
    /*
     1.使用MD5加密(账户Id + 账户授权令牌 + 时间戳)。其中账户Id和账户授权令牌根据url的验证级别对应主账户。
     时间戳是当前系统时间,格式"yyyyMMddHHmmss"。时间戳有效时间为24小时,如:20140416142030
     2.SigParameter参数需要大写,如不能写成sig=abcdefg而应该写成sig=ABCDEFG
     */
    var sigParameter = '';
    var time = moment().format('YYYYMMDDHHmmss');
    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);

    //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) {
        callback(body.statusCode==='000000');
    });
}
exports.sendCode = sendCode;

使用时只需要将上述代码中的ACCOUNT_SID、AUTH_TOKEN、Rest_URL、AppID改成自己账号对应的数据。

3.使用实例

const express = require("express");
const {randomCode,sendCode}=require("./utils/getMessage");

const app=express();//实例

app.get("/login",(req,res)=>{
    let code=randomCode(6);//生成6位数字随机验证码
    sendCode("测试号码",code,function(success){
        if(success){
            res.send("短信验证码已发送");
        }else{
            res.send("短信验证码发送失败");
        }
    })
})

const server=app.listen(80,()=>{
   console.log('express server running at http://127.0.0.1')
})

修改上述代码中的随机验证码位数、测试号码,前端请求接口手机即会受到短信验证码

如有帮助,一键三连谢谢~~~