使用php发送手机或者邮箱验证码

以下代码需要填写自己对应的参数

  1. $mail->Username = ‘邮箱’;
  2. $mail->Password = ‘邮箱密码’;
  3. $mail->setFrom(‘邮箱名称’,‘标题’);
  4. $mail->addReplyTo(‘邮箱’,‘智慧儿童英语’);
  5. $mail->Subject = ‘标题’;
  6. $mail->Body = “内容”;
  7. $config[‘appid’] = “appid”;
  8. $config[‘appkey’] = “appkey”;
  9. $config[‘sign_type’] = ‘normal’;
  10. $submail->SetProject(‘模板上的验证码’);
  11. $submail->AddVar(‘time’, ‘一’);
  12. $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);
   }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值