Skip to main content

PHP Implementierung

Dieses Beispiel zeigt, wie der Basket serverseitig in PHP aufgebaut, sauber URL-encodiert und an den Endpoint gesendet wird.
Es werden zwei Varianten gezeigt: cURL (empfohlen) und file_get_contents (einfach).


Beispiel mit cURL (empfohlen)

<?php
// Beispielhafte Datenquellen (Shop-Objekt / eigene Funktionen)
$positions = $Shopsystem->getOrderedPositions(); // Array mit bestellten Positionen
$emid      = $Shopsystem->getEmid();             // EMID (vom Click übergeben & serverseitig gespeichert)
$orderId   = $Shopsystem->ordernumber;           // Eindeutige Order-ID

$basket = [];

foreach ($positions as $pos) {
    $basket[] = [
        'campaign_id'    => (string) $pos['campaign_id'], // IDs als String halten
        'trigger_id'     => (string) $pos['trigger_id'],
        'token'          => (string) $orderId,
        'action_id'      => (string) $emid,               // EMID für Attribution
        'amount'         => (string) $pos['amount'],      // Menge je Position
        'price'          => number_format((float) $pos['net_price'], 2, '.', ''), // Netto/Stück
        'article_number' => (string) $pos['sku'],
        'productname'    => (string) $pos['name'],
        'category'       => (string) $pos['category'],
        'additional'     => array_filter([
            'vouchercode'  => $pos['voucher'] ?? null,
            'customerType' => $pos['customerType'] ?? null,
        ], static fn($v) => $v !== null && $v !== '')
    ];
}

$endpoint = 'https://SUB-DOMAIN/trck/ebasket/';

// GET-Parameter aufbauen (json wird automatisch URL-encodiert)
$query = http_build_query([
    'json'     => json_encode($basket, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES),
    'currency' => 'EUR', // optional, Standard EUR
]);

$url = $endpoint . '?' . $query;

// cURL-Request (GET)
$ch = curl_init();
curl_setopt_array($ch, [
    CURLOPT_URL            => $url,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_FOLLOWLOCATION => true,
    CURLOPT_TIMEOUT        => 10,
    CURLOPT_SSL_VERIFYPEER => true,
    CURLOPT_SSL_VERIFYHOST => 2,
    // Optional: Logging eines Response-Headers
    CURLOPT_HEADER         => false,
]);

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);

if ($response === false || $httpCode >= 400) {
    error_log('Basket-Tracking fehlgeschlagen: HTTP ' . $httpCode . ' - ' . curl_error($ch));
    // Optional: Retry-Logik / Queueing
}

curl_close($ch);

Alternative mit file_get_contents (einfach)

<?php
$endpoint = 'https://SUB-DOMAIN/trck/ebasket/';
$query = http_build_query([
    'json'     => json_encode($basket, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES),
    'currency' => 'EUR',
]);

$url = $endpoint . '?' . $query;

$context = stream_context_create([
    'http' => [
        'method'  => 'GET',
        'timeout' => 10,
        'header'  => [
            'Accept: application/json',
        ]
    ],
    'ssl' => [
        'verify_peer'      => true,
        'verify_peer_name' => true,
    ],
]);

$result = @file_get_contents($url, false, $context);

if ($result === false) {
    error_log('Basket-Tracking fehlgeschlagen (file_get_contents). URL: ' . $url);
}