You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
yanzong/vendor/overtrue/easy-sms/src/Messenger.php

92 lines
2.6 KiB

<?php
/*
* This file is part of the overtrue/easy-sms.
*
* (c) overtrue <i@overtrue.me>
*
* This source file is subject to the MIT license that is bundled
* with this source code in the file LICENSE.
*/
namespace Overtrue\EasySms;
use Overtrue\EasySms\Contracts\MessageInterface;
use Overtrue\EasySms\Contracts\PhoneNumberInterface;
use Overtrue\EasySms\Exceptions\NoGatewayAvailableException;
/**
* Class Messenger.
*/
class Messenger
{
const STATUS_SUCCESS = 'success';
const STATUS_FAILURE = 'failure';
/**
* @var \Overtrue\EasySms\EasySms
*/
protected $easySms;
/**
* Messenger constructor.
*
* @param \Overtrue\EasySms\EasySms $easySms
*/
public function __construct(EasySms $easySms)
{
$this->easySms = $easySms;
}
/**
* Send a message.
*
* @param \Overtrue\EasySms\Contracts\PhoneNumberInterface $to
* @param \Overtrue\EasySms\Contracts\MessageInterface $message
* @param array $gateways
*
* @return array
*
* @throws \Overtrue\EasySms\Exceptions\NoGatewayAvailableException
*/
public function send(PhoneNumberInterface $to, MessageInterface $message, array $gateways = [])
{
$results = [];
$isSuccessful = false;
foreach ($gateways as $gateway => $config) {
try {
$results[$gateway] = [
'gateway' => $gateway,
'status' => self::STATUS_SUCCESS,
'template' => $message->getTemplate($this->easySms->gateway($gateway)),
'result' => $this->easySms->gateway($gateway)->send($to, $message, $config),
];
$isSuccessful = true;
break;
} catch (\Exception $e) {
$results[$gateway] = [
'gateway' => $gateway,
'status' => self::STATUS_FAILURE,
'template' => $message->getTemplate($this->easySms->gateway($gateway)),
'exception' => $e,
];
} catch (\Throwable $e) {
$results[$gateway] = [
'gateway' => $gateway,
'status' => self::STATUS_FAILURE,
'template' => $message->getTemplate($this->easySms->gateway($gateway)),
'exception' => $e,
];
}
}
if (!$isSuccessful) {
throw new NoGatewayAvailableException($results);
}
return $results;
}
}