我们这边先申请了一个短信模板以及签名头,过程省略。
短信的内容是这样的:
短信签名内容:“XX科技”
短信正文内容:{1}为您的登录验证码,请于{2}分钟内填写
短信模板ID:138418
第一步:先集成腾讯云SDK
在项目根目录的composer.json内依赖qcloudsms
"require": {
"qcloudsms/qcloudsms_php": "0.1.*"
}
添加完成之后 composer update 安装
第二步:添加配置信息
我们需要在.env文件中,将我们腾讯云的配置信息输入进去,以便日后配置。
QCLOUD_SMS_APP_ID=0123456789//这里是假滴
QCLOUD_SMS_APP_KEY=3a54d5f0a127b85860baedasdhh8ok//这也是假滴
QCLOUD_SMS_SIGN=XX科技
接着在根目录下的“config”文件夹中,新建一个sms.php的文件,用于取出这些配置项:
//sms.php
<?php
return [
'app_id' => env('QCLOUD_SMS_APP_ID',''),
'app_key' => env('QCLOUD_SMS_APP_KEY',''),
'smsSign' => env('QCLOUD_SMS_SIGN','')
];
第三步:构建一个发送验证码的Service
这里新建一个CodeService.php,详情如下
//CodeService.php
namespace App\Services;
use App\Models\Captcha;
use Qcloud\Sms\SmsSingleSender;
class CodeService
{
protected $smsServer;
protected $sms;
protected $templateId;
public function __construct(){
$this->sms = config('sms');
$this->smsServer = new SmsSingleSender($this->sms['app_id'],$this->sms['app_key']);
$this->templateId = '138418';
}
public function getCode($phone,$code)
{
$result = $this->smsServer->sendWithParam(
'86',
$phone,
$this->templateId,
[$code,30],
$this->sms['smsSign']
);
return json_decode($result, true);
}
}
第四步:写个控制器,绑定路由测试
首先,为了方便/route/api.php里头配置命名空间,我这边把api.php的指向路径改为Controller目录下的Api内。
在app/Providers/RouteServiceProvider内修改,Laravel官方文档内有说。
//文件最下方,在namespace后拼接上\Api,记得转义
protected function mapApiRoutes()
{
Route::prefix('api')
->middleware('api')
->namespace($this->namespace.'\\Api')
->group(base_path('routes/api.php'));
}
创建一个控制器-CaptchasController,调用验证码服务
//CaptchasController.php
<?php
namespace App\Http\Controllers\Api\Other;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Http\Controllers\Api\ApiController;
use App\Http\Requests\CaptchaGetRequest;
use App\Services\CodeService;
class CaptchasController extends ApiController
{
public function getCode(CodeService $codeService,CaptchaGetRequest $request){
$code = mt_rand(0,9999);
$code = str_pad($code,4,0,STR_PAD_RIGHT);
$phone = $request->get('phone');
$result = $codeService->getCode($phone,$code);
if ($result['result'] == 0){
return $this->success(null);
}else{
return $this->failed($result['result']);
}
}
}
最后在api.php中,绑定这个路由即可
//api.php
Route::group(['namespace' => 'Other'], function() {
Route::post('/captchas', 'CaptchasController@getCode');
});
测试一哈:
短信收到,欧几把k,接下来可以做验证码的验证过程了。