Spamworldpro Mini Shell
Spamworldpro


Server : Apache
System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64
User : corals ( 1002)
PHP Version : 7.4.33
Disable Function : exec,passthru,shell_exec,system
Directory :  /home/corals/job-board.corals.io/Corals/modules/SMS/Jobs/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Current File : /home/corals/job-board.corals.io/Corals/modules/SMS/Jobs/HandleSMSDelivery.php
<?php

namespace Corals\Modules\SMS\Jobs;

use Corals\Modules\SMS\Models\Message;
use Corals\Modules\Utility\Models\Webhook\Webhook;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Arr;

class HandleSMSDelivery implements ShouldQueue
{
    use InteractsWithQueue, Queueable, SerializesModels;

    /**
     * @var Webhook
     */
    public $webhook;

    /**
     * HandleSMSReceive constructor.
     * @param Webhook $webhook
     */
    public function __construct(Webhook $webhook)
    {
        $this->webhook = $webhook;
    }

    public function handle()
    {
        logger("======================================================");
        logger("HandleSMSDelivery Job");
        logger("{$this->webhook->event_name}::{$this->webhook->id} Job Started");
        logger("------------------------------------------------------");

        try {
            $webhook = $this->webhook;

            if ($webhook->status == 'processed') {
                $this->webhook->saveException(new \Exception(trans('Utility::exceptions.webhook.already_processed',
                    ['name' => $webhook->event_name, 'id' => $webhook->id])));
                return;
            }

            $payload = $webhook->payload;

            $this->handleUpdateMessageStatus($payload);

            $webhook->markAs('processed');
        } catch (\Exception $exception) {
            $this->webhook->saveException($exception);
            logger("{$this->webhook->event_name}::{$this->webhook->id} Exception");
            logger('Exception: ' . $exception->getMessage());
        } finally {
            logger("------------------------------------------------------");
            logger("{$this->webhook->event_name}::{$this->webhook->id} Job Ended");
            logger("HandleSMSDelivery Job Ended");
            logger("======================================================");
        }
    }

    /**
     * @param $payload
     * @throws \Exception
     */
    protected function handleUpdateMessageStatus($payload): void
    {
        if (!empty($payload['To']) && !empty($payload['SmsStatus'])) {
            //twilio
            $msisdn = getCleanedPhoneNumber(Arr::get($payload, 'To'));
            $status = Arr::get($payload, 'SmsStatus');
        } elseif (!empty($payload['msisdn']) && !empty($payload['status'])) {
            //nexmo
            $msisdn = getCleanedPhoneNumber(Arr::get($payload, 'msisdn'));
            $status = Arr::get($payload, 'status');
        } else {
            throw new \Exception('Cannot handle webhook payload');
        }

        $lastMessage = Message::query()->where('to', $msisdn)
            ->where('type', 'outgoing')
            ->latest()
            ->first();

        if (!$lastMessage) {
            throw new \Exception("No such messages found with [$msisdn] phone number");
        }

        $properties = $lastMessage->properties ?? [];

        $delivery_status_dump = $properties['delivery_status_dump'] ?? [];

        $delivery_status_dump[] = $payload;

        $properties['delivery_status_dump'] = $delivery_status_dump;

        $lastMessage->update([
            'status' => $status,
            'properties' => $properties
        ]);
    }

}

Spamworldpro Mini