婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > laravel框架使用阿里云短信發送消息操作示例

laravel框架使用阿里云短信發送消息操作示例

熱門標簽:河南電銷卡外呼系統哪家強 青島語音外呼系統招商 山西回撥外呼系統 岳陽外呼型呼叫中心系統在哪里 百應電話機器人服務 騰訊外呼管理系統 山西探意電話機器人 揚州地圖標注app 昭通辦理400電話

本文實例講述了laravel框架使用阿里云短信發送消息操作。分享給大家供大家參考,具體如下:

最新需要用到發送短信的功能,所以就在網上搜索一些寫好的擴展。

擴展地址:

https://github.com/MissMyCat/aliyun-sms

通過composer安裝:

composer require mrgoon/aliyun-sms dev-master

在 config/app.php 中 providers 加入:

Mrgoon\AliSms\ServiceProvider::class,

有需求的可以自行添加 aliases。

然后在控制臺運行 :

php artisan vendor:publish

默認會在 config 目錄下創建一個 aliyunsms.php 文件:

?php
return [
  'access_key' => env('ALIYUN_SMS_AK'), // accessKey
  'access_secret' => env('ALIYUN_SMS_AS'), // accessSecret
  'sign_name' => env('ALIYUN_SMS_SIGN_NAME'), // 簽名
];

然后在 .env 中配置相應參數:

ALIYUN_SMS_AK=
ALIYUN_SMS_AS=
ALIYUN_SMS_SIGN_NAME=

為了能夠方便的發送短信,我們可以在 app 目錄下,創建一個Services目錄,并添加 AliyunSms.php 文件。

?php
namespace App\Services;
use Mrgoon\AliSms\AliSms;
/**
 * 阿里云短信類
 */
class AliyunSms
{
  //驗證碼
  const VERIFICATION_CODE = 'verification_code';
  //模板CODE
  public static $templateCodes = [
    self::VERIFICATION_CODE => 'SMS_XXXXXXXXXX',
  ];
  /**
   * 發送短信
   */
  public static function sendSms($mobile, $scene, $params = [])
  {
    if (empty($mobile)) {
      throw new \Exception('手機號不能為空');
    }
    if (empty($scene)) {
      throw new \Exception('場景不能為空');
    }
    if (!isset(self::$templateCodes[$scene])) {
      throw new \Exception('請配置場景的模板CODE');
    }
    $template_code = self::$templateCodes[$scene];
    try {
      $ali_sms = new AliSms();
      $response = $ali_sms->sendSms($mobile, $template_code, $params);
      if ($response->Code == 'OK') {
        return true;
      }
      throw new \Exception($response->Message);
    } catch (\Throwable $e) {
      throw new \Exception($e->getMessage());
    }
  }
}

為了能夠記錄每次短信發送的狀態,我們可以創建一個 sms_logs 表。

CREATE TABLE `sms_logs` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
 `type` tinyint(1) NOT NULL DEFAULT '0' COMMENT '類型(0:短信驗證碼,1:語音驗證碼,2:短信消息通知)',
 `mobile` varchar(16) NOT NULL DEFAULT '' COMMENT '手機號',
 `code` varchar(12) NOT NULL DEFAULT '' COMMENT '驗證碼',
 `checked` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否驗證(0:未驗證,1:已驗證)',
 `status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '狀態(0:未發送,1:已發送,2:發送失敗)',
 `reason` varchar(255) NOT NULL DEFAULT '' COMMENT '失敗原因',
 `remark` varchar(255) NOT NULL DEFAULT '' COMMENT '備注',
 `operator_id` int(11) NOT NULL DEFAULT '0' COMMENT '操作人ID',
 `ip` varchar(16) NOT NULL DEFAULT '' COMMENT '操作IP',
 `created` int(11) NOT NULL DEFAULT '0' COMMENT '創建時間',
 `updated` int(11) NOT NULL DEFAULT '0' COMMENT '更新時間',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='短信表';

然后針對該表,我們創建一個 SmsLog 模型來管理。

?php
namespace App\Models;
use App\Services\AliyunSms;
class SmsLog extends Model
{
  protected $fillable = [
    'type',
    'mobile',
    'code',
    'checked',
    'status',
    'reason',
    'remark',
    'operator_id',
    'ip',
  ];
  //類型(0:短信驗證碼,1:語音驗證碼,2:短信消息通知)
  const TYPE_CODE = 0;
  const TYPE_VOICE = 1;
  const TYPE_MESSAGE = 2;
  //是否驗證(0:未驗證,1:已驗證)
  const CHECKED_UNVERIFIED = 0;
  const CHECKED_VERIFIED = 1;
  //狀態(0:未發送,1:已發送,2:發送失敗)
  const STATUS_NO_SEND = 0;
  const STATUS_SEND = 1;
  const STATUS_FAIL = 2;
  //短信發送間隔時間,默認60秒
  const SEND_INTERVAL_TIME = 60;
  /**
   * 檢測短信驗證碼
   */
  protected function checkCode($mobile, $code)
  {
    if (!$mobile) {
      throw new \Exception('手機號不能為空');
    }
    if (!checkMobile($mobile)) {
      throw new \Exception('手機號不正確');
    }
    if (!$code) {
      throw new \Exception('驗證碼不能為空');
    }
    $sms_log = $this->where([
      ['type', self::TYPE_CODE],
      ['mobile', $mobile],
      ['status', self::STATUS_SEND],
      ['checked', self::CHECKED_UNVERIFIED],
    ])->orderBy('created', 'desc')->first();
    if (!$sms_log) {
      throw new \Exception('驗證碼不存在,請重新獲取');
    }
    if ($code != $sms_log->code) {
      throw new \Exception('驗證碼錯誤');
    }
    $sms_log->checked = self::CHECKED_VERIFIED;
    $sms_log->save();
    return true;
  }
  /**
   * 檢測短信頻率
   */
  protected function checkRate($mobile)
  {
    if (!$mobile) {
      throw new \Exception('手機號不能為空');
    }
    $sms_log = $this->where([
      ['mobile', $mobile],
      ['status', self::STATUS_SEND],
    ])->orderBy('created', 'desc')->first();
    $now = time();
    if ($sms_log) {
      if (($now - strtotime($sms_log->created))  self::SEND_INTERVAL_TIME) {
        throw new \Exception('短信發送太頻繁,請稍后再試');
      }
    }
    return true;
  }
  /**
   * 發送短信驗證碼
   */
  protected function sendVerifyCode($mobile)
  {
    self::checkRate($mobile);
    $code = mt_rand(1000, 9999);
    $sms_log = $this->create([
      'type' => self::TYPE_CODE,
      'mobile' => $mobile,
      'code' => $code,
      'checked' => self::CHECKED_UNVERIFIED,
      'status' => self::STATUS_NO_SEND,
      'ip' => getRealIp(),
    ]);
    try {
      AliyunSms::sendSms($mobile, AliyunSms::VERIFICATION_CODE, ['code' => $code]);
      $sms_log->status = self::STATUS_SEND;
      $sms_log->save();
      return true;
    } catch (\Exception $e) {
      $sms_log->status = self::STATUS_FAIL;
      $sms_log->reason = $e->getMessage();
      $sms_log->save();
      throw new \Exception($e->getMessage());
    }
  }
}

這樣,我們就可以在項目中通過 SmsLog::sendVerifyCode() 發送短信了。

getRealIp() 和 checkMobile() 方法為公共方法,存放在 app/Helpers 的 functions.php 中。

/**
 * 獲取真實IP地址
 */
function getRealIp()
{
  $ip = false;
  if (getenv("HTTP_CLIENT_IP")  strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown")) {
    $ip = getenv("HTTP_CLIENT_IP");
  } else if (getenv("HTTP_X_FORWARDED_FOR")  strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown")) {
    $ips = explode(", ", getenv("HTTP_X_FORWARDED_FOR"));
    if ($ip) {
      array_unshift($ips, $ip);
      $ip = false;
    }
    $ipscount = count($ips);
    for ($i = 0; $i  $ipscount; $i++) {
      if (!preg_match("/^(10|172\.16|192\.168)\./i", $ips[$i])) {
        $ip = $ips[$i];
        break;
      }
    }
  } else if (getenv("REMOTE_ADDR")  strcasecmp(getenv("REMOTE_ADDR"), "unknown")) {
    $ip = getenv("REMOTE_ADDR");
  } else if (isset($_SERVER['REMOTE_ADDR'])  $_SERVER['REMOTE_ADDR']  strcasecmp($_SERVER['REMOTE_ADDR'], "unknown")) {
    $ip = $_SERVER['REMOTE_ADDR'];
  } else {
    $ip = "unknown";
  }
  return isIp($ip) ? $ip : "unknown";
}
/**
 * 檢查是否是合法的IP
 */
function isIp($ip)
{
  if (preg_match('/^((\d|[1-9]\d|2[0-4]\d|25[0-5]|1\d\d)(?:\.(\d|[1-9]\d|2[0-4]\d|25[0-5]|1\d\d)){3})$/', $ip)) {
    return true;
  } else {
    return false;
  }
}
/**
 * 驗證手機號
 */
function checkMobile($mobile)
{
  return preg_match('/^((13[0-9])|(14[5,7])|(15[0-3,5-9])|(17[0,3,5-8])|(18[0-9])|166|198|199|(147))\d{8}$/i', $mobile);
}

更多關于Laravel相關內容感興趣的讀者可查看本站專題:《Laravel框架入門與進階教程》、《php優秀開發框架總結》、《php面向對象程序設計入門教程》、《php+mysql數據庫操作入門教程》及《php常見數據庫操作技巧匯總》

希望本文所述對大家基于Laravel框架的PHP程序設計有所幫助。

您可能感興趣的文章:
  • Laravel使用swoole實現websocket主動消息推送的方法介紹
  • Laravel admin實現消息提醒、播放音頻功能
  • Laravel Validator自定義錯誤返回提示消息并在前端展示
  • Laravel使用消息隊列需要注意的一些問題
  • PHP的Laravel框架中使用消息隊列queue及異步隊列的方法
  • 在Laravel框架里實現發送郵件實例(郵箱驗證)
  • Laravel框架實現發送短信驗證功能代碼
  • 使用 laravel sms 構建短信驗證碼發送校驗功能
  • laravel5.4利用163郵箱發送郵件的步驟詳解
  • laravel中短信發送驗證碼的實現方法
  • 用Laravel Sms實現laravel短信驗證碼的發送的實現
  • laravel框架使用極光推送消息操作示例

標簽:黃南 鎮江 寶雞 婁底 湛江 南陽 宜賓 銅川

巨人網絡通訊聲明:本文標題《laravel框架使用阿里云短信發送消息操作示例》,本文關鍵詞  laravel,框架,使用,阿里,云,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《laravel框架使用阿里云短信發送消息操作示例》相關的同類信息!
  • 本頁收集關于laravel框架使用阿里云短信發送消息操作示例的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    免费xxxx性欧美18vr| 成人网在线免费视频| 美女脱光内衣内裤视频久久影院| 成人做爰69片免费看网站| 亚洲国产精品成人综合色在线婷婷| 日韩国产在线观看一区| 欧美性淫爽ww久久久久无| 亚洲人成在线播放网站岛国| 国产精品资源在线看| 国产午夜亚洲精品不卡| jizz一区二区| 亚洲欧洲精品天堂一级| 成人av资源网站| 亚洲欧美日本韩国| 一本大道久久精品懂色aⅴ| 国产精品免费av| 欧美在线免费视屏| 老司机精品视频线观看86| 国产亚洲精久久久久久| 色综合久久久久久久久久久| 亚洲成a人片在线不卡一二三区| 91麻豆精品国产| 青青青伊人色综合久久| 久久精品夜夜夜夜久久| 色综合中文字幕| 亚洲视频网在线直播| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 一区二区在线观看av| 91精品国产综合久久久久| 狠狠网亚洲精品| 亚洲欧美日韩国产综合| 日韩一区二区影院| 不卡的电影网站| 日本视频在线一区| 18涩涩午夜精品.www| 欧美一卡二卡三卡| 91麻豆精品秘密| 国内精品国产成人国产三级粉色| 玉足女爽爽91| 国产色爱av资源综合区| 欧美老肥妇做.爰bbww| 成人开心网精品视频| 免费在线观看视频一区| 亚洲欧美一区二区三区国产精品| 欧美一级二级在线观看| 欧美性受xxxx| 91在线精品一区二区三区| 麻豆91小视频| 亚洲一区二区三区中文字幕在线| 久久综合成人精品亚洲另类欧美 | 一区在线观看免费| 亚洲精品在线电影| 久久综合九色综合97婷婷| 91网站最新网址| 国产毛片一区二区| 日本不卡一区二区三区| 亚洲精品免费视频| 国产精品人妖ts系列视频| 久久久综合精品| 精品久久久久一区二区国产| 欧美日韩成人综合| 欧美视频精品在线观看| 91麻豆免费看| 欧美怡红院视频| 欧美亚洲国产一区在线观看网站| 91啪在线观看| 91麻豆文化传媒在线观看| 91麻豆视频网站| 欧美视频一区二| 日韩一级片在线观看| 欧美二区在线观看| 在线成人午夜影院| 欧美日本在线视频| 4hu四虎永久在线影院成人| 欧美日韩电影在线播放| 91精品国产免费| 日韩一区二区不卡| 久久看人人爽人人| 亚洲男人的天堂一区二区| 亚洲天天做日日做天天谢日日欢| 亚洲欧美日本在线| 日本三级韩国三级欧美三级| 狠狠色丁香婷婷综合| 国产xxx精品视频大全| 91网站在线播放| 91精品一区二区三区在线观看| 欧美精选一区二区| 欧美不卡一二三| 国产精品久久99| 亚洲高清免费视频| 久久电影网站中文字幕| kk眼镜猥琐国模调教系列一区二区 | 99国产欧美另类久久久精品 | 一本大道久久精品懂色aⅴ| 欧美日韩精品欧美日韩精品| 2024国产精品| 亚洲一区二区三区四区的| 韩国女主播成人在线| 91小视频免费观看| 欧美一级高清片在线观看| 中文字幕一区视频| 美女视频第一区二区三区免费观看网站| 国产真实乱子伦精品视频| 色综合色狠狠综合色| 欧美成人综合网站| 一区二区三区加勒比av| 国产成人免费视频网站高清观看视频| 91精品91久久久中77777| 伊人夜夜躁av伊人久久| 亚洲一区二区偷拍精品| 国产又粗又猛又爽又黄91精品| 91国产福利在线| 久久久av毛片精品| 麻豆一区二区三| 欧美图区在线视频| 国产亚洲欧美色| 天天做天天摸天天爽国产一区 | 成人性生交大片免费看在线播放 | 精品国产免费一区二区三区香蕉| 亚洲黄色小视频| 国产高清视频一区| 欧美电影免费观看高清完整版在线观看 | 一区二区三区日本| 国产激情精品久久久第一区二区| 欧美精品在线观看播放| 亚洲日本电影在线| 国产成人自拍高清视频在线免费播放| 一本大道久久a久久精品综合 | 久久精品一区二区三区不卡| 日韩中文欧美在线| 欧美色视频在线观看| 亚洲品质自拍视频| 91亚洲精品一区二区乱码| 国产亚洲成av人在线观看导航 | 欧美日韩国产免费| 亚洲色图一区二区三区| 成人免费观看av| 久久久久久久综合日本| 国产精品中文字幕欧美| 精品99一区二区三区| 极品少妇xxxx精品少妇| 欧美一级二级三级蜜桃| 久久精品噜噜噜成人88aⅴ| 欧美一区二区视频在线观看2020 | 99九九99九九九视频精品| 久久久久久久久蜜桃| 国产成都精品91一区二区三| 久久免费视频色| 丁香亚洲综合激情啪啪综合| 国产欧美日产一区| 懂色av噜噜一区二区三区av| 中文字幕亚洲一区二区va在线| 成人美女视频在线观看18| 国产精品嫩草影院av蜜臀| 99久久精品国产一区| 亚洲综合区在线| 欧美久久一区二区| 国产老肥熟一区二区三区| 欧美国产欧美亚州国产日韩mv天天看完整| 高清shemale亚洲人妖| 国产精品久久久久久久久果冻传媒| 国产成人综合在线| 一区二区理论电影在线观看| 欧美美女激情18p| 久久不见久久见中文字幕免费| 日本一区二区三区久久久久久久久不 | 91精品在线观看入口| 精品在线播放免费| 国产三级久久久| 91国模大尺度私拍在线视频| 婷婷中文字幕综合| 国产免费观看久久| 在线观看中文字幕不卡| 久久国产剧场电影| 欧美高清在线视频| 91麻豆精品国产91久久久资源速度| 久久66热re国产| 亚洲久本草在线中文字幕| 欧美一区二区国产| 91视频一区二区| 精品一区二区三区视频| 樱花草国产18久久久久| 久久精品一区二区三区不卡| 欧美日韩激情一区二区三区| 成人性生交大片免费看在线播放| 首页亚洲欧美制服丝腿| 中文字幕亚洲成人| 337p日本欧洲亚洲大胆色噜噜| 色香色香欲天天天影视综合网| 另类中文字幕网| 亚洲成av人在线观看| 综合自拍亚洲综合图不卡区| 精品国产一区二区精华| 欧洲精品一区二区| 成人app在线| 国产在线精品不卡| 日韩中文字幕亚洲一区二区va在线| 亚洲精品美国一| 成人免费一区二区三区在线观看| 精品国产91久久久久久久妲己|