一 短信发送
可以使用各大平台的短信服务,如(阿里云,腾讯云)这里以阿里云为例
具体步骤查看开发者指南
下载好demo文件后,修改api_demo/SmsDemo.php文件
public static function getAcsClient() {
$product = "Dysmsapi"; //产品名称:云通信短信服务API产品,开发者无需替换
$domain = "dysmsapi.aliyuncs.com";//产品域名,开发者无需替换
$accessKeyId = "LTAINVyp2WHc65V6"; // AccessKeyId 此处需要替换成开发者自己的AK
$accessKeySecret = "e9yjbGm0DSaX67rA2voeVLNaBlNbgq"; // AccessKeySecret此处需要替换成开发者自己
$region = "cn-hangzhou";// 暂时不支持多Region
$endPointName = "cn-hangzhou";// 服务结点
//...
return static::$acsClient;
}
发送短信方法 sendSms()
public static function sendSms() {
$request = new SendSmsRequest();// 初始化SendSmsRequest实例用于设置发送短信的参数
//$request->setProtocol("https");//可选-启用https协议
$request->setPhoneNumbers("{$_POST['number']}"); // 必填,设置短信接收号码
// 必填,设置签名名称,应严格按"签名名称"填写,请参考: 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_149386098");//换成自己的签名名称模板CODE
// 可选,设置模板参数, 假如模板中存在变量需要替换则为必填项
$request->setTemplateParam(json_encode(array( // 短信模板中字段的值
"code"=>SmsDemo::sexNum(), //六位随机验证码 sexNum()是自己写的生成验证码的函数
"product"=>"dsd"
), JSON_UNESCAPED_UNICODE));
$request->setOutId("yourOutId"); // 可选,设置流水号
$request->setSmsUpExtendCode("1234567");// 选填,上行短信扩展码(扩展码字段控制在7位或以下,无特殊需求用户请忽略此字段)
$acsResponse = static::getAcsClient()->getAcsResponse($request);// 发起访问请求
// return $acsResponse;
if($acsResponse->Code=='OK'){
$_SESSION['code'] = json_decode($request->getTemplateParam(),true)['code'];// 生成session 用于服务端验证
echo $request->getTemplateParam(); //json字符串 包含验证码 可以不用返回
}elseif($acsResponse->Code=='isv.MOBILE_NUMBER_ILLEGAL'){
echo "-1"; //用于ajax回调 手机号格式出错
}elseif($acsResponse->Code=='isv.BUSINESS_LIMIT_CONTROL'){
echo "-2"; //用于ajax回调 超过限制 一个手机号一天条数
}else{
echo "-3"; //用于ajax回调 其它错误
};
}
// 生成验证码
public static function sexNum() {
$_num = '';
for($i=0;$i<6;$i++){
$_num .= mt_rand(0,9);
}
return $_num;
}
前端ajax调用
$.ajax({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
dataType: 'json',
type:'POST',
url:'{{url::asset("message/api_demo/SmsDemo.php")}}',// 这里填上面的地址
data:{
number:$('#phone').val(), //手机号
},
success:function(text){
switch(text){
case '-1':
alert('手机号格式出错');
break;
case '-2':
alert('超过限制');
break;
case '-3':
alert('其他错误');
break;
default:
// text.code {"code":"595266","product":"dsd"}
// 得到手机验证码
}
},
})
只要在注册的时候判断提交的验证码和session值是否相同就可以了
二 邮件发送
laravel邮件发送
先开启邮箱的pop3和smtp服务(略)
找到.env文件
MAIL_DRIVER = smtp
MAIL_HOST = smtp.qq.com // 这里是qq邮箱
MAIL_PORT = 465
MAIL_USERNAME = 1569526@qq.com
MAIL_PASSWORD = feyfteluhchd
MAIL_ENCRYPTION = ssl
1 发送纯文本
public function sendEmail(Request $request){
if($request->ajax()){
$email = $request->input('email'); // 这些是接收的要发送的邮箱
$emailArr = [1,2,3,4,5,6,7,8,9,0]; // 验证码设计6位验证码
$num = '';
for($i = 0;$i<6;$i++){
$num .= array_rand($emailArr);
}
$flag = Mail::raw('您的短信验证码是 '.$num.' 请及时处理',function($message) use ($email){
$message->from('1563999@qq.com','邮件名称'); // 这里填写发送人邮箱和邮件名称
$message->subject('邮件主题');
$message->to($email);
});
if($flag){
Session::set('email',$num); // 生成session 用于以后判断用户填写的邮箱验证码是否正确
return response()->json(array('code'=>1,'msg'=>'邮件发送成功,请注意查收!'));
}else{
return response()->json(array('code'=>-1,'msg'=>'发送邮件失败,请重试!'));
}
}
}
2 发送html文件
public function sendEmail(Request $request){
if($request->ajax()){
$email = $request->input('email'); // 要发送的邮箱
$emailArr = [1,2,3,4,5,6,7,8,9,0]; // 验证码设计
$num = '';
for($i = 0;$i<6;$i++){
$num .= array_rand($emailArr);
}
// 第一个参数是模板地址(设置好路由)
$flag = Mail::send('account.test',['email'=>$email,'num'=>$num],function($message) use ($email){
$from = '1563999@qq.com'; // 发送人邮箱
$name = '邮件名称';
$message->from($from,$name);
$message->to($email)->subject('邮箱验证码'); // $email 要发送的邮箱
});
if($flag){
Session::set('email',$num);// 生成session 用于以后判断用户填写的邮箱验证码是否正确
return response()->json(array('code'=>1,'msg'=>'邮件发送成功,请注意查收!'));
}else{
return response()->json(array('code'=>-1,'msg'=>'发送邮件失败,请重试!'));
}
}
}
// 路由
Route::any('account/test','AccountController@test');
test.blade.php
<p style="text-align: center;">您的邮箱验证码是 <span style="color: red;">{{$num}} </span>,请及时填写</p>