Files
xk-api-yii/common/services/SmsService.php
2024-09-19 11:32:39 +08:00

145 lines
5.3 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
namespace common\services;
use common\core\sms\CaptchaMessage;
use common\core\sms\PrescriptionPassMessage;
use common\core\sms\PrescriptionRefuseMessage;
use common\core\sms\RegisterMessage;
use common\core\sms\WaitApprovalMessage;
use GuzzleHttp\Exception\ClientException;
use Overtrue\EasySms\EasySms;
use Overtrue\EasySms\Exceptions\GatewayErrorException;
use Overtrue\EasySms\Exceptions\NoGatewayAvailableException;
class SmsService
{
public function __construct()
{
$this->sms = [
"status" => "1", //是否开启
"access_key_id" => "LTAI5tSePVz6X1EXi6tBHzVg",
"access_key_secret" => "ppd5xa2o8b9oKalOiUqQFnYLYq4xlX",
"sign_name" => "萧康医药", //签名
"captcha" => [ //验证码格式设置
//'template_code' => 'SMS_274460204', // 模板code
"template_id" => "SMS_275060336", // 模板id
"template_variable" => "code", //模板变量
],
"doctor" => [
"register" => [ //挂号订单提醒
"template_id" => "SMS_462205458",
"template_variable" => ""
],
"prescription_pass" => [
"template_id" => "SMS_462260412",
"template_variable" => "order"
],
"prescription_refuse" => [
"template_id" => "SMS_462230433",
"template_variable" => [
"order",
"cause"
]
]
],
"pharmacist" => [
"wait_approval" => [
"template_id" => "SMS_462255406",
"template_variable" => ""
]
]
];
$this->config = [
// HTTP 请求的超时时间(秒)
'timeout' => 5.0,
// 默认发送配置
'default' => [
// 网关调用策略,默认:顺序调用
'strategy' => \Overtrue\EasySms\Strategies\OrderStrategy::class,
// 默认可用的发送网关
'gateways' => [
'aliyun',
],
],
// 可用的网关配置
'gateways' => [
'errorlog' => [
'file' => '/tmp/easy-sms.log',
],
'aliyun' => [
'access_key_id' => $this->sms['access_key_id'],
'access_key_secret' => $this->sms['access_key_secret'],
'sign_name' => $this->sms['sign_name'],
],
],
];
$this->easySms = new EasySms($this->config);
}
public function send($mobile, $message)
{
try {
$this->easySms->send($mobile, $message);
return true;
} catch (NoGatewayAvailableException $exception) {
$es = $exception->getExceptions();
foreach ($es as $e) {
/** @var GatewayErrorException $e */
if (isset($e->raw) && isset($e->raw['Code']) && $e->raw['Code'] == 'isv.MOBILE_NUMBER_ILLEGAL') {
throw new GatewayErrorException("无效的号码 {$mobile}", $e->getCode(), $e->raw);
}
if ($e instanceof ClientException) {
$result = json_decode($e->getResponse()->getBody()->getContents(), true);
if ($result && is_array($result) && isset($result['Message']) && isset($result['Code'])) {
if ($result['Code'] == 'InvalidAccessKeyId.NotFound') {
throw new GatewayErrorException("无效的AccessKeyId", $e->getCode(), $result);
}
if ($result['Code'] == 'SignatureDoesNotMatch') {
throw new GatewayErrorException(
"Signature不匹配请检查AccessKeySecret是否正确",
$e->getCode(),
$result
);
}
throw new GatewayErrorException($result['Message'], $e->getCode(), $result);
}
}
throw $e;
}
}
}
public function sendCaptcha($mobile, $captcha)
{
// $captcha = (string)mt_rand(100000, 999999);
$message = new CaptchaMessage($captcha, $this->sms['captcha']);
return $this->send($mobile, $message);
}
public function sendRegister($mobile){
$message = new RegisterMessage($this->sms['doctor']['register']);
return $this->send($mobile, $message);
}
public function sendWaitApproval($mobile){
$message = new WaitApprovalMessage($this->sms['pharmacist']['wait_approval']);
return $this->send($mobile, $message);
}
public function sendPrescriptionPass($mobile,$prescription_no){
$message = new PrescriptionPassMessage($prescription_no, $this->sms['doctor']['prescription_pass']);
return $this->send($mobile, $message);
}
public function sendPrescriptionRefuse($mobile,$prescription){
$message = new PrescriptionRefuseMessage($prescription,$this->sms['doctor']['prescription_refuse']);
return $this->send($mobile, $message);
}
}