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

集成阿里云短信服务

作者: 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