接入阿里云短信接口

1 方式1-独立包

以thinkphp5为例

1.1 下载包

链接:https://pan.baidu.com/s/1qzESG1-J6OzlIXfbByVbyQ
提取码:k477

1.2 引入

在这里插入图片描述
1.使用前要确保

  1. 有阿里云账号
  2. 在阿里云上开通短信服务,给账号充值就行。按短信量自动扣费
  3. 创建子账户AccessKeyId和AccessKeySecret(只在创建时显示),同时,要赋予权限。在不使用时,直接删除子账号。

2.把解压后的alisms放于extend中,同时,可以在extend中创建SmsCode类封装发送短信的方法

use Aliyun\Core\Config;
use Aliyun\Core\Profile\DefaultProfile;
use Aliyun\Core\DefaultAcsClient;
use Aliyun\Api\Sms\Request\V20170525\SendSmsRequest;

class SmsCode
{
    function send_sms($to, $model, $code)
    {
        require_once '../extend/alisms/vendor/autoload.php';
        Config::load(); //加载区域结点配置
        $config = '根据你的实际情况读取配置文件或读取数据库,本项目是将配置写入数据库实现';
        $accessKeyId = '你自己的';
        $accessKeySecret = '你自己的';
        $templateParam = $code; //验证码,注意传过来的需要是数组如  { ‘code’=> '123456' }
        //短信签名
        $signName = '你的签名名称';
        //短信模板ID
        switch ($model) {
            case 1:
                $templateCode = '你的模板'; // 注册登录短信验证码模板
                break;
            case 2:
            //你可能有多个模板,所以
                $templateCode = $config['model_code_reset']; // 重置密码短信验证码模板
                break;
        }
        //短信API产品名(短信产品名固定,无需修改)
        $product = "Dysmsapi";
        //短信API产品域名(接口地址固定,无需修改)
        $domain = "dysmsapi.aliyuncs.com";
        //暂时不支持多Region(目前仅支持cn-hangzhou请勿修改)
        $region = "cn-hangzhou";
        // 初始化用户Profile实例
        $profile = DefaultProfile::getProfile($region, $accessKeyId, $accessKeySecret);
        // 增加服务结点
        DefaultProfile::addEndpoint("cn-hangzhou", "cn-hangzhou", $product, $domain);
        // 初始化AcsClient用于发起请求
        $acsClient = new DefaultAcsClient($profile);
        // 初始化SendSmsRequest实例用于设置发送短信的参数
        $request = new SendSmsRequest();
        // 必填,设置雉短信接收号码
        $request->setPhoneNumbers($to);
        // 必填,设置签名名称
        $request->setSignName($signName);
        // 必填,设置模板CODE
        $request->setTemplateCode($templateCode);
        // 可选,设置模板参数
        if ($templateParam) {
            dump(json_encode($templateParam));
            $request->setTemplateParam(json_encode($templateParam));
        }
        //发起访问请求
        $acsResponse = $acsClient->getAcsResponse($request);
        //返回请求结果
        $result = json_decode(json_encode($acsResponse), true);
        // 具体返回值参考文档:https://help.aliyun.com/document_detail/55451.html?spm=a2c4g.11186623.6.563.YSe8FK
        return $result;
    }
}

3.使用实例

namespace app\index\controller;

use think\Controller;

class Sendcode extends Controller
{
    public function send()
    {
        //一定得是数组形式,json编码时针对值;数组形式才能让其带有标识
        $code =array('code'=>rand(100000, 999999));
        $phone = '电话';
        $dx = new \SmsCode();
        //第一个参数电话,第二个参数判断使用那种短信模板,第三个参数数组形式验证码,因为阿里云模板中设定了验证码参数
        $result = $dx->send_sms($phone, 1, $code);
        dump($result);
    }
}

4.结果
在这里插入图片描述

1.3 注意

1.代码注意在这里插入图片描述
这里老是错误呢!!

2.普及

  1. extend是放置自定义或者其他类文件的(由此就可能没有命名空间)。
  2. vendor目录是放置composer类库文件的。
  3. 实现不用命名空间来加载第三方的类!
    我们将类文件放到extend目录下,在控制器中要用到类的话可以通过import(),函数手动引入类文件,引入方法官方手册中有说明。
// 引入 extend/qrcode.php
Loader::import('qrcode', EXTEND_PATH);
// 助手函数
import('qrcode', EXTEND_PATH);
// 引入 extend/wechat-sdk/wechat.class.php
Loader::import('wechat-sdk.wechat', EXTEND_PATH,'.class.php');
// 助手函数
import('wechat-sdk.wechat', EXTEND_PATH,'.class.php');
  1. 手动引入了类文件后,进行实例化需要特别注意了!
    我们需要在 new 类文件()时,在类文件前面加一个 “ \ ” ,即如下:
    $obj = new \Test();
    加 ‘\’ 的原因是: tp5的命名空间自动加载规则:自动加载的实现由
    think\Loader类库完成,自动加载规范符合PHP的。
  2. 根据对规则的了解,放在extend目录下 没有定义命名空间的类文件,就是全局化的类 。实例化全局化的类的话,即用""放在类名前表示此类是全局类,就new一个全局化的类!
  3. vender()默认的文件夹是vender

2 方式2-composer

2.1 引入

composer require alibabacloud/sdk

2.2 使用

use AlibabaCloud\Client\AlibabaCloud;
use AlibabaCloud\Client\Exception\ClientException;
use AlibabaCloud\Client\Exception\ServerException;
class SendSms
{
    /**
     * 发送短信验证码
     */
     //config要传入accessKeyId和accessSecret和SignName和TemplateCode
    public function sendCode($config,$phone,$code)
    {
    //这里传验证码,注意,此处帮我们组成数组了,所以,只穿码就行
        $param = [
            'code' => $code
        ];
        //accessKeyId和accessSecret是阿里云上创建子账户
        //regionId是地区编号,如值:cn-hangzhou
        AlibabaCloud::accessKeyClient($config['accessKeyId'], $config['accessSecret'])
            ->regionId($config['regionId'])
            ->asGlobalClient();

        try {
            $result = AlibabaCloud::rpcRequest()
                ->product('Dysmsapi')
                ->version('2017-05-25')
                ->action('SendSms')
                ->method('POST')
                ->options([
                    'query' => [
                        'PhoneNumbers' => $phone,
                        'SignName' => $config['SignName'],
                        'TemplateCode' => $config['TemplateCode'],
                        'TemplateParam' => json_encode($param)
                    ],
                ])
                ->request();
            return $result->toArray();
        } catch (ClientException $e) {
            echo $e->getErrorMessage() . PHP_EOL;
        } catch (ServerException $e) {
            echo $e->getErrorMessage() . PHP_EOL;
        }
    }
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值