欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Laravel5.4中使用阿里大于(鱼)发送短信验证码

程序员文章站 2024-03-20 10:46:34
...

首先,百度【阿里大于】,打开页面注册,登录(阿里云账号密码就可以)

Laravel5.4中使用阿里大于(鱼)发送短信验证码

登录成功,点击控制台

Laravel5.4中使用阿里大于(鱼)发送短信验证码

进入【短信服务】—增加签名–增加模板—增加订阅–点击api文档观看

Laravel5.4中使用阿里大于(鱼)发送短信验证码

API接口文档【如图】

Laravel5.4中使用阿里大于(鱼)发送短信验证码

到此设置结束开始在laravel中进行操作

安装laravel阿里大于(鱼)服务

composer require iscms/alisms-for-laravel

注册服务(config/app.php)

在文件中找到Providers数组,写入

iscms/Alisms/AlidayuServiceProvider::class

生成阿里大于(鱼)配置文件(config文件夹)

php artisan vendor:publish

此时,在config.php中会出现一个阿利大于的配置文件为:alisms.php

<?php
/**
 * 阿里大鱼短信配置
 */
return [
    // 短信应用key
    'app_key' => '******',

    /*
    | 短信应用**
   */
    'app_secret' => '******',

    /*
    | 类型
    */
    'type' => 'normal',
    // 扩展
    'extend' => '',

    /*
    | 短信签名
    */
    'sign_name' => 'summer', //阿塞布
    /*
    | 短信模板
    */
    'template' => [
        'verify' => 'SMS_47470198',
    ]
];

**在生成的依赖包中:如果想引用的话:记得配置好,否则app_key和secretKey找不到

Laravel5.4中使用阿里大于(鱼)发送短信验证码

新建一个控制器,在其中这样写来发短信:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
/*调用短信*/
use iscms\Alisms\SendsmsPusher as Sms;
//laravel中的session的过期时间在config.php--session.php 默认进行了设置;所以使用redis进行存储
use Illuminate\Support\Facades\Redis;

class HomeController extends Controller
{
   /*初始化 得到appkey+secretKey */
    public function __construct(Sms $sms)
    {
        $this->sms=$sms;   //得到在SendSmsPusher.php中的所有配置信息

    }

    public function Alidayu(Request $request)
    {
        //第一步:引入配置文件,得到需要的预先设置好的参数
        $smsconf = config('alisms');

        $mobile = '18335108888'; // 用户手机号,接收验证码

        $name = $smsconf['sign_name'];  // 短信签名,可以在阿里大鱼的管理中心看到
        $num = rand(100000, 999999); // 生成随机验证码 **键值和之前设定的短信模板变量保持一致
        $smsParams = [
            'verify_code' => "$num"
        ];
        $content = json_encode($smsParams); // 转换成json格式的
        $code = $smsconf['template']['verify'];   // 阿里大于(鱼)短信模板ID
        $interval = 300;

        Redis::set($mobile, json_encode([
            'captcha' => $code,
            'expire' => time() + $interval
        ]));

        $result = $this->sms->send($mobile, $name, $content, $code);

        //property_exists — 检查对象或类是否具有该属性
        if (property_exists($result, "code") && $result->code > 0) {
            return response()->json(['status'=>201, 'error'=>$result->msg]);
        }else{
            return response()->json(['status'=>200, 'error'=>'短信发送成功']);

        }

    }

    /*验证填写的验证码和给该手机发送的验证码是否匹配*/
    public function verify(Request $req)
    {
        //第一步:接收到手机号+验证码
        $mobile = $req->input('mobile');
        $captcha =$req->input('captcha');

        // 检查验证码
        $redisCaptcha = json_decode(Redis::get($mobile), true);
        $now = time();

        if ($redisCaptcha['expire'] < $now) {
            Redis::del($mobile);
            return response()->json(['status' => 204, 'error' => '验证码过期']);
        }

        if ($redisCaptcha['captcha'] != $captcha) {
            return response()->json(['status' => 201, 'error' => '验证码错误']);
        }


        return response()->json(['status'=>200, 'error'=>'输入的验证码和发送的验证码一致']);
    }
}
*****************控制器所写方法的打印结果展示****************************************
打印构造函数中的$sms
结果如下:

iscms\Alisms\SendsmsPusher Object
(
    [TopClient:iscms\Alisms\SendsmsPusher:private] => iscms\AlismsSdk\TopClient Object
        (
            [appkey] => 23639393
            [secretKey] => 273f3cc8ffbd47f269e35a42c872f54a
            [gatewayUrl] => http://gw.api.taobao.com/router/rest
            [format] => json
            [connectTimeout] => 
            [readTimeout] => 
            [checkRequest] => 1
            [signMethod:protected] => md5
            [apiVersion:protected] => 2.0
            [sdkVersion:protected] => top-sdk-php-20151012
            [simplify] => 1
        )

    [name:iscms\Alisms\SendsmsPusher:private] => 
    [content:iscms\Alisms\SendsmsPusher:private] => 
    [phone:iscms\Alisms\SendsmsPusher:private] => 
    [code:iscms\Alisms\SendsmsPusher:private] => 
)



打印返回值$result

A。发送短信成功时,返回的对象信息

stdClass Object
(
    [result] => stdClass Object
        (
            [err_code] => 0
            [model] => 513811803394124578^0
            [msg] => *
            [success] => 1
        )

    [request_id] => 43ebsfmfind5
)

B。发送短信失败时,返回的对象信息

stdClass Object
(
    [code] => 28
    [msg] => Missing app key
    [request_id] => 2fpg7qvs6r7l
)
参数说明:

$phone 手机号,用户输入的手机号
$name  短信签名,阿里大鱼申请的短信签名的名字
$content 替换短信模板中的变量,JSON字符串格式,所有值都是字符串,不能有整形
$code   阿里大鱼申请的短信模ID:SMS_39***4

阿里大于(鱼)短信模板(http://www.alidayu.com/)
模板名称: 身份验证
 模板ID: SMS_39***4
 *模板内容:验证码${code},您正在进行个人身份验证,打死不要告诉别人哦!
那么里面存在着变量${code}需要替换成验证码,那么对应的$content 就应该为{code:"生成的验证码"} 
e.g {code:'123456'}
相关标签: laravel5-4