$strDatabaseHost, 'user' => $strDatabaseUser, 'pass' => $strDatabasePass, 'db' => $strDatabaseMain ); $objDatabase = new clsMysql($arrConDatabaseMain); $__raw = file_get_contents('php://input'); $__hdr = function_exists('getallheaders') ? getallheaders() : []; file_put_contents(__DIR__ . '/paypal_incoming.json', ($__raw ?: "{}") . "\n", FILE_APPEND); file_put_contents(__DIR__ . '/paypal_incoming_headers.log', print_r($__hdr, true) . "\n", FILE_APPEND); $data = json_decode($__raw, true); file_put_contents(__DIR__ . '/paypal_decoded.log', print_r($data, true) . "\n", FILE_APPEND); $eventType = $data['event_type'] ?? ''; $resource = $data['resource'] ?? []; $summary = $data['summary'] ?? ''; $status = $resource['status'] ?? ($resource['state'] ?? null); // Déduire un “resource type” à partir du event_type (ex: PAYMENT.CAPTURE.COMPLETED -> capture) $resourceType = null; if (is_string($eventType) && strpos($eventType, '.') !== false) { $partsET = explode('.', strtolower($eventType)); // ex: ['payment','capture','completed'] // On prend le 2e segment si disponible comme type “métier” $resourceType = $partsET[1] ?? $partsET[0]; } // IDs génériques potentiels $resourceId = $resource['id'] ?? null; $orderId = null; $captureId = null; $authorizationId = null; $invoiceId = $resource['invoice_id'] ?? ($resource['supplementary_data']['related_ids']['invoice_id'] ?? null); $customId = $resource['custom_id'] ?? null; // Montant/devise si présents $amountValue = $resource['amount']['value'] ?? ($resource['seller_receivable_breakdown']['gross_amount']['value'] ?? null); $amountCurrency = $resource['amount']['currency_code'] ?? ($resource['seller_receivable_breakdown']['gross_amount']['currency_code'] ?? null); $createTime = $resource['create_time'] ?? null; $updateTime = $resource['update_time'] ?? null; // Extraire IDs à partir des liens, quand dispo if (!empty($resource['links']) && is_array($resource['links'])) { foreach ($resource['links'] as $lnk) { $rel = $lnk['rel'] ?? ''; $href = $lnk['href'] ?? ''; // Cherche des patterns connus if (!$orderId && strpos($href, '/orders/') !== false) { $orderId = basename(parse_url($href, PHP_URL_PATH)); // dernier segment } if (!$captureId && strpos($href, '/captures/') !== false) { $captureId = basename(parse_url($href, PHP_URL_PATH)); } if (!$authorizationId && strpos($href, '/authorizations/') !== false) { $authorizationId = basename(parse_url($href, PHP_URL_PATH)); } } } // Certains events embed l'order/capture directement if (!$orderId) { $orderId = $resource['supplementary_data']['related_ids']['order_id'] ?? ($resource['order_id'] ?? null); } if (!$captureId) { $captureId = $resource['supplementary_data']['related_ids']['capture_id'] ?? ($resource['capture_id'] ?? null); } if (!$authorizationId) { $authorizationId = $resource['supplementary_data']['related_ids']['authorization_id'] ?? ($resource['authorization_id'] ?? null); } $refundId = $resourceId; // pour cohérence avec ta suite (si c'est un refund, id = refund_id) // Log générique, une seule ligne compacte (lisible) $line = sprintf( "[%s] type=%s resType=%s resId=%s status=%s amt=%s %s order=%s capture=%s auth=%s invoice=%s custom=%s summary=%s", date('c'), $eventType ?: '-', $resourceType ?: '-', $resourceId ?: '-', $status ?: '-', $amountValue ?: '-', $amountCurrency ?: '', $orderId ?: '-', $captureId ?: '-', $authorizationId ?: '-', $invoiceId ?: '-', $customId ?: '-', $summary ? preg_replace('/\s+/', ' ', $summary) : '-' ); file_put_contents(__DIR__ . '/paypal_event_detected.log', $line . "\n", FILE_APPEND); $refundId = $data['resource']['id'] ?? null; $status = $data['resource']['status'] ?? null; $eventType = $data['event_type'] ?? null; /* $captureId est déjà construit plus haut dans ton script */ $Q = function($v){ return $v === null ? "NULL" : "'" . addslashes($v) . "'"; }; if ($refundId && $status) { $sql = " INSERT INTO inscriptions_panier_remboursement ( refund_id, status, status_interne, create_time, update_time ) VALUES ( {$Q($refundId)}, {$Q($status)}, 'WEBHOOK', NOW(), NOW() ) ON DUPLICATE KEY UPDATE status = VALUES(status), status_interne = 'WEBHOOK', update_time = NOW() "; $ok = $objDatabase->fxQuery($sql); file_put_contents(__DIR__.'/paypal_db_update.log', "[".date('c')."] UPSERT refund_id={$refundId} cap={$captureId} ok=".$ok."\n", FILE_APPEND ); } else { file_put_contents(__DIR__.'/paypal_db_update.log', "[".date('c')."] SKIP UPSERT: refundId/status manquants (refundId=" .var_export($refundId,true).", status=".var_export($status,true).")\n", FILE_APPEND ); } exit;