PHP阿里云获取短信验证方法
1需要先开通阿里云的短信服务
2需要先申请短信签名(具体申请详情请参考说明,申请签名的适用场景请根据实际需求)
3在模板管理中需添加模板(具体模板内容,请根据实际需求申请)
申请完成后阿里云后台会在两小时内出审核结果
短信服务SDK及DEMO下载
只用过旧版,就以旧版php为例
下载完成后解压放到桌面上
php用了TP框架的 ,就将刚才的文件放入extend目录下
现在就需要配置我们需要的参数在SmsDemo.php文件中需要将下列的参数替换成自己的
// TODO 此处需要替换成开发者自己的AK (https://ak-console.aliyun.com/)
$accessKeyId = "yourAccessKeyId"; // AccessKeyId
$accessKeySecret = "yourAccessKeySecret"; // AccessKeySecret
还需将下列参数替换成可用的
// 必填,设置短信接收号码
$request->setPhoneNumbers("12345678901");
// 必填,设置签名名称,应严格按"签名名称"填写,请参考: https://dysms.console.aliyun.com/dysms.htm#/develop/sign
$request->setSignName("短信签名");
// 必填,设置模板CODE,应严格按"模板CODE"填写, 请参考: https://dysms.console.aliyun.com/dysms.htm#/develop/template
$request->setTemplateCode("SMS_0000001");
// 可选,设置模板参数, 假如模板中存在变量需要替换则为必填项
$request->setTemplateParam(json_encode(array( // 短信模板中字段的值
"code"=>"12345",
"product"=>"dsd"
), JSON_UNESCAPED_UNICODE));
列如:
// 必填,设置短信接收号码
$request->setPhoneNumbers($con['phone']);
// 必填,设置签名名称,应严格按"签名名称"填写,请参考: https://dysms.console.aliyun.com/dysms.htm#/develop/sign
$request->setSignName($con['name']);
// 必填,设置模板CODE,应严格按"模板CODE"填写, 请参考: https://dysms.console.aliyun.com/dysms.htm#/develop/template
$request->setTemplateCode($con['template']);
// 可选,设置模板参数, 假如模板中存在变量需要替换则为必填项
$request->setTemplateParam(json_encode( // 短信模板中字段的值
$con['param']
, JSON_UNESCAPED_UNICODE));
现在SmsDemo中需要替换的已经完成
现在需要在自己的控制器下建立一个sms.php文件
代码如下:
//引入短信验证文件
use al_dysms\api_demo\SmsDemo;
class Sms extends Base
{
public function send($phone, $pwd, $template)
{
if (!((user_md5($phone)) == $pwd)) {
return 'md5验证false';
}
$sms = new SmsDemo();
//模板参数,自定义了随机数,你可以在这里保存在缓存或者cookie等设置有效期以便逻辑发送后用户使用后的逻辑处理
$code = mt_rand(100000, 999999);
$sql = [
'captcha' => $code,
'phone' => $phone,
'add_time' => time()
];
db('captcha')->insert($sql);
$templateParam = ['code' => $code];//设置模板参数
$con = [
'phone' => $phone,//发送验证码手机号
'name' => 'xxx', //短信签名
'template' => $template,//模板CODE
'param' => $templateParam//模板参数
];
$m = $sms->sendSms($con);
//类中有说明,默认返回的数组格式,如果需要json,在自行修改类,或者在这里将$m转换后在输出
return $m;
}
}
然后在创建发送短信验证captcha.php文件
代码如下:
use app\adminfunny\controller\Sms;
/**
* Class Captcha
* @package app\adminsum\controller
* @title 短信验证
*/
class Captcha extends Base
{
/**
* @title 获取注册验证码
* @desc {"0":"接口地址:adminsum/captcha/sendRegisterSms","1":"请求方式:GET或者POST","2":"接口备注:获取短信注册验证码"}
* @param {"name":"phone","type":"int","required":true,"default":"1","desc":"手机号"}
* @param {"name":"pwd","type":"int","required":true,"default":"1","desc":"验证参数(就是手机号)"}
*/
public function sendRegisterSms()
{
$phone = input('phone');
if (!$phone) {
$this->apiReturn(303, '请输入手机号');
}
//验证手机号码格式
$this->phoneFormat($phone);
$pwd = input('pwd');
if (!$pwd) {
$this->apiReturn(303, '缺少pwd');
}
//引入短信验证方法
$sms = new Sms();
//config('AL_TEMPLATE_REGISTER') 这里需要填写成自己的模板code
$result = $sms->send($phone, user_md5($pwd), config('AL_TEMPLATE_REGISTER'));
if (!$result) {
$this->apiReturn(303, '发送失败', $result);
} else {
$this->apiReturn(200, '发送成功', $result);
}
}
}