且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

tp5 发送阿里云短信

更新时间:2022-06-07 21:27:42

先在阿里大于短信平台注册,将appid和appsec准备好.

1:下载 sdk包 (https://help.aliyun.com/document_detail/55359.html?spm=5176.8195934.507901.12.2NiZni) ps:我下载的是轻量级的包
tp5 发送阿里云短信
放到 vendor目录下面去

2:新增一个AliSms控制器(我写的是 扩展类 直接放在extend)下面的

3:在控制器引入 包 由于tp5.1*以上 开启了自动加载,这儿你可以使用 require 或者定义命名空间的方式来引入
<?php
/**

  • 阿里云短信发送 模型
    */

namespace lib;
use AliyunDySDKLiteSignatureHelper;
use appcommonmodelWebsiteConfig;
use appcommonmodelSms;
use thinkDb;
class AliSms
{
  public static function sendSms($mobile,$code,$TemplateCode)
  {

    //引入 sdk 文件
    require '../vendor/aliyun-sms/SignatureHelper.php';
    //读取数据库 配置信息
    $config = WebsiteConfig::get(1);

    $accessKeyId = $config['sms_appid'];
    $accessKeySecret = $config['sms_appsecret'];

    //发送短信需要的数据
    $params = [
      'PhoneNumbers' => $mobile,//手机号
      'SignName' => 'xxx',//签名
      'TemplateCode' => $TemplateCode,//模板id
      'TemplateParam' => [//短信模板需要的 变量内容
        'code' => $code
      ]
    ];
try {
      Sms::where('mobile',$mobile)->delete();//将数据库存的 短信信息删除
      Sms::create([//插入本条短信内容
        'code' => $code,
        'mobile' => $mobile,
        'end_time' => time()+900
      ]);
    } catch (Exception $e) {
     return false;
    }
    if(!empty($params["TemplateParam"]) && is_array($params["TemplateParam"])) {
      $params["TemplateParam"] = json_encode($params["TemplateParam"], JSON_UNESCAPED_UNICODE);
    }

    //实例化 速度快、
    $helper = new SignatureHelper();
    try {
      $content = $helper->request(//发送短 这儿的内容不需要更改
        $accessKeyId,
        $accessKeySecret,
        "dysmsapi.aliyuncs.com",
        array_merge($params,[
          "RegionId" => "cn-hangzhou",
          "Action" => "SendSms",
          "Version" => '2017-05-25',
        ])
      );
      return object_array($content);//将对象转为数组 返回
    } catch (Exception $e) {
      return false;
    }
}
/**

  • 验证验证码
  • @return code 0 为验证码不正确 2为验证码已过期 1为验证码正确
    */

  public static function check($mobile,$code)
  {
    $result = Sms::where(['mobile' => $mobile , 'code' => $code] )->find();

    if (empty($result)) {

    return ['code'=>0,'msg'=>'验证码不正确,请检查'];

    }elseif( ($result['end_time']      Sms::where(['mobile' => $mobile , 'code' => $code] )->delete();
      return ['code'=>0,'msg'=>'验证码已过期,请重新获取'];

    }else{

      Sms::where(['mobile' => $mobile , 'code' => $code] )->delete();

      return ['code'=>1,'msg'=>'验证码正确'];

    }
  }
}