MOON
Server: Apache
System: Linux server1.studioinfinity.com.br 2.6.32-954.3.5.lve1.4.90.el6.x86_64 #1 SMP Tue Feb 21 12:26:30 UTC 2023 x86_64
User: artinside (517)
PHP: 7.4.33
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //home/artinside/public_html/sabbry/service/pagarme-callback.php
<?php

require __DIR__ . "/../vendor/autoload.php";
header("access-control-allow-origin: *");
header("Content-Type: text/html; charset=UTF-8");

$postback = filter_input_array(INPUT_POST, FILTER_DEFAULT);

if(!empty($postback)){
    $file = fopen("log.txt", "a");

    $transaction = (object) $postback["transaction"];
    $customer = (!empty($postback["transaction"]["customer"]) ? (object) $postback["transaction"]["customer"] : null);
    $card = (!empty($postback["transaction"]["card"]) ? (object) $postback["transaction"]["card"] : null);
    $split = (!empty($postback["transaction"]["split_rules"]) ? (object) $postback["transaction"]["split_rules"] : null);

    function normalizeTimeZone(string $param) : string
    {
        $timeZone = new DateTimeZone("America/Sao_Paulo");
        $dateTime = new DateTime($param);
        $dateTime->setTimezone($timeZone);
        return $dateTime->format("Y-m-d H:i:s");
    }


    $transaction->date_created = (!empty($transaction->date_created) ? normalizeTimeZone($transaction->date_created) : null);
    $transaction->date_updated = (!empty($transaction->date_updated) ? normalizeTimeZone($transaction->date_updated) : null);
    $transaction->boleto_expiration_date = (!empty($transaction->boleto_expiration_date) ? normalizeTimeZone($transaction->boleto_expiration_date) : null);

    if($postback["event"] == "transaction_status_changed"){
        $Order = (new \Source\Models\Ecommerce\Orders())->findByIntegrationOrder($transaction->tid);
        $Order->status = $transaction->status;

        if($Order->status == "refused" AND $Order->re_stock == 0){
            $items = (new \Source\Models\Ecommerce\OrderItens())->find("order_id = :order_id", "order_id={$Order->id}")->fetch(true);

            foreach ($items as $item) {
                $variation = (new \Source\Models\Ecommerce\ProductVariations())->findById($item->variation_id);
                $variation->stock += $item->quantity;
                $variation->save();
            }
            $Order->re_stock = 1;
            $Order->save();
        }

        if($Order->save())
        {
            $view = new \Source\Core\View(__DIR__ . "/../shared/views/email");
            $message = $view->render("status", [
                "user" => $customer->name,
                "status" => $Order->status
            ]);

            (new \Source\Support\Email())->bootstrap(
                "Status de pedido alterado | " . CONF_SITE_NAME,
                $message,
                $customer->email, $customer->name
            )->send();
        }

    }
    fwrite($file, print_r($transaction, true));
    fclose($file);
}