美文网首页
集成阿里云短信服务

集成阿里云短信服务

作者: IT513 | 来源:发表于2019-03-24 00:15 被阅读0次

    开通阿里云短信服务

    登录阿里云进入控制台 产品与服务-->云通讯-->短信服务-->国内消息

    • 创建 签名与短信模板
    输入图片说明
    • 创建 AccessKey


      输入图片说明

    我这里使用子账号 创建专门把短信服务授权给该账号


    输入图片说明 输入图片说明

    创建完成后需要等待审核通过。

    集成到Lumen 框架

    官方PHP SKD Github : https://github.com/aliyun/openapi-sdk-php-client

    安装与使用

    • 安装
    composer require alibabacloud/client
    
    • 封装在类库
      在Libs 目录下 新建 Sms\AliyunSms.php 代码如下
    
    <?php
    
    namespace App\Libs\Sms;
    
    //阿里短信
    use AlibabaCloud\Client\AlibabaCloud;
    use AlibabaCloud\Client\Exception\ClientException;
    use AlibabaCloud\Client\Exception\ServerException;
    
    
    class AliyunSms
    {
    
        //阿里云accesskeys 授权
        private $AccessKey;     //AccessKeyID
        private $AccessKeySecret;   //AccessKeySecret
        private $SignName;  //短信签名
    
    
        /**
         * AliyunSms constructor.
         * @param array|null $config
         */
        public function __construct(Array $config = null)
        {
    
            //此处需要替换成自己的AK信息
            if ($config) {
                $this->AccessKey = $config['AccessKey'];
                $this->AccessKeySecret = $config['AccessKeySecret'];
                $this->SignName = $config['SignName'];
            } else {
                $this->AccessKey = env('ALIYUN_ACCESSKEY');
                $this->AccessKeySecret = env('ALIYUN_ACCESSKEYSECRET');
                $this->SignName = env('ALIYUN_SMS_SIGNNAME');
            }
    
        }
    
    
        /**
         *  发送短信验证码
         * @param $mobile
         * @param $code
         * @param $templateCode
         * @return string
         * @throws ClientException
         */
        public function sendCode($mobile,$code,$templateCode){
    
            AlibabaCloud::accessKeyClient($this->AccessKey,  $this->AccessKeySecret)
                ->regionId('cn-hangzhou') // replace regionId as you need
                ->asGlobalClient();
            try {
                $result = AlibabaCloud::rpcRequest()
                    ->product('Dysmsapi')
                    // ->scheme('https') // https | http
                    ->version('2017-05-25')
                    ->action('SendSms')
                    ->method('POST')
                    ->options([
                        'query' => [
                            'SignName' => $this->SignName,
                            'PhoneNumbers' => $mobile,
                            'TemplateCode' => $templateCode,
                            'TemplateParam'=>'{"code":"'.$code.'"}'
                        ],
                    ])
                    ->request()->toArray();
    
                //返回字符串 ok 则发送成功
                return $result['Message'];
    
            } catch (ClientException $e) {
                return $e->getErrorMessage() . PHP_EOL;
            } catch (ServerException $e) {
                return $e->getErrorMessage() . PHP_EOL;
            }
    
        }
    
    }
    
    

    在配置文件 .env 中加入阿里云的配置

    
    # 阿里云配置
    ALIYUN_ACCESSKEY = xxxxxxxxx
    ALIYUN_ACCESSKEYSECRET = xxxxxxxxxxxxxxxxxxxx
    ALIYUN_SMS_SIGNNAME = xxxx
    
    
    • 把短信验证码功能添加为lumen服务提供者

    创建文件 app\Providers\SmsServiceProvider.php 内容如下

    <?php
    
    namespace App\Providers;
    
    use Illuminate\Support\ServiceProvider;
    use App\Libs\Sms;
    
    class SmsServiceProvider extends ServiceProvider
    {
        /**
         * Register any application services.
         *
         * @return void
         */
        public function register()
        {
            //注册单例服务
            $this->app->singleton('Sms\AliyunSms', function() {
                return new Sms\AliyunSms();
            });
        }
    
        /**
         * Boot the authentication services for the application.
         *
         * @return void
         */
        public function boot()
        {
    
        }
    }
    
    
    
    

    在控制器里面调用(不用引用类库 use App\Libs\Sms,已经注册为服务提供者):
    直接调用 App('Sms\AliyunSms')

    
    $sms =  App('Sms\AliyunSms');
    $sendStr = $sms->sendCode('手机号码','验证码','阿里云短信模板code');
    
    //注意为大写字母 OK
    if($sendStr == 'OK'){
        echo '发送成功';
    } else {
        echo $sendStr;
    }
            
    
    
    

    完成。

    相关文章

      网友评论

          本文标题:集成阿里云短信服务

          本文链接:https://www.haomeiwen.com/subject/nlqyvqtx.html