react+nodejs手机号码发送验证码

首先进入容联云注册账户信息

注册后可以在测试号码添加要测试的号码

 然后进入nodejs封装手机号码的验证和请求的接口

这里要下载 blueimp-md5、moment、js-base64三个模块

创建一个js文件在内部封装一个指定随机数的验证码,注意:这里的验证码只能是四位数

接下来就是向手机号发送验证码:

        封装一个函数,它有三个参数分别是手机号、验证码和发送成功后的回调

        前四个参数是你在注册后的控制台首页它会对每个账号生成四个:

                分别是主账户ID:ACCOUNT SID

                账户授权令牌:AUTH TOKEN

                请求地址:Rest URL

                 AppID:AppID

        这四个参数要改成自己所对应的

然后准备请求url

     1.使用MD5加密(账户Id + 账户授权令牌 + 时间戳)。其中账户Id和账户授权令牌根据url的验证级别对应主账户。

     时间戳是当前系统时间,格式"yyyyMMddHHmmss"。时间戳有效时间为24小时,如:20140416142030

     2.SigParameter参数需要大写,如不能写成sig=abcdefg而应该写成sig=ABCDEFG

接下来准备请求体将发送请求的body封装好

下一步准备请求头

     1.使用Base64编码(账户Id + 冒号 + 时间戳)其中账户Id根据url的验证级别对应主账户

     2.冒号为英文冒号

     3.时间戳是当前系统时间,格式"yyyyMMddHHmmss",需与SigParameter中时间戳相同。

最后发送请求,接收返还回来的值,调用callback

只有当 body.statusCode==='000000'才是发送成功

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));


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

接下来就是请求接口,这里我写的是post请求,将刚刚暴露的引入 randomCode是我们要随机生成的验证码 sendCode是我们要对手机号码发送请求

这里的mobile可以写成自己的手机号,我是接受了传到后端的手机号

如果发送不成功可以打印success.statusMsg来查看返还的数字,这个在平台的短信测试码可以找到所对应的错误提示

更加详细的请看下面的代码

const { randomCode, sendCode } = require('./sendCode/getMessage'); 
 let code = randomCode(4);
        sendCode(mobile, code, function (success) {
            if (success) {
                res.send({
                    code: 200,
                    msg: '发送成功请在一分钟内填写',
                    sendCode: code,
                })
            } else {
                res.send({
                    code: 401,
                    msg: success.statusMsg,
                })
            }
        })

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值