catchAdmin/catch/sms/Sms.php

226 lines
4.9 KiB
PHP
Raw Normal View History

2020-09-17 15:17:22 +08:00
<?php
// +----------------------------------------------------------------------
// | CatchAdmin [Just Like ]
// +----------------------------------------------------------------------
// | Copyright (c) 2017~2020 http://catchadmin.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( https://github.com/yanwenwu/catch-admin/blob/master/LICENSE.txt )
// +----------------------------------------------------------------------
// | Author: JaguarJack [ njphper@gmail.com ]
// +----------------------------------------------------------------------
namespace catchAdmin\sms;
2020-09-17 21:14:00 +08:00
use catchAdmin\sms\model\SmsConfig;
use catcher\exceptions\FailedException;
use Overtrue\EasySms\EasySms;
use think\helper\Str;
2020-09-17 15:17:22 +08:00
class Sms
{
2020-09-17 21:14:00 +08:00
/**
* timeout http 请求时间
*
* @var int
*/
protected $timeout = 5;
/**
* 错误日志
*
* @var string
*/
protected $errorLog;
/**
* 网关
*
* @var array
*/
protected $gateways = [];
/**
* 配置
*
* @var array
*/
protected $config = [];
/**
* 发送数据
*
* @var array
*/
protected $sendData = [];
/**
* Sms constructor.
* @param $config
*/
public function __construct(array $config)
{
$config['timeout'] = $this->timeout;
$config['gateways']['errorlog'] = runtime_path('log') . 'sms.log';
$this->config = $config;
}
/**
* 发送
*
* @time 2020年09月17日
* @param string $phone
* @param array $data
* @return mixed
* @throws \Overtrue\EasySms\Exceptions\NoGatewayAvailableException
* @throws \Overtrue\EasySms\Exceptions\InvalidArgumentException
*/
public function send(string $phone, array $data)
{
try {
$this->sendData['data'] = $data;
return $this->easySms()
->send($phone, $this->sendData);
} catch (\Exception $exception) {
throw new FailedException($exception->getMessage());
}
}
/**
* easy sms
*
* @time 2020年09月17日
* @return EasySms
*/
public function easySms()
{
return new EasySms($this->config);
}
/**
* 内容
*
* @time 2020年09月17日
* @param $content
* @param string $key
* @return $this
*/
public function content($content, $key = 'content')
{
$this->sendData[$key] = $content;
return $this;
}
/**
* 模版
*
* @time 2020年09月17日
* @param $template
* @param string $key
* @return $this
*/
public function template($template, $key = 'template')
{
$this->sendData[$key] = $template;
return $this;
}
/**
* 超时间时间 s
*
* @time 2020年09月17日
* @param int $timeout
* @return $this
*/
public function timeout(int $timeout)
{
$this->config['timeout'] = $timeout;
return $this;
}
/**
* 记录记录地址
*
* @time 2020年09月17日
* @param string $log
* @return $this
*/
public function errorLog(string $log)
{
$this->config['gateways']['errorlog'] = $log;
return $this;
}
/**
* gateways config
*
* @time 2020年09月17日
* @param $gateways
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
* @return array
*/
protected static function getGatewaysConfig($gateways)
{
$gatewaysConfig = [];
$smsConfig = new SmsConfig();
foreach ($gateways as $gate) {
$c = $smsConfig->findByName($gate);
if ($c) {
$c->hasConfig()
->select()
->each(function ($item) use (&$gatewaysConfig, $gate){
$gatewaysConfig[$gate][$item['key']] = $item['value'];
});
}
}
return $gatewaysConfig;
}
/**
* sms
*
* @time 2020年09月17日
* @param $method
* @param $arg
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\DbException
* @throws \think\db\exception\ModelNotFoundException
* @return Sms
*/
public static function __callStatic($method, $arg)
{
$gateways = Str::snake($method);
if (Str::contains($gateways, '_')) {
$gateways = explode('_', $gateways);
} else {
$gateways = [$gateways];
}
$config = [
'default' => [
'gateways' => $gateways,
],
'gateways' => static::getGatewaysConfig($gateways)
];
2020-09-17 15:17:22 +08:00
2020-09-17 21:14:00 +08:00
return new self($config);
}
2020-09-17 15:17:22 +08:00
}