以下代码需要填写自己对应的参数
- $mail->Username = ‘邮箱’;
- $mail->Password = ‘邮箱密码’;
- $mail->setFrom(‘邮箱名称’,‘标题’);
- $mail->addReplyTo(‘邮箱’,‘智慧儿童英语’);
- $mail->Subject = ‘标题’;
- $mail->Body = “内容”;
- $config[‘appid’] = “appid”;
- $config[‘appkey’] = “appkey”;
- $config[‘sign_type’] = ‘normal’;
- $submail->SetProject(‘模板上的验证码’);
- $submail->AddVar(‘time’, ‘一’);
- $submail->AddVar(‘code’, $code);
<?php
namespace app\api\controller;
//引入第三方邮件类、短信类
//发送邮箱信息的插件
use phpmailer\PHPMailer;
//发送手机短信的 插件
use submail\messagexsend;
class Code extends Common {
/**
* 发送验证码
*/
public function getCode() {
$username = $this->params['username'];
$exist = $this->params['is_exist'];
$username_type = $this->checkUsername($username);
switch ($username_type) {
case 'email':
$this->getCodeByUsername($username, 'email', $exist);
break;
case 'iphone':
$this->getCodeByUsername($username, 'iphone', $exist);
break;
}
}
/**
* 通过手机/邮箱获取验证码
* @param [string] $username [手机号/邮箱]
* @param [string] $type [值:phone/email]
* @param [int] $exist [手机号是否应该存在数据库中 1:是 0: 否]
* @return [json] [api返回的json数据]
*/
private function getCodeByUsername($username, $type, $exist)
{
/* 判断类型 */
if ($type == 'iphone') {
$type_name = '手机';
} else {
$type_name = '邮箱';
}
/* 检测手机号/邮箱是否存在与数据库 */
$this->checkExist($username, $type, $exist);
/* 检测验证码请求频率 30秒一次 */
if (session($username . '_last_send_time')) {
if (time() - session($username . '_last_send_time') < 30) {
$this->returnMsg(400, $type_name . '验证码,每30s只能发送一次');
}
}
/* 生成验证码 */
$code = $this->makeCode(6);
/* 使用session存储验证码,方便对比,md5加密 */
$md5_code = md5($username . '_' . md5($code));
session($username . '_code', $md5_code);
/* 使用session存储验证码的发送时间 */
session($username . '_last_send_time', time());
/* 发送验证码 */
if ($type == 'iphone') {
$this->sendCodeToPhone($username, $code);
} else {
$this->sendCodeToEmail($username, $code);
}
}
/**
* [向邮箱发送验证码]
* @param [String] $email [目标emial]
* @param [Number] $code [验证码]
* @return [json] [执行结果]
*/
private function sendCodeToEmail($email, $code)
{
$mail = new PHPMailer();
$mail->isSMTP();
$mail->CharSet = 'utf8';
$mail->Host = 'smtp.126.com';
$mail->SMTPAuth = true;
$mail->Username = '邮箱';
$mail->Password = '邮箱密码';
$mail->SMTPSecure = 'ssl';
$mail->Port = 994;
$mail->setFrom('邮箱名称','标题');
$mail->addAddress($email,'lyr');
$mail->addReplyTo('邮箱','智慧儿童英语');
$mail->Subject = '标题';
$mail->Body = "内容";
if($mail->send()) {
$this->returnMsg(200,'邮箱验证码已成功发送,请注意查收!');
} else {
$this->returnMsg(400,$mail->ErrorInfo);
}
}
/**
* [使用 submail SDK 向手机发送短信验证码]
* @param [String] $phone [用户的手机号码]
* @param [Number] $code [验证码]
* @return [json] [执行结果]
*/
private function sendCodeToPhone($phone, $code)
{
$config['appid'] = "appid";
$config['appkey'] = "appkey";
$config['sign_type'] = 'normal';
$submail = new MESSAGEXsend($config);
$submail->setTo($phone);
$submail->SetProject('模板上的验证码');
$submail->AddVar('time', '一');
$submail->AddVar('code', $code);
$xsend = $submail->xsend();
//判断返回结果
if ($xsend['status'] !== 'success') {
$this->returnMsg(400, $xsend['msg']);
} else {
$this->returnMsg(200, '手机验证码发送成功,请在一分钟内验证!');
}
}
/**
* [curl请求资源数据]
* @param [Array] $data [要传递的数据]
* @return [Array] [执行后返回的结果]
*/
private function httpRequest($data)
{
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $this->RequestUrl);
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
if (isset($data)) {
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
}
$res = curl_exec($curl);
var_dump(curl_error($curl));
curl_close($curl);
return $res;
}
/**
* 生成验证码
* @param [int] $num [验证法的位数]
* @return [init] [生成的验证码]
*/
public function makeCode($num)
{
// 100000 - 999999
$max = pow(10, $num) - 1;
$min = pow(10, $num - 1);
return rand($min, $max);
}
}