Jump to content

Using API to get orders in JSON and update order status fail


c64girl

Recommended Posts

I have a problem, with change order status id with following code. I get in logs 401.

 

<?php
// Ustawienia
$prestashop_url = 'https://mysite.pl';
$api_key = '783V4YB8732VV47823V4283V4B7823YV47823YV47823YV4EXAMPLE';
$order_status_id = 10; // ID statusu zamówienia, dla przykładu zakładam ID 10
$new_order_status_id = 20; // ID nowego statusu zamówienia, który chcesz ustawić po wygenerowaniu pliku JSON
$two_weeks_ago = date('Y-m-d', strtotime('-2 weeks')); // Data sprzed dwóch tygodni
$current_date = date('d-m-Y-H-i'); // Aktualna data i czas w formacie dzień-miesiąc-rok-godzina-minuta

// Endpoint API
$api_endpoint = $prestashop_url . '/api/orders';

// Parametry zapytania
$params = array(
    'output_format' => 'JSON',
    'filter[current_state]' => $order_status_id,  // Filtruj po ID statusu zamówienia
    'display' => 'full',
    'ws_key' => $api_key
);

// Wykonaj zapytanie do API PrestaShop
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $api_endpoint . '?' . http_build_query($params));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);

// Przetwórz odpowiedź
if ($response) {
    $orders_data = json_decode($response, true)['orders'];
    
    // Przetwórz dane i wygeneruj JSON
    $orders_json = [];
    foreach ($orders_data as $order) {
        $order_date = date('Y-m-d H:i:s', strtotime($order['date_add'])); // Data dodania zamówienia
        if (strtotime($order_date) >= strtotime('-2 weeks')) {
            $order_info = array(
                'reference' => $order['reference'], // Numer referencyjny zamówienia
                'order_id' => $order['id'],
                'order_date' => $order_date, // Data dodania zamówienia
                'products' => []
            );
            foreach ($order['associations']['order_rows'] as $product) {
                $order_info['products'][] = array(
                    'name' => $product['product_name'],
                    'quantity' => $product['product_quantity'],
                    'SKU' => $product['product_reference'],
                    'EAN' => $product['product_ean13']
                );
            }
            $orders_json[] = $order_info;
            
            // Aktualizacja statusu zamówienia
            $order_id = $order['id'];
            updateOrderStatus($order_id, $new_order_status_id);
        }
    }
    
    // Nazwa pliku JSON
    $file_name = 'orders-' . $current_date . '.json';
    
    // Zapisz do pliku JSON
    file_put_contents($file_name, json_encode($orders_json, JSON_PRETTY_PRINT));
    echo "Dane zamówień zostały wyeksportowane do pliku JSON o nazwie '$file_name' i statusy zamówień zostały zaktualizowane.";
} else {
    echo "Błąd podczas pobierania danych z API PrestaShop.";
}

// Funkcja do aktualizacji statusu zamówienia
function updateOrderStatus($order_id, $new_status_id) {
    global $prestashop_url, $api_key;
    
    $api_endpoint = $prestashop_url . '/api/orders/' . $order_id;

    // Dane do aktualizacji statusu
    $status_data = array(
        'order' => array(
            'current_state' => $new_status_id
        )
    );

    // Ustawienia zapytania
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $api_endpoint);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($status_data));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Authorization: Basic ' . base64_encode($api_key . ':')
    ));

    // Wykonaj zapytanie
    $response = curl_exec($ch);
    curl_close($ch);
}
?>

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...