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

本文将实现阿里云中短信服务的【短信验证码功能】


第一步先要到阿里云平台去申请短信签名和模版(如果已完成可以忽略这一步)
  1. 首选需要有阿里云账号,进入阿里云【短信服务控制台】,可以在搜索栏搜索短信服务
    在这里插入图片描述

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

  3. 添加短信模版, 点击 模版管理 >> 添加模版,根据提示添加,这次测试就用系统送的模版。
    在这里插入图片描述

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


短信模版的信息都准备好了之后,下面就可以开发程序了
  1. 首先需要确定是否安装express,如果已安装可以忽略这一步
cnpm install -g express-generator 
  1. 然后用express创建一个项目
express sms_projects
  1. 进入sms_projects目录
cd sms_projects
  1. 初始化项目
cnpm install
  1. 安装阿里云短信服务模块
cnpm i @alicloud/sms-sdk --save
  1. 在app.js里修改代码,将短信接口模块单独出来
    在这里插入图片描述

  2. 在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;

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

学无止境,加油骚年
  • 1
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
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 请求三个步骤实现发送短信验证码的功能。你可以根据自己的需求和具体情况调整代码中的参数和逻辑。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值