??????712 2024-09-27 17:09 采纳率: 50%
浏览 3

(标签-短信验证|关键词-短信)

刚入行,请各位帮我看看,代码是在注册的时候利用手机验证码辅助注册的,利用阿里云的短信服务来进行,accessKeyId和 accessKeySecret已经正确填写,资质、模板、签名等也已经通过认证,且正确配置在对应的xx位置,但是在apifox中提示发送失败

(下图为node.js中app.js的大部分代码)

img

(下图为控制台错误提示)

img


(下图为apifox页面)

img

(下面ali.js的代码)


const express = require('express');
const router = express.Router(); // 创建一个 router 实例
const Core = require('@alicloud/pop-core'); // 引入阿里云 SDK


const client = new Core({ // 创建 Client 对象
  accessKeyId: 'xx', // 替换成自己的 AccessKey ID
  accessKeySecret: 'xxx', // 替换成自己的 AccessKey Secret
  endpoint: 'https://dysmsapi.aliyuncs.com',// API 访问入口,根据实际情况修改
  apiVersion: '2017-05-25' // API 版本号,根据实际情况修改
});

let yanzhengma = ''
// 生成随机验证码
function generateCode() {
  const code = Math.floor(Math.random() * (9999 - 1000 + 1)) + 1000;
  // yanzhengma = code.toString()
  return code.toString();
}

// 发送短信验证码
router.post('/url', (req, res) => {
  const phoneNumber = req.body.phone; // 获取手机号码
  const code = generateCode(); // 生成验证码
  yanzhengma = code; // 找回密码的校验,yanzhengma存储的是生成的验证码
  const params = {
    "RegionId": "cn-beijing",
    "PhoneNumbers": phoneNumber,
    "SignName": "xx",// 短信签名名称,需先在阿里云控制台中申请审核通过
    "TemplateCode": "xx",// 短信模板 CODE,需先在阿里云控制台中申请审核通过
    "TemplateParam": JSON.stringify({
      "code": code
    })
  };

  const requestOption = {
    method: 'POST',
    timeout: 6000
  };
  client.request('SendSms', params, requestOption).then((result) => {
    console.log(result);
    res.status(200).json({
      message: '验证码已发送,请注意查收!',
      code: code
    });
  }, (ex) => {
    console.log(ex);
    res.status(500).json({
      message: '短信发送失败,请稍后重试!'
    });
  });
});

// 验证验证码
router.post('/verify-code', (req, res) => {
  const phoneNumber = req.body.phoneNumber; // 获取手机号码
  const inputCode = req.body.code; // 获取用户输入的验证码

  console.log(inputCode);
  console.log(yanzhengma);
  if (inputCode === yanzhengma) { // 验证码一致,登录成功
    res.status(200).json({
      message: '登录成功!'
    });
  } else { // 验证码不一致,登录失败
    res.status(400).json({
      message: '验证码错误,请重新输入!'
    });
  }
});

// 导出 router 以便在主应用中使用
module.exports = router;

  • 写回答

1条回答 默认 最新

  • 一轮明月照丘壑 2024-09-27 17:13
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    从你提供的代码和错误信息来看,问题可能出在发送短信验证码的部分,特别是与阿里云短信服务交互的部分。错误提示 isv.MOBILE_NUMBER_ILLEGAL 通常意味着提供的手机号码格式不正确。以下是一些可能的问题和建议解决方案:

    1. 手机号码格式问题:请确保你从前端接收到的手机号码格式正确,并且已经进行了必要的格式化和验证。手机号码应当符合中国的手机号格式,例如:+86 13800138000。
    2. 参数设置问题:在调用 client.request('SendSms', params, requestOption) 时,确保 params 中的 PhoneNumbers 字段的值是正确的。检查是否正确地获取了 req.body.phone 的值,并将其赋给了 phoneNumber
    3. 阿里云控制台配置:确保你的阿里云账号已经正确配置了短信服务的访问权限,并且 SignNameTemplateCode 已经在阿里云控制台中申请并审核通过。
    4. 编码问题:由于你在生成验证码时使用了 code.toString(),确保手机号码也是字符串类型。如果 req.body.phone 不是字符串,你可能需要先将其转换为字符串。
    5. 错误处理:在发送短信的 API 请求中,确保正确处理了可能的错误情况。你可以添加更多的日志记录,以便更好地了解在发送短信时发生了什么。
    6. 检查响应数据:在发送短信后,检查阿里云的响应数据,看看是否有任何有关错误的详细信息。

    为了进一步调试和解决问题,你可以尝试以下步骤:

    • 在前端添加验证,确保提交的手机号码格式正确。
    • generateCode 函数之前,添加日志记录来检查 phoneNumber 的值。
    • 在发送短信之前,打印完整的 params 对象,以便检查其是否包含正确的手机号码。
    • 查看阿里云的文档和示例代码,确保你的实现与官方指南一致。

    如果问题仍然存在,你可能需要联系阿里云的技术支持或查阅相关的技术社区以获取更多帮助。

    评论

报告相同问题?

问题事件

  • 创建了问题 9月27日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?