You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 9集成Twilio Verify V2报参数需为array传入string类型错误

报错原因

该类型错误由本地安装的Twilio PHP SDK与参考教程的适配版本不匹配导致:

  • 5.x及更早版本的Twilio PHP SDK中,verificationChecks->create()方法支持拆分传参:第一个参数传入验证码字符串,第二个参数传入包含to(接收手机号)字段的配置数组
  • 6.x及以上版本的Twilio PHP SDK修改了接口定义,create()方法仅接收一个数组类型的入参,所有校验参数(验证码、接收手机号等)都需要放在该数组中传递,不再支持拆分传两个参数的写法

你当前项目使用的是新版SDK,但参考的教程基于旧版SDK编写,传参格式不符合新版接口的类型要求,因此抛出参数类型错误。

修复方法
  1. 修正verificationChecks->create()的传参格式
    将验证码、手机号统一放入一个数组传入,验证码对应的数组键名为code,替换原有错误传参:
// 原有错误写法
// $verification = $twilio->verify->v2->services($twilio_verify_sid)
//     ->verificationChecks
//     ->create($data['verification_code'], array('to' => $data['phone_number']));

// 新版SDK正确写法
$verification = $twilio->verify->v2->services($twilio_verify_sid)
    ->verificationChecks
    ->create([
        'code' => $data['verification_code'],
        'to' => $data['phone_number']
    ]);
  1. 修复原有代码的隐藏逻辑bug
    原代码中tap(User::where('phone_number', $data['phone_number']))->update(...)返回的是查询构造器实例,并非查询到的用户模型,后续调用模型方法、执行登录逻辑都会触发错误。需要先查询到对应的用户实例,再执行状态更新和登录操作,修正后的完整verify方法代码如下:
protected function verify(Request $request)
{
    $data = $request->validate([
        'verification_code' => ['required', 'numeric'],
        'phone_number' => ['required', 'string'],
    ]);

    $token = getenv("TWILIO_AUTH_TOKEN");
    $twilio_sid = getenv("TWILIO_SID");
    $twilio_verify_sid = getenv("TWILIO_VERIFY_SID");
    $twilio = new Client($twilio_sid, $token);

    $verification = $twilio->verify->v2->services($twilio_verify_sid)
        ->verificationChecks
        ->create([
            'code' => $data['verification_code'],
            'to' => $data['phone_number']
        ]);

    if ($verification->valid) {
        $user = User::where('phone_number', $data['phone_number'])->first();
        $user->update(['isVerified' => true]);
        Auth::login($user);
        return redirect()->route('home')->with(['message' => 'Phone number verified']);
    }
    
    return back()->with(['phone_number' => $data['phone_number'], 'error' => 'Invalid verification code entered!']);
}

如果first_name()是你在用户模型中自定义的方法,请确保是在查询到的用户实例上调用,不要直接在查询构造器上调用模型方法。

内容的提问来源于stack exchange,提问作者Charles Smith

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 18:24:39