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.
92 lines
2.6 KiB
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;
|
|
}
|
|
}
|
|
|