新闻中心
华兴动态
媒体报道
行业常识
业内资讯
短信返回码
技术方案
码号查询
您的位置:首页>新闻中心>技术方案

NodeJs实现手机短信验证码全过程

时间: 2019-06-13 来源: 华兴软通 本文链接:https://www.smshx.com/news_jishufangan5.html

在我们的工作生活中,使用各类网站、APP时,无论注册、支付,还是修改密码等情境下,都被要求获取短信验证码进行验证,那么验证码是如何发送的呢?接下来小编以华兴云短信为例,为大家详细介绍一下nodejs发送短信验证码的实现过程(同时实现防刷短信验证码机制,加密通信)。

一、实现思路

二、实现流程

1、注册账号

注册华兴云短信账号,填写基本信息,会有专人联系开户,并预送少量短信供测试使用。

2、下载接口

点击“产品中心”,进入产品页,选择对应的nodejs安全云短信接口及HTTPS版云短信接口文档下载;下载完毕文档如下:

3、配置参数变量

配置demoHttps.js文件:

(1)将demoHttps.js文件拷贝到项目中相应的位置,调用该类下的sendSms方法进行短信发送,及短信余额的查询getBalance方法。

(2)将sendSms方法中的注册码(reg),密码(pwd),签名(signature),短信内容(content)修改成自己的信息。注意:短信内容可能需要报备。

(3)将目标手机号和内容根据代码里面的注释规则修改,在需要发送短信的地方调用sendSms这个方法就可以了。

4、报备短信模板

将待发内容提交至华兴客服工作人员,由工作人员进行黑名单、敏感词等检查,完成报备工作。

5、调用接口测试短信

完成前期的一系列准备工作,实际测试调用nodejs云短信接口的短信发送情况。

三、运行代码

查看HTTPS版云短信接口文档查看接口地址,参数说明及示例,调用下图代码配置好参数后,调用该方法测试发送短信,打印返回值,可查看文档中错误码

发送短信代码示例

前端页面index.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>nodejs发送短信验证码</title>
</head>
<body>
<form action="/regist">
<h1>发送短信验证码</h1>
<label for="">手机号:</label>
<input name="phone" type="text" placeholder="请输入手机号">
<br>
<label for="">图片验证码:</label>
<input name="imgcode" type="text" placeholder="请输入验证码">
  <img src="/captcha" alt="" ref="imgYzm" >
<br>
<input type="submit" value="提交">
</form>
</body>
</html>

后端验证及发送短信验证码页面 index.js

var express = require('express')
// post请求方式会将参数放入到请求体当中
// 所以需要引入解析请求体的模块 body-parser
var bodParser = require('body-parser')
var  captcha = require('svg-captcha')
var web = express()
var session = require('express-session');
var   router=express.Router();
web.use(express.static('public'))
// 使用 session 中间件
web.use(session({
    secret :  'secret', // 对session id 相关的cookie 进行签名
    resave : true,
    saveUninitialized: false, // 是否保存未初始化的会话
    cookie : {
        maxAge : 1000 * 60 * 3, // 设置 session 的有效时间,单位毫秒
    },
}));
web.use(bodParser.urlencoded({extended:false}))
web.get('/captcha',function(req,res){
  var  cap = captcha.create();
  req.session.captcha = cap.text; // session 存储
  res.type('svg'); // 响应的类型
  res.send(cap.data);
});
 
// 验证
var phone = ''
var imgcode = ''
web.get('/regist',function(req ,res){
var phone = req.query.phone
var imgcode = req.query.imgcode ;
if(imgcode == req.session.captcha)
{
    var objUrl = {
        hostname: 'www.stongnet.com',        //主机名
        path: '/sdkhttp/sendsms.aspx',    //api路径
        caPath: 'F:/cert/cacert.pem',        //用来验证服务器的证书
    }
    signature = '【华兴】';
    var objParam = {
        reg: '101100-WEB-HUAX-111111',        // 华兴软通注册码,请在这里填写您从客服那得到的注册码
        pwd: '12345678',        // 华兴软通注册码对应的密码,请在这里填写您从客服那得到的密码
        sourceadd: null,        //子通道号(最长10位,可为空
        phone: phone,    //手机号码(最多1000个),多个用英文逗号(,)隔开,不可为空
        content: '华兴软通$-_.+!*"(αβ &@#%)验证码:' + (parseInt(Math.random() * 9000) + 1000) + signature,   
    }
    var http = require('https');                //载入https模块
    var qs = require('querystring');        //载入Query String模块
    var fs = require('fs');         //载入fs模块读取文件
   
    var content = qs.stringify(objParam);    //url编码参数
    console.log('HTTPS的GET请求方式:' + objUrl.hostname + objUrl.path + '?' + content);
   
    var options = { 
        hostname: objUrl.hostname, 
        port: 443, 
        path: objUrl.path + '?' + content, 
        method: 'GET',
        secureProtocol:'TLSv1_method',        //协议版本TLS1.0
 
    }; 
    
    var reqCallBack = function (res) { 
        console.log('STATUS: ' + res.statusCode); 
        console.log('HEADERS: ' + JSON.stringify(res.headers)); 
        res.setEncoding('utf8'); 
        res.on('data', function (chunk) {        //有数据时读数据
            console.log('GET返回结果: ' + chunk);
        });
    };
    var req = http.request(options, reqCallBack); 
    req.on('error', function (e) { 
        console.log('problem with request: ' + e.message); 
    }); 
    req.end();
}
else {
res.send('验证码不正确')
}
})
web.listen('8080',function(){
console.log('服务器启动......')
})

按照示例可使用客服提供的注册号密码进行手机号短信验证码的发送测试,根据接口返回码和文档按自己的要求做进一步的功能开发。

短信平台软件 短信群发平台 短信平台公司 群发短信公司 短信平台 短信平台软件 短信群发平台