#阿里云 短信验证nodejs express接入阿里云短信服务实现短信发送功能

本文介绍了如何在阿里云平台上设置短信服务,获取access_key和secret_key,然后在Express项目中创建API发送验证码。
摘要由CSDN通过智能技术生成

第一步先要到阿里云平台去申请短信签名和模版 阿里云短信地址

        1.首选需要有阿里云账号,进入阿里云【短信服务控制台】,可以在搜索栏搜索短信服务

        2.进入短信服务控制台后,点击 国内消息 >> 模版签名 >> 添加签名,按照提示去添加即可,蒹添加后就等待审核通过

       3.添加短信模版, 点击 模版管理 >> 添加模版,根据提示添加,这次测试就用系统送的模版。

4.注意:因为后续开发要用到的是数据是【签名名称】【模版CODE】【accessKeyId】【secretAccessKey】,所以要做好准备。 accessKeyId 和 secretAccessKey 在右上角用户头像点击可以看到【AccessKey管理】,点击进去里面可以获取,注意,这id和key比较重要,千万不要暴露出去。

短信模版的信息都准备好了之后,
-------------------------------------------------------------------------------------------------------------------
下面就可以开发程序了
  1. 首先需要确定是否安装express,如果已安装可以忽略这一步

    cnpm install -g express-generator 
    

  2. 然后用express创建一个项目

    express sms_projects
    

  3. 进入sms_projects目录

    cd sms_projects
    

  4. 初始化项目

    cnpm install
    

  5. 安装阿里云短信服务模块

    cnpm i @alicloud/sms-sdk --save
    

  6. 在app.js里修改代码,将短信接口模块单独出来

  7. 在routes文件夹下添加api.js文件

    var express = require('express');
    var router = express.Router();
    
    //引入阿里云短信服务模块
    const SMSClient = require('@alicloud/sms-sdk');
    
    // 产生6位随机数(用来生成短信验证码的)
    function getCode() {
    	let str = "";
    	for (let i = 0; i < 6; i++) {
    		str += parseInt(Math.random() * 10)
    	}
    	return str;
    }
    
    / ** 
     *这里写post请求接口,前端调用 http://localhost:3000/api/get_sms
     *默认端口是3000,也可以在./bin/www里面修改
     */
    router.post('/get_sms', function(req, res, next) {
    	let phoneNum = req.body.phone;  //获取前端参数phone
    	console.log("手机号码", phoneNum);
    	
    	//初始化sms_client
    	let smsClient = new SMSClient({
    		accessKeyId: 'LTAI4G**************',  //accessKeyId 前面提到要准备的
    		secretAccessKey: 'C2w************'  //secretAccessKey 前面提到要准备的
    	});
    	
    	6位随机数
    	let str = getCode();
    
    	// 开始发送短信
    	smsClient.sendSMS({
    		PhoneNumbers: phoneNum,
    		SignName: "sign****", //签名名称 前面提到要准备的
    		TemplateCode: "SMS_**********", //模版CODE  前面提到要准备的
    		TemplateParam: `{"code":'${str}'}`, // 短信模板变量对应的实际值,JSON格式
    	}).then(result => {
    		console.log("result", result)
    		let {Code} = result;
    		if (Code == 'OK') {
    			res.json({
    				code: 0, 
    				msg: 'success',
    				sms: str
    			})
    			console.log(result)
    		}
    	}).catch(err => {
    		console.log(err);
    		res.json({
    			code: 1, 
    			msg: 'fail: ' + err.data.Message
    		})
    	})
    
    });
    
    module.exports = router;
    
    

  8. 这里写完之后,保存,在终端执行命令npm start之后,既可以运行了。这里只是简单实现了接入阿里云短信服务的短信功能,并没有做其他验证。可以把生成的6位随机数也传给注册接口进行验证自由发挥!!!!

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,可以方便地使用 JavaScript 编写后端服务器程序。华为云提供了一套短信服务 API,可以方便地实现短信验证功能。 要使用 Node.js 实现华为云短信验证,你可以先在华为云官网上注册账号并开通短信服务。然后,你可以在 Node.js 中使用 HTTP 模块发送 HTTP 请求到华为云的短信服务接口,以实现发送短信验证码的功能。以下是一个简单的 Node.js 示例代码: ``` const https = require('https'); const qs = require('querystring'); const accessKey = 'your_access_key'; // 替换为你的 Access Key const secretKey = 'your_secret_key'; // 替换为你的 Secret Key const region = 'cn-north-4'; // 替换为你的短信服务所在的区域 const sender = 'your_sender'; // 替换为你的短信发送者名称 const templateId = 'your_template_id'; // 替换为你的短信模板 ID const phoneNumber = 'your_phone_number'; // 替换为你要发送验证码的手机号码 // 生成签名字符串 function generateSignature(accessKey, secretKey, region, timestamp) { const hmac = require('crypto').createHmac('sha256', secretKey); hmac.update(`AccessKey=${accessKey}&Action=SendSms&Region=${region}&SecretKey=${secretKey}&SignatureMethod=HmacSHA256&SignatureNonce=${Math.random()}&SignatureVersion=2&TemplateID=${templateId}&Timestamp=${timestamp}&Version=2017-05-25`); return encodeURIComponent(hmac.digest('base64')); } // 发送短信验证码 function sendSmsCode(code) { const timestamp = new Date().toISOString().replace(/\..+/, '') + 'Z'; const signature = generateSignature(accessKey, secretKey, region, timestamp); const data = { Action: 'SendSms', Version: '2017-05-25', Region: region, PhoneNumber: phoneNumber, SignName: sender, TemplateParam: JSON.stringify({ code }), TemplateID: templateId, SignatureMethod: 'HmacSHA256', SignatureNonce: Math.random(), SignatureVersion: 2, AccessKeyId: accessKey, Timestamp: timestamp, Signature: signature }; const options = { method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, hostname: `sms.${region}.myhuaweicloud.com`, path: '/v1.0/sms/send' }; const req = https.request(options, res => { let chunks = ''; res.on('data', chunk => chunks += chunk); res.on('end', () => console.log(chunks)); }); req.on('error', err => console.error(err)); req.write(qs.stringify(data)); req.end(); } // 发送一个随机的6位数验证码 sendSmsCode(Math.floor(Math.random() * 900000 + 100000)); ``` 以上代码通过生成签名字符串、构造请求数据和发送 HTTP 请求三个步骤实现发送短信验证码的功能。你可以根据自己的需求和具体情况调整代码中的参数和逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值