用户在账号设置里改手机号,填了新号码,收到的验证码却发到了旧手机上,旧手机已经停机,流程卡在最后一步。碰到这种情况,我一般先确认改动有没有真的生效。
原因不复杂,发送验证码的接口读的是账号当前的手机号字段,没有接收前端传的新号码。前端把新号放在了一个后端不认识的字段名里,两边都没报错。
「换绑手机号验证码」相关的验证我通常做两遍,改完一次、隔天再看一次,确认不是临时生效。报错里带路径的,先去看那个路径在不在、权限对不对。
// 换绑阶段发给新号码,不读账号当前手机号
$target = sanitize_text_field($_POST['new_phone']);
$code = wp_rand(100000, 999999);
set_transient('bind_' . $target, $code, 300);
具体做法是,换绑分两步,先验证旧号,再验证新号,两次用不同的接口;发送验证码时显式传目标号码,服务端校验格式后再发;新号验证通过前不要动账号上的手机号字段;拿一个旧号还能收短信的账号走一遍,确认两步顺序对。
最后用这个标准收尾,验证码发到新号,旧号收不到任何短信,绑定成功后资料页显示新号。
