0

0

0

修罗

站点介绍

只有了解事实才能获得真正的自由

tp6.0使用阿里大于发送短信

修罗 2020-12-12 1949 0条评论 thinkphp5.1

首页 / 正文

tp6.0使用阿里大于发送短信

tp6.0安装阿里大于

composer require alibabacloud/client

站内调试短信接口

https://api.aliyun.com/api/Dysmsapi/2017-05-25/SendSms

点击发起调用即可发送短信

1607719809565.png

signName
https://dysms.console.aliyun.com/domestic/text/sign

1607719713305.png

TemplateCode

1607719745360.png

接收到验证码

1607721479340.png

集成到tp6.0

1、config新建api配置文件

1607721802771.png

return [
  // token失效时间,0代表永不失效
  'token_expire'=>0,
  // 阿里大于
  'aliSMS'=>[
    //开启阿里大于
    'isopen'=> false,
    'accessKeyId'=>'',
    'accessSecret'=>'',
    'regionId'=>'cn-hangzhou',
    'product'=>'Dysmsapi',
    'version'=>'2017-05-25',
    'SignName'=>'',
    'TemplateCode'=>'',
    // 验证码发送时间间隔(60秒)
    'expire'=>60
  ]
];

2、新建类,将阿里大于示例代码放到这个类中

阿里大于实例代码如下

1607721702381.png

我们自己定义类和方法,把阿里大于代码复制过来

1607721724584.png

完整代码如下:

<?php
declare (strict_types = 1);

namespace app\controller;
use AlibabaCloud\Client\AlibabaCloud;
use AlibabaCloud\Client\Exception\ClientException;
use AlibabaCloud\Client\Exception\ServerException;


class AliSMSController {
  static public function sendCode($phone, $code){
    AlibabaCloud::accessKeyClient(config('api.aliSMS.accessKeyId'), config('api.aliSMS.accessSecret'))
    ->regionId(config('api.aliSMS.regionId'))
    ->asDefaultClient();

    try {
      $result = AlibabaCloud::rpc()
      ->product('Dysmsapi')
      // ->scheme('https') // https | http
      ->version('2017-05-25')
      ->action('SendSms')
      ->method('POST')
      ->host('dysmsapi.aliyuncs.com')
      ->options([
        'query' => [
          'RegionId' => config('api.aliSMS.regionId'),
          'PhoneNumbers' => $phone,
          'SignName' => config('api.aliSMS.SignName'),
          'TemplateCode' => config('api.aliSMS.TemplateCode'),
          'TemplateParam' => "{\"code\":$code}",
        ],
      ])
      ->request();
        // 返回结果
        return $result->toArray();
    } catch (ClientException $e) {
        echo $e->getErrorMessage() . PHP_EOL;
    } catch (ServerException $e) {
        echo $e->getErrorMessage() . PHP_EOL;
    }
  }
}

3、模型中定义方法

注意:随你在哪使用,AliSMSController::sendCode($phone, $code)即可发送短信,

// 引入我们定义好的阿里大于发送短信类
use app\controller\AliSMSController;

// 发送验证码
public function sendCode(){
    // 获取用户提交手机号码
    $phone = request()->param('phone');
    // 判断是否已经发送过
    if(Cache::get($phone)) ApiException('你操作得太快了', 30001, 200);
    // 生成4位验证码
    $code = random_int(1000,9999);
    // 判断是否开启验证码功能
    if(!config('api.aliSMS.isopen')){
        Cache::set($phone,$code,config('api.aliSMS.expire'));
        ApiException('验证码:'.$code, 30005, 200);
    }
    // 发送验证码
    $res = AliSMSController::sendCode($phone, $code);
    //发送成功 写入缓存
    if($res['Code']=='OK') return Cache::set($phone,$code,config('api.aliSMS.expire'));
    // 无效号码
    if($res['Code']=='isv.MOBILE_NUMBER_ILLEGAL') ApiException('无效号码', 30002, 200);
    // 触发日限制
    if($res['Code']=='isv.DAY_LIMIT_CONTROL') ApiException('今日你已经发送超过限制,改日再来', 30003, 200);
    // 发送失败
    ApiException('发送失败', 30004, 200);
}

控制器中调用此方法即可,这里M是模型实例

1607721989044.png

结果

1607722392317.png

评论(0)


最新评论

  • 1

    1

  • 1

    1

  • -1' OR 2+158-158-1=0+0+0+1 or 'TKCTZnRa'='

    1

  • 1

    1

  • 1

    1

  • 1

    1

  • 1

    1

  • @@5Qa2D

    1

  • 1

    1

  • 1

    1

日历

2025年09月

 123456
78910111213
14151617181920
21222324252627
282930    

文章目录

推荐关键字: Linux webpack js 算法 MongoDB laravel JAVA jquery javase redis