Уведомление 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);
}
}