准备工作
a)申请荣联-云通讯的企业资质账号
https://www.yuntongxun.com/member/main
b)导入荣联-云通讯SDK到laravel项目中
c)这里只放模板代码,短信sdk这个就不贴代码了,需要自己到官网下载对应的sdk
d)下载的模板代码有根据laravel框架改动加入命名空间和类名方便调用
<?php
namespace App\SDK;
use App\Models\M3Result;
use App\SDK\SmsSDK;
class SendTemplateSMS
{
//主帐号
private $accountSid = '***';
//主帐号Token
private $accountToken = '***';
//应用Id
private $appId = '***';
//请求地址,格式如下,不需要写https://
private $serverIP = 'app.cloopen.com';
//请求端口
private $serverPort = '8883';
//REST版本号
private $softVersion = '2013-12-26';
/**
* 发送模板短信
* @param to 手机号码集合,用英文逗号分开
* @param datas 内容数据 格式为数组 例如:array('Marry','Alon'),如不需替换请填 null
* @param $tempId 模板Id
*/
function sendTemplateSMS($to, $datas, $tempId)
{
$m3_result = new M3Result;
// 初始化REST SDK
$rest = new SmsSDK($this->serverIP, $this->serverPort, $this->softVersion);
$rest->setAccount($this->accountSid,$this->accountToken);
$rest->setAppId($this->appId);
// 发送模板短信
$result = $rest->sendTemplateSMS($to,$datas,$tempId);
if($result == NULL ) {
$m3_result->status = 3;
$m3_result->message = 'result error!';
}
if($result->statusCode != 0) {
$m3_result->status = $result->statusCode;
$m3_result->message = $result->statusMsg;
}else{
$m3_result->status = 0;
$m3_result->message = '发送成功';
}
return $m3_result;
}
}
定义消息返回json格式
<?php
namespace App\Models;
class M3Result
{
public $status;
public $message;
public function toJson()
{
return json_encode($this,JSON_UNESCAPED_UNICODE);
}
}
定义处理消息发送逻辑控制器
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use App\Models\M3Result;
use App\SDK\SendTemplateSMS;
use Illuminate\Http\Request;
use App\Models\Tempphone;
class SmsController extends Controller
{
public function sendSMS(Request $request)
{
$m3_result = new M3Result();
$phone = $request->input('phone', '18814113478');
if ($phone == '') {
$m3_result->status = 1;
$m3_result->message = '手机号不能为空';
return $m3_result->toJson();
}
$send_template_sms = new SendTemplateSMS();
//自定义短信验证码的格式--6位数字
$code = '';
$charset = '123456789';
$_len = strlen($charset)-1;
for ($i = 0; $i < 6; $i++) {
$code .= $charset[mt_rand(0, $_len)];
}
$m3_result = $send_template_sms->sendTemplateSMS($phone, array($code, 60), 1);
if ($m3_result->status == 0) {
$m3_result->message = '信息发送成功';
$temp_phone = new Tempphone();
$temp_phone->phone = $phone;//电话号码
$temp_phone->code = $code;//验证码
$temp_phone->deadine = date('Y-m-d H:i:s', time() + 60 * 60);//验证码:当前时间+1小时
$temp_phone->save();
}
return $m3_result->toJson();
}
}
创建存储发送短信过期时间数据表
CREATE TABLE `tempphone` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`phone` char(11) COLLATE utf8_unicode_ci DEFAULT '' COMMENT '手机号',
`code` varchar(7) COLLATE utf8_unicode_ci DEFAULT '' COMMENT '验证码',
`deadine` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
对应模型定义
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Tempphone extends Model
{
protected $table = 'tempphone';
protected $primaryKey = 'id';
public $timestamps = false;
}
定义请求路由
Route::any('registerPage', ['uses'=>'SmsController@sendSMS']);