0

0

0

修罗

站点介绍

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

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

修罗 2020-12-12 2164 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)


最新评论

  • https://www.studyglobus.com/author/carroll34a5552/

    Ценники на вывоз мусора сейчас космос, любые лайфхаки по экономии в тему.

  • Richardgrold

    1xbet onlayn kazino platforması ilə vaxtınızı daha səmərəli və maraqlı keçirin. Saytın canlı kazino bölməsi istifadəçilərə fərqli bir dünya təklif edir. Burada canlı dilerli kazino oyunlarının hər bir növünü sınaqdan keçirə bilərsiniz. Krupyelərin peşəkarlığı oyunun dinamikasını və marağını artırır. Müntəzəm olaraq yenilənən oyun siyahısı cansıxıcılığa yol vermir. Hesabınızı artırmaq üçün onlarla fərqli və etibarlı üsul mövcuddur. Qazanılan pullar cəmi bir neçə dəqiqə ərzində şəxsi hesabınıza köçürülür. Aktiv fəaliyyətinizə görə fərdi bonuslar və hədiyyələr qazana bilərsiniz. Dəstək xidməti həm çat, həm də e-poçt vasitəsilə kömək göstərir. 1xbet ailəsinə qoşulun və böyük uduşlar üçün ilk addımı atın. onlayn kazino

  • 砂岩白丘

    我一直梦想, 看到你们相册那样的地方。真棒。

  • 城市地標

    我喜欢, 这里分享真实经验。你的项目 就是 属于这里的。请继续。

  • 宗教地標

    我热爱这样的想法, 去那么多国家。真的很鼓舞。

  • 觀景高地

    能感受到热爱。继续保持 感受。

  • 最佳季節

    我关注这样的资源, 写得很实在。你的网站 就是 属于这里的。加油。

  • 1

    1

  • 1

    1

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

    1

日历

2026年07月

   1234
567891011
12131415161718
19202122232425
262728293031 

文章目录

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