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

Laravel中SMS Alert API验证时如何读取desc字段做if条件判断

Laravel SMS Alert OTP验证功能正确实现

以下是修正后的完整控制器方法代码:

public function verifyotp(Request $request)
{
    // 参数校验(可选但推荐添加,避免非法请求报错)
    $validated = $request->validate([
        'mobilenumber' => 'required|string',
        'otp' => 'required|digits:6' // 可根据实际OTP位数调整规则
    ]);

    $mobile = $validated['mobilenumber'];
    $otp = $validated['otp'];

    $client = new \GuzzleHttp\Client();
    // 请将下方链接中的#替换为你自己的SMS Alert实际apikey
    $apiUrl = 'https://www.smsalert.co.in/api/mverify.json?apikey=#&mobileno=' . $mobile . '&code=' . $otp;
    
    try {
        $res = $client->request('POST', $apiUrl);
        // 将响应体解析为关联数组
        $responseData = json_decode($res->getBody()->getContents(), true);

        // 读取desc字段做逻辑判断
        $verifyDesc = $responseData['description']['desc'] ?? '';
        if ($verifyDesc === 'Code does not match.') {
            echo 'Code Not Matched';
            // 实际生产环境建议返回标准响应:return response()->json(['message' => '验证码错误'], 400);
        } elseif ($verifyDesc === 'Code matched successfully.') {
            echo 'Code Matched';
            // 实际生产环境建议返回标准响应:return response()->json(['message' => '验证通过']);
        } else {
            echo '验证异常,请稍后重试';
        }
    } catch (\Exception $e) {
        // 接口请求失败异常处理
        echo '验证接口请求失败:' . $e->getMessage();
    }
}

核心修改点说明

  • 响应解析:$res->getBody()默认返回Guzzle的流对象,需要先调用getContents()转为字符串,再通过json_decode(..., true)转为关联数组才能直接读取字段值
  • 字段读取:接口返回的desc字段层级为description.desc,直接通过数组下标$responseData['description']['desc']取值即可
  • 匹配注意事项:判断字符串需和接口返回完全一致,注意大小写(接口返回的匹配成功描述是小写开头的matched,不是大写的Matched,原代码的错误写法会导致匹配失败)
  • 可选增强:补充了请求参数校验、异常捕获逻辑,避免参数缺失或接口请求异常导致的程序报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 19:06:03