林一峰
7 years ago
5 changed files with 153 additions and 4 deletions
-
6app/Common/ReturnData.php
-
40app/Common/Sms.php
-
32app/Http/Model/SmsLog.php
-
1app/Http/Model/UserAddress.php
-
78app/Http/Model/VerifyCode.php
@ -0,0 +1,40 @@ |
|||
<?php |
|||
namespace App\Common; |
|||
|
|||
use App\Http\Model\SmsLog; |
|||
|
|||
class Sms |
|||
{ |
|||
/** |
|||
* 云片接口发送-支持国际短信 |
|||
* |
|||
* @param $text 发送的内容 |
|||
* @param $mobile 要发送到哪个手机号上 |
|||
* @return bool |
|||
*/ |
|||
public static function sendByYp($text, $mobile) |
|||
{ |
|||
// 必要参数
|
|||
$apikey = 'f9c119a3e8a0dc4faee84fdd82cbc60d'; //示例:9b11127a9701975c734b8aee81ee3526,修改为您的apikey(https://www.yunpian.com)登录官网后获取
|
|||
$mobile = $mobile; //手机号
|
|||
$text = $text; |
|||
// 发送短信
|
|||
$ch = curl_init(); |
|||
$data = array('text'=>$text,'apikey'=>$apikey,'mobile'=>$mobile); |
|||
curl_setopt($ch, CURLOPT_URL, 'https://sms.yunpian.com/v2/sms/single_send.json'); |
|||
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); |
|||
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true); |
|||
$result = json_decode(curl_exec($ch),true); |
|||
|
|||
if ($result && $result['code'] != 0) |
|||
{ |
|||
Log::info('短信发送失败:号码:' . $mobile . '; 短信内容:' . $text . '; 错误代码:' . $result['code'] . '; 错误详情:' . $result['msg']); |
|||
SmsLog::fail($mobile, $text, $result); |
|||
|
|||
return false; |
|||
} |
|||
|
|||
SmsLog::success($mobile, $text, $result); |
|||
return true; |
|||
} |
|||
} |
@ -0,0 +1,32 @@ |
|||
<?php |
|||
namespace App\Http\Model; |
|||
|
|||
//短信发送记录
|
|||
class SmsLog extends BaseModel |
|||
{ |
|||
const SUCCESS = 1; |
|||
const FAIL = 2; |
|||
|
|||
protected $table = 'sms_log'; |
|||
public $guarded = []; |
|||
|
|||
public static function success($mobile, $text, $result) |
|||
{ |
|||
self::create([ |
|||
'mobile' => $mobile, |
|||
'text' => $text, |
|||
'status' => self::SUCCESS, |
|||
'result' => json_encode($result) |
|||
]); |
|||
} |
|||
|
|||
public static function fail($mobile, $text, $result) |
|||
{ |
|||
self::create([ |
|||
'mobile' => $mobile, |
|||
'text' => $text, |
|||
'status' => self::FAIL, |
|||
'result' => json_encode($result) |
|||
]); |
|||
} |
|||
} |
@ -0,0 +1,78 @@ |
|||
<?php |
|||
namespace App\Http\Model; |
|||
|
|||
use Log; |
|||
use App\Common\Sms; |
|||
use App\Common\Helper; |
|||
use App\Common\ReturnData; |
|||
|
|||
class VerifyCode extends BaseModel |
|||
{ |
|||
protected $table = 'verify_code'; |
|||
|
|||
const STATUS_UNUSE = 0; |
|||
const STATUS_USE = 1; //验证码已被使用
|
|||
|
|||
const TYPE_GENERAL = 0; //通用
|
|||
const TYPE_REGISTER = 1; //用户注册业务验证码
|
|||
const TYPE_CHANGE_PASSWORD = 2; //密码修改业务验证码
|
|||
const TYPE_MOBILEE_BIND = 3; //手机绑定业务验证码
|
|||
const TYPE_VERIFYCODE_LOGIN = 4; //验证码登录
|
|||
const TYPE_CHANGE_MOBILE = 5; //修改手机号码
|
|||
|
|||
//验证码校验
|
|||
public static function isVerify($mobile, $code, $type) |
|||
{ |
|||
return VerifyCode::Where('code', $code)->where('mobile', $mobile)->where('type', $type)->where('status', VerifyCode::STATUS_UNUSE)->where('expired_at', '>', date('Y-m-d H:i:s'))->first(); |
|||
} |
|||
|
|||
//生成验证码
|
|||
public static function getVerifyCode($mobile,$type,$text='') |
|||
{ |
|||
//验证手机号
|
|||
if (!Helper::isValidMobile($mobile)) |
|||
{ |
|||
return ReturnData::create(ReturnData::MOBILE_FORMAT_FAIL); |
|||
} |
|||
|
|||
switch ($type) |
|||
{ |
|||
case self::TYPE_GENERAL;//通用
|
|||
break; |
|||
case self::TYPE_REGISTER: //用户注册业务验证码
|
|||
break; |
|||
case self::TYPE_CHANGE_PASSWORD: //密码修改业务验证码
|
|||
break; |
|||
case self::TYPE_MOBILEE_BIND: //手机绑定业务验证码
|
|||
break; |
|||
case self::TYPE_VERIFYCODE_LOGIN: //验证码登录
|
|||
break; |
|||
case VerifyCode::TYPE_CHANGE_MOBILE: //修改手机号码
|
|||
break; |
|||
default: |
|||
return ReturnData::create(ReturnData::INVALID_VERIFYCODE); |
|||
} |
|||
|
|||
$verifyCode = new VerifyCode; |
|||
$verifyCode->type = $type; |
|||
$verifyCode->mobile = $mobile; |
|||
$verifyCode->code = rand(1000, 9999); |
|||
$verifyCode->status = self::STATUS_UNUSE; |
|||
//10分钟有效
|
|||
$verifyCode->expired_at = date('Y-m-d H:i:s',(time()+60*20)); |
|||
|
|||
//短信发送验证码
|
|||
if (strpos($verifyCode->mobile, '+') !== false) |
|||
{ |
|||
$text = "【hoo】Your DC verification Code is: {$verifyCode->code}"; |
|||
} |
|||
else |
|||
$text = "【后】您的验证码是{$verifyCode->code},有效期20分钟。"; |
|||
|
|||
Sms::sendByYp($text,$verifyCode->mobile); |
|||
|
|||
$verifyCode->save(); |
|||
|
|||
return ReturnData::create(ReturnData::SUCCESS,array('code' => $verifyCode->code)); |
|||
} |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue