# 短信验证码阿里云时间戳格式修复(2026-05-07) ## 背景 使用阿里云短信验证码真实 provider 发送验证码时,接口返回: ```text 短信验证码发送失败:Specified time stamp or date value is not well formatted. ``` 该错误来自阿里云 OpenAPI 网关对签名请求头 `x-acs-date` 的格式校验。 ## 根因 `server-rs/crates/platform-auth/src/lib.rs` 中阿里云 ACS3 签名逻辑会构造 `x-acs-date` 请求头。 原实现使用 `time::format_description::well_known::Rfc3339`,当 `OffsetDateTime::now_utc()` 带纳秒时会生成形如: ```text 2026-05-07T14:23:59.364767Z ``` 阿里云 ACS3 签名要求 `x-acs-date` 使用不带小数秒的 UTC ISO 8601 格式: ```text yyyy-MM-dd'T'HH:mm:ss'Z' ``` 即: ```text 2026-05-07T14:23:59Z ``` 带小数秒的时间戳会被阿里云网关判定为格式非法,从而返回 `Specified time stamp or date value is not well formatted.`。 ## 修复方案 将 `current_aliyun_timestamp()` 改为手动输出不带小数秒的 UTC ISO 8601 格式: ```text yyyy-MM-dd'T'HH:mm:ss'Z' ``` 并新增单元测试,确保: - 长度等于 `2026-05-07T12:34:56Z`; - 固定位置包含 `-`、`T`、`:`、`Z`; - 不包含小数点; - 除固定分隔符外均为数字。 ## 影响范围 - 仅影响阿里云短信验证码 provider 的请求签名头 `x-acs-date`。 - 不改动短信模板、签名、验证码业务参数。 - 不改动 mock 短信 provider。 - 不涉及前端接口契约变化。 ## 验收 执行: ```bash cd server-rs cargo test -p platform-auth aliyun -- --nocapture cargo fmt -p platform-auth --check ``` 预期:相关测试通过,格式检查通过。