PHP实现短信验证码的方式有很多,常见的方法包括:
-
调用第三方短信服务商提供的API进行发送短信验证码,比如阿里云、腾讯云等。
-
使用PHP发送邮件,在邮件内容中包含短信验证码。
下面是一个简单的示例代码,实现了通过阿里云短信服务商发送短信验证码的功能:
<?php
//设置您的AccessKey和AccessSecret信息
define("accessKeyId", "your_access_key_id");
define("accessSecret", "your_access_key_secret");
//请求地址,格式为"http://dysmsapi.aliyuncs.com/?Action=SendSms&TemplateCode=SMS_XXXXXX&SignName=XXXXX&PhoneNumbers=XXXX&...";
define("sms_send_url", "http://dysmsapi.aliyuncs.com");
//生成6位随机数字短信验证码
$code = rand(100000, 999999);
//将验证码存储到session中,待比对用户输入的验证码时使用
session_start();
$_SESSION["sms_code"] = $code;
//设置请求参数
$params = array(
"RegionId" => "cn-hangzhou",
"PhoneNumbers" => "手机号",
"SignName" => "短信签名",
"TemplateCode" => "短信模板ID",
"TemplateParam" => "{"code":"" . strval($code) . ""}",
"Action" => "SendSms",
"Version" => "2017-05-25"
);
//执行请求
require_once "aliyun_sdk/aliyun-php-sdk-core/Config.php";
use AliyunCoreDefaultAcsClient;
use AliyunCoreProfileDefaultProfile;
use AliyunCoreRegionsEndpointProvider;
use AliyunCoreRegionsProductDomain;
use AliyunApiSmsRequestV20170525SendSmsRequest;
header("Content-Type: text/plain; charset=utf-8");
function sendSms($accessKeyId, $accessKeySecret, $params = array(), $security = false)
{
$iClientProfile = DefaultProfile::getProfile("cn-hangzhou", $accessKeyId, $accessKeySecret);
DefaultProfile::addEndpoint("cn-hangzhou", "cn-hangzhou", "Dysmsapi", "dysmsapi.aliyuncs.com");
$client = new DefaultAcsClient($iClientProfile);
$request = new SendSmsRequest();
$request->setPhoneNumbers($params["PhoneNumbers"]);
$request->setSignName($params["SignName"]);
$request->setTemplateCode($params["TemplateCode"]);
if (isset($params["TemplateParam"])) {
$request->setTemplateParam($params["TemplateParam"]);
}
$response = $client->getAcsResponse($request);
return $response;
}
$result = sendSms(accessKeyId, accessSecret, $params);
//输出结果
echo "<pre>";
print_r($result);
echo "</pre>";
?>
其中 accessKeyId
和 accessSecret
需要您在阿里云短信服务控制台中创建AccessKey,sms_send_url
中的参数需要替换为您所使用的短信模板、签名等信息。