Files
xk-api-yii/common/services/SmsService.php

145 lines
5.3 KiB
PHP
Raw Normal View History

2024-09-19 11:32:39 +08:00
<?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);
}
}