开通阿里云短信服务
登录阿里云进入控制台 产品与服务-->云通讯-->短信服务-->国内消息
- 创建 签名与短信模板
-
创建 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;
}
完成。
网友评论