Уведомление Laravel о работе Vonage try/catch не входит в оператор catch

Я пытаюсь отловить ошибки Vonage API в моем файле задания Laravel, чтобы определить, следует ли вычитать кредиты из учетной записи пользователя.

Моя работа состоит из функции, называемойattemptSend. Когда я регистрирую до и после, я вижу, что попытка сообщения, первый и второй журналы все регистрируются, но не сообщение не удалось, несмотря на то, что Laravel создал и зарегистрировал исключение.

Что мне здесь не хватает, чтобы поймать это?

Вот мой рабочий файл:

      <?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Notification;
use Illuminate\Support\Facades\Log;
use App\Notifications\Messages\SendMessageViaVonageEngine;
use App\Models\User;
use App\Models\Message;
use App\Models\Sanctum\PersonalAccessToken;
use Carbon\Carbon;

class ProcessMessage implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    /**
     * The number of times the job may be attempted.
     *
     * @var int
     */
    public $tries = 1;

    /**
     * The message id
     */
    protected $messageId;

    /**
     * The user id
     */
    protected $userId;

    /**
     * The API key's UUID.
     */
    protected $apiKeyUuid;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct($messageId, $userId, $apiKeyUuid)
    {
        $this->messageId = $messageId;
        $this->userId = $userId;
        $this->apiKeyUuid = $apiKeyUuid;
    }

    /**
     * Get API key
     */
    public function getApiKey()
    {
        return PersonalAccessToken::where('tokenable_id', $this->userId)
                                  ->where('uuid', $this->apiKeyUuid)
                                  ->withSum('credit_transactions AS credit_balance', 'delta')
                                  ->first();
    }

    /**
     * Get the message
     */
    public function getMessage()
    {
        return Message::where('id', $this->messageId)
                      ->where('user_id', $this->userId)
                      ->first();
    }

    /**
     * Update message status
     */
    public function updateMessageStatus($message, $status = 'sending', $reason = null)
    {
        $message->status = $status;

        // set reason
        if ($reason) {
            $message->reason = $reason;
        }

        // mark the sent_at date
        if (!$message->sent_at && $status == 'sending') {
            $message->sent_at = Carbon::now();
        }

        $message->save();
    }

    /**
     * Attempt to send
     */
    public function attemptSend($message)
    {
        Log::debug('MESSAGE:ATTEMPT');
        try {
            Log::debug('MESSAGE:SUCCESS-FIRST');
            $sent = Notification::route('vonage', $message->send_to)
                                ->notify(new SendMessageViaVonageEngine($message));
            Log::debug('MESSAGE:SUCCESS-SECOND', [
                'sent' => $sent
            ]);
        } catch (\Exception $e) {
            Log::debug('MESSAGE:FAILED');
            throw new \Exception($e->getMessage());
        }
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        $apiKey = $this->getApiKey();
        $message = $this->getMessage();

        if (! $message) {
            throw new \Exception("Message can't be found, was it deleted? Unable to send message.");
            return;
        }

        if (! $apiKey) {
            $this->updateMessageStatus($message, 'dead', "API key not found");
            throw new \Exception("API key can't be found, was it deleted? Unable to send message.");
            return;
        }

        if (! $apiKey->credit_balance || $apiKey->credit_balance <= 0) {
            $this->updateMessageStatus($message, 'dead', "Insufficient credits");
            throw new \Exception("API key: $apiKey->uuid has run out of credits. Unable to send message.");
            return;
        }

        $this->updateMessageStatus($message, 'sending', "Attempting to send");
        $this->attemptSend($message);
    }
}

0 ответов

Другие вопросы по тегам