nodejs中JavaScript代码里使用阿里云发送短信验证码SendSmsVerifyCode

本文详细介绍了如何在Node.js环境中使用阿里云的短信服务发送验证码,包括环境准备、使用SDK、在线调用示例、JavaScript代码实现以及安全注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

在JavaScript代码中利用阿里云的短信服务发送短信验证码
环境:Nodejs 阿里云Linux服务器
代码:JavaScript

一、环境准备

使用阿里云的短信服务,需要准备阿里云账号、开通云服务器、购买短信服务、创建RAM用户、RAM角色等。前期准备可以参考
【账号系统之(手机验证码登录)】使用阿里云短信服务,实现服务商给手机发送验证码功能

二、使用步骤

1.发送验证码的SDK

首先看阿里云网站上的验证码SDK,里面有详细的参数文档,在线调用SDK,自动生成SDK示例等,内容还是很详细的,在使用SDK前很有必要好好读一下。
发送短信验证码SDK

1.1在线调用

我们首先在线调用这个发送短信的接口,如果能够成功接收到短信,说明我们购买的短信相关的服务已经可用,签名模板也已经通过审核,那么可以进行下一步了。
在这里插入图片描述

1.2生成代码示例

之前进行线上调用后,也会根据参数生成代码示例。选择SDK示例,提供的SDK示例中有多种语言可以选择,但是是没有js代码的,我们要在js代码中使用的话,这里选择相近的TypeScript的示例。
我们选择下载完整工程,下载代码。
在这里插入图片描述

nodejs中不能直接使用TypeScript代码,需要先将TypeScript文件进行编译,得到编译后的js代码后再执行的。

1.3导入到工程

首先在服务器上安装SDK

npm install @alicloud/dypnsapi20170525@1.2.1

下载的示例代码解压后有如下的文件,我们将其放到工程代码中,可以放在根目录下。
在这里插入图片描述

nodejs中是需要先将ts文件进行编译,得到编译后的js代码后再执行的。

按照README.md文件中的内容进行编译,执行。如果能够收到短信,则说明编译出的js代码可以正常使用。

npm install --registry=https://registry.npm.taobao.org && tsc && node ./dist/client.js

1.4 JavaScript代码调用

在前面编译出了client.js,并且可以正常运行并发出短信,那么我们可以参考client.js中的代码来编写JavaScript中的逻辑。

const Util = require('@alicloud/tea-util');
const client = require('../dist/client');
const Dypnsapi20170525 = require('@alicloud/dypnsapi20170525');
......

router.post('/sendCode', async (req, res) => {
  console.log('Request Body:', req.body); 
  const { phoneNumber } = req.body;
  console.log('phoneNumber is:', phoneNumber); 

  try {
    // 使用 createClient 方法创建客户端
    const aliyunClient = client.default.createClient(
      process.env['ALIBABA_CLOUD_ACCESS_KEY_ID'],
      process.env['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
    );

    let sendSmsVerifyCodeRequest = new Dypnsapi20170525.SendSmsVerifyCodeRequest({
            phoneNumber: phoneNumber,
            codeLength: 6,
            signName: "XXXXXX",
            templateCode: "SMS_464175242",
            templateParam: "{\"code\":\"##code##\"}",
        });
    // 这里调用发送验证码的方法
    let runtime = new Util.RuntimeOptions({});
    const resp = await aliyunClient.sendSmsVerifyCodeWithOptions(sendSmsVerifyCodeRequest, runtime);

    // 处理 resp
    console.log(resp);

    res.send('Code sent successfully! Check your phone.');
  } catch (error) {
    console.error('Error sending SMS:', error);
    res.status(500).send('Failed to send SMS.');
  }

});

这里使用了环境变量中的 ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
设置环境变量的方式可以参考
在环境变量中配置身份验证AccessKey

另外SDK示例的注释中提到
工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。代码示例使用环境变量获取 AccessKey 的方式进行调用,仅供参考,建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378664.html

这里我们不搞那么复杂,先run起来,所以就直接从环境变量中获得AccessKey ID和AccessKey SECRET,后面有精力再替换STS。

### 集成阿里云短信验证码服务 #### 安装依赖库 为了在Node.js项目中集成阿里云短信验证码服务,需安装`@alicloud/sms-sdk`包。通过npm来完成此操作。 ```bash npm install @alicloud/sms-sdk --save ``` #### 初始化SDK客户端 创建一个新的JavaScript文件用于初始化阿里云SMS SDK客户端实例,在其中设置访问密钥ID和访问密钥Secret作为参数传递给构造函数[^2]。 ```javascript const SmsClient = require('@alicloud/sms-sdk'); // 创建短信服务对象 function createSmsClient(accessKeyId, secretAccessKey) { const client = new SmsClient({ accessKeyId, secretAccessKey }); return client; } ``` #### 发送验证码逻辑实现 定义发送验证码的方法,指定接收手机号码、签名名称以及模板CODE等必要参数,并调用sendVerifyCode接口发起请求[^3]。 ```javascript async function sendVerificationCode(phoneNumber, signName, templateCode) { try { let result = await smsClient.sendVerifyCode({ PhoneNumber: phoneNumber, SignName: signName, TemplateCode: templateCode }); console.log('Send Success:', JSON.stringify(result)); return { success: true }; } catch(error) { console.error('Error occurred while sending verification code.', error); throw new Error(`Failed to send verification code due to ${error.message}`); } } ``` #### 启动服务器并监听端口 编写简单的Express应用以提供HTTP API供前端调用来触发验证码发送动作[^1]。 ```javascript const express = require('express'); const bodyParser = require('body-parser'); let app = express(); app.use(bodyParser.json()); app.post('/send-code', async(req, res)=>{ const { phone_number, sign_name, template_code } = req.body; try{ await sendVerificationCode(phone_number, sign_name, template_code); res.status(200).json({ message:"Verification Code Sent Successfully"}); }catch(err){ res.status(500).json({ error : err.toString()}); } }); app.listen(process.env.PORT || 8080, ()=>{ console.log('Server started on port '+(process.env.PORT||'8080')); }); ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值