123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- <?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,
- 'result' => $this->easySms->gateway($gateway)->send($to, $message, $config),
- ];
- $isSuccessful = true;
- break;
- } catch (\Exception $e) {
- $results[$gateway] = [
- 'gateway' => $gateway,
- 'status' => self::STATUS_FAILURE,
- 'exception' => $e,
- ];
- } catch (\Throwable $e) {
- $results[$gateway] = [
- 'gateway' => $gateway,
- 'status' => self::STATUS_FAILURE,
- 'exception' => $e,
- ];
- }
- }
- if (!$isSuccessful) {
- throw new NoGatewayAvailableException($results);
- }
- return $results;
- }
- }
|