File: //home/artinside/sites.artinside.com.br/iande/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);
}