php实现短信验证
PHP 实现短信验证的方法
使用第三方短信服务 API
选择可靠的短信服务提供商(如阿里云短信、腾讯云短信、云片、Twilio 等),注册账号并获取 API Key 和 Secret。以下以阿里云短信为例:

// 配置阿里云短信参数
$accessKeyId = 'your_access_key_id';
$accessKeySecret = 'your_access_key_secret';
$signName = 'your_sms_sign_name';
$templateCode = 'your_template_code';
// 生成随机验证码
$code = rand(100000, 999999);
// 短信内容参数
$params = [
'PhoneNumbers' => '13800138000',
'SignName' => $signName,
'TemplateCode' => $templateCode,
'TemplateParam' => json_encode(['code' => $code])
];
// 发送短信请求
$client = new \GuzzleHttp\Client();
$response = $client->post('https://dysmsapi.aliyuncs.com', [
'form_params' => $params,
'headers' => [
'Authorization' => 'Bearer ' . base64_encode($accessKeyId . ':' . $accessKeySecret)
]
]);
// 处理响应
if ($response->getStatusCode() == 200) {
echo "短信发送成功,验证码:" . $code;
} else {
echo "短信发送失败";
}
验证码存储与验证
将生成的验证码存储在 Session 或数据库中,以便后续验证:

// 存储验证码到 Session
session_start();
$_SESSION['sms_code'] = $code;
$_SESSION['sms_expire'] = time() + 300; // 5 分钟有效期
// 用户提交验证码验证
$userCode = $_POST['code'];
if ($userCode == $_SESSION['sms_code'] && time() < $_SESSION['sms_expire']) {
echo "验证码正确";
} else {
echo "验证码错误或已过期";
}
本地测试方案
如果没有短信服务 API,可以使用本地模拟方案:
// 模拟发送短信(实际开发中替换为真实 API)
function sendSms($phone, $code) {
file_put_contents('sms_log.txt', "Phone: $phone, Code: $code\n", FILE_APPEND);
return true;
}
// 生成并发送验证码
$code = rand(100000, 999999);
sendSms('13800138000', $code);
安全性注意事项
验证码应设置有效期(通常 5-10 分钟),避免使用连续数字或简单模式。对同一手机号发送频率进行限制(如每分钟最多 1 次)。敏感操作需结合图形验证码等二次验证。
以上方法可根据实际需求调整,核心逻辑是生成、发送、存储和验证四步流程。






