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
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 时,所有必填参数都已正确填写,包括
phoneNumber
、templateId
、templateParam
等。 - 检查是否有其他参数缺失或填写错误。
4. 检查网络请求
- 使用浏览器的开发者工具或抓包工具(如 Charles、Fiddler)检查网络请求,确认请求是否成功发送到短信服务商的服务器。
- 查看请求的响应内容,是否有错误信息返回,如
code
或message
字段。
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);
}
});