uni-app 获取短信验证码问题 templateId已填但更新多次仍无法获取

uni-app 获取短信验证码问题 templateId已填但更新多次仍无法获取

操作步骤:

  • 用得unistarter
  • 未找到scene=login-by-sms,的短信模版templateId。
  • 已启动测试模式,直接使用:123456作为短信验证码即可。
  • 如果是正式项目,请在路径:/common/uni-config-center/uni-id/config.json中service->sms中配置密钥等信息
  • 更多详情:https://uniapp.dcloud.io/uniCloud/uni-id.html#config

预期结果:

  • 成功

实际结果:

  • 未找到scene=login-by-sms,的短信模版templateId。
  • 已启动测试模式,直接使用:123456作为短信验证码即可。
  • 如果是正式项目,请在路径:/common/uni-config-center/uni-id/config.json中service->sms中配置密钥等信息
  • 更多详情:https://uniapp.dcloud.io/uniCloud/uni-id.html#config

bug描述:

  • 未找到scene=login-by-sms,的短信模版templateId。
  • 已启动测试模式,直接使用:123456作为短信验证码即可。
  • 如果是正式项目,请在路径:/common/uni-config-center/uni-id/config.json中service->sms中配置密钥等信息
  • 更多详情:https://uniapp.dcloud.io/uniCloud/uni-id.html#config
4 回复

uni-id/config.json这个文件有吗?如果没有需要自行新建,如果已经有了 请再检查下配置service->sms ,配置完成后重新上传 详细参考https://doc.dcloud.net.cn/uniCloud/uni-id/summary.html#config


有了。搞定了。 “service”: { “sms”: { “name”: “”, // 应用名称,对应短信模版的name “codeExpiresIn”: 180, // 验证码过期时间,单位为秒,注意一定要是60的整数倍 “scene”: { “bind-mobile-by-sms”: { // 对绑定手机号场景的配置,短信验证码场景值参考:https://uniapp.dcloud.net.cn/uniCloud/uni-id/summary.html#sms-scene “templateId”: “”, // 绑定手机号使用的短信验证码模板 “codeExpiresIn”: 240 // 绑定手机号验证码过期时间 } } }, 这个配置只写了一个场景配置,文档好像没说明设置通用的templateId。我复制这个过去,原来只能一个场景用。建议改一下文档说明一下

回复 t***@163.com: 目前没有通用配置,只有对单个场景进行配置的templateId

在使用 uni-app 获取短信验证码时,如果已经填写了 templateId 但仍然无法获取验证码,可能是由以下几个原因导致的。以下是一些可能的排查步骤和解决方案:

1. 检查 templateId 是否正确

  • 确保你填写的 templateId 是在短信服务商平台(如阿里云、腾讯云等)上正确配置的模板ID。
  • 确认该模板已通过审核,并且模板内容符合短信服务商的要求。

2. 检查权限和签名

  • 确保你在短信服务商平台上已经正确配置了短信签名,并且该签名已通过审核。
  • 检查你的应用是否有发送短信的权限,某些服务商可能需要额外的权限申请。

3. 检查 API 调用参数

  • 确保你在调用短信发送 API 时,所有必填参数都已正确填写,包括 phoneNumbertemplateIdtemplateParam 等。
  • 检查是否有其他参数缺失或填写错误。

4. 检查网络请求

  • 使用浏览器的开发者工具或抓包工具(如 Charles、Fiddler)检查网络请求,确认请求是否成功发送到短信服务商的服务器。
  • 查看请求的响应内容,是否有错误信息返回,如 codemessage 字段。

5. 检查短信服务商返回的错误信息

  • 如果短信服务商返回了错误信息,根据错误信息进行排查。常见的错误包括:
    • InvalidTemplateId:模板ID无效。
    • InvalidSignature:签名无效。
    • LimitExceeded:短信发送频率超限。
    • BlackList:手机号在黑名单中。

6. 检查短信发送频率限制

  • 有些短信服务商对短信发送频率有限制,确保你没有超出每日或每分钟的发送限制。
  • 如果你频繁发送短信,可能会导致短信服务商临时封禁你的账号或IP。

7. 检查手机号格式

  • 确保你填写的手机号格式正确,符合短信服务商的要求。例如,中国大陆的手机号通常需要以 +86 开头。

8. 检查短信服务商账户余额

  • 确保你的短信服务商账户有足够的余额或短信条数,余额不足可能会导致短信发送失败。

9. 调试和日志

  • 在代码中添加调试日志,打印出关键参数和返回值,方便排查问题。
  • 如果使用了云函数或服务器端代码,检查服务器日志是否有错误信息。

10. 联系短信服务商技术支持

  • 如果以上步骤都无法解决问题,建议联系短信服务商的技术支持,提供详细的错误信息和请求参数,寻求帮助。

示例代码

以下是一个使用 uni-app 发送短信验证码的示例代码(假设使用腾讯云短信服务):

uni.request({
    url: 'https://sms.tencentcloudapi.com', // 腾讯云短信API地址
    method: 'POST',
    data: {
        Action: 'SendSms',
        PhoneNumberSet: ['+8613712345678'], // 手机号
        TemplateID: '123456', // 模板ID
        Sign: 'YourSign', // 短信签名
        TemplateParamSet: ['1234'], // 验证码
        SmsSdkAppid: 'your_appid', // 应用ID
    },
    header: {
        'Content-Type': 'application/json',
        'Authorization': 'YourAuthorizationToken', // 鉴权信息
    },
    success: (res) => {
        console.log('短信发送成功:', res.data);
    },
    fail: (err) => {
        console.error('短信发送失败:', err);
    }
});
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!