我下方使用的是 短信宝 这个第三方平台,您也可以使用腾讯云平台的_
在项目根目录下下载composer 包
composer require mrwanghongda/sms-sdk
控制器中示例:
public function sendTel(Request $request)
{
//接收传递过来的手机号码
$post = $request->get();
//对手机号进行验证(略)
$code = rand(1000,9999);
//工厂模式
$smsObj = (new SmsFactory(SmsFactory::SMS_BAO))->getSmsService();
$config = [
/* 填写平台对应的CAM密匙secretId,短信宝填写平台账号*/
'secretId' => "*********",
/* 填写平台对应的CAM密匙secretKey,短信宝填写平台密码*/
'secretKey' => "********",
/* 短信应用ID: 短信SdkAppId在 [短信控制台] 添加应用后生成的实际SdkAppId,示例如1400006666 ,短信宝默认为空*/
'smsSdkAppId' => '',
/* 验证码,示例如5039 */
'code' => $code,
/* 填写腾讯、阿里平台对应的签名内容,短信宝则默认为空 */
'signName' => '',
/* 发送的手机号,示例如17899873465 */
'tel' => $post['phone'],
/* 模板 ID: 必须填写已审核通过的模板 ID。模板ID可登录 [短信控制台] 查看 */
'templateId' => "",
/* 模板发送的短信内容,短信宝则需要填写 如:"【短信宝】您的验证码是"5390",3分钟有效。", 腾讯、阿里默认为空 */
'content' => '【短信宝】您的验证码是'.$code.',3分钟有效。',//
];
$num = cache('register_num_'.$post['phone']);
$time = cache('register_time_'.$post['phone']);
if ($num>5)
{
return fail('您今日发送次数已达上限制');
}
if (time()-$time<60)
{
return fail('发送太频繁,请稍后再试');
}
//这个请求是需要钱的,如果测试发送成功后,就可以关掉,自己再模拟一个发送成功的信息就好
//$result = $smsObj->send($config);
$result = ['code'=>200,'msg'=>'发送成功','data'=>$code];
if ($result['code']==200)
{
//缓存验证码
cache('register_code_'.$post['phone'],$code,180);
//缓存时间
cache('register_time_'.$post['phone'],time());
//手机发送次数
cache('register_num_'.$post['phone'],Cache::inc('register_num_'.$post['phone']));
return $result;
}
return fail('发送失败');
}
详细情况可参考:https://github.com/Mrwanghongda/sms-sdk
*注:那个fail是我自己封装的api返回函数,详情可参考:
thinkPHP6 中自定义封装的api返回格式_qu776161的博客-CSDN博客
