必须通过unicloud云函数调用短信api,且需关联uni-cloud-sms扩展库;参数中phone/templateid/data/appid须严格匹配审核模板与manifest配置,前端须校验手机号、清理定时器、检查errcode。

不能在 uni-app 前端直接调用短信平台 API,必须走 uniCloud 云函数中转——这是硬性前提,跳过就收不到验证码。
uniCloud 云函数必须启用 uni-cloud-sms 扩展库
自 HBuilderX 3.4.0 起,短信能力已剥离到独立扩展库。不手动关联,uniCloud.sendSms 会报错或提示缺少 smsKey(即使你没传)。
- 在 HBuilderX 中右键云函数目录 →「关联扩展库」→ 搜索并勾选
uni-cloud-sms - 若使用旧版模板或插件(如未升级的
uni-id-pages),需确保版本 ≥ 1.1.17;否则仍会强制校验smsKey和smsSecret - 关联后无需在代码里 import,但必须在云函数的
package.json中确认存在"uni-cloud-sms": "^1.0.0"类似依赖
云函数里调用 uniCloud.sendSms 的参数怎么填
关键不是“能不能发”,而是“发给谁、用哪个模板、填什么变量”。参数错一个,返回成功但短信永不抵达。
-
phone或phoneList二选一:单个手机号用phone: "13812345678";批量最多 50 个,用phoneList: ["13812345678", "13987654321"] -
templateId必须是已通过审核的模板 ID,形如"SMS_123456789",不是模板内容也不是名称 -
data是对象,字段名必须和模板中${xxx}完全一致,比如模板含${code}和${expMinute},则传{ code: "123456", expMinute: "5" } -
appid取自项目manifest.json中的name字段值(不是包名,不是应用名称)
前端调用云函数时容易漏掉的三件事
很多人写了云函数、配了模板、也点了按钮,结果控制台显示 success,手机却没响——问题往往出在前端链路。
- 没做手机号格式校验:
/^1[3-9]\d{9}$/必须在前端先拦住非法输入,否则云函数可能因格式错误静默失败 - 没绑定页面生命周期:倒计时用
setInterval启动后,必须在onUnload或onHide里clearInterval(timer),否则切后台再回来会卡死或叠加 - 没处理云函数错误码:
uniCloud.callFunction成功只代表请求发出去了,不代表短信发成功。要检查e.result.errCode,常见如40001(模板未报备)、40002(签名不匹配)、40003(变量缺失)
真正卡点不在代码长短,而在密钥存哪、模板报备是否通过、以及云函数里 data 字段名和模板占位符是否一字不差——这三个地方错一个,验证码就永远停在“发送成功”的假象里。











