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
相关产品推荐
相关产品推荐

