| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- <?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;
- }
- }
|