webrteu / emag
eMAG Marketplace product import for Laravel: characteristics, variants and images (Romania)
Requires
- php: ^8.2
- illuminate/console: ^12.0|^13.0
- illuminate/database: ^12.0|^13.0
- illuminate/events: ^12.0|^13.0
- illuminate/filesystem: ^12.0|^13.0
- illuminate/http: ^12.0|^13.0
- illuminate/support: ^12.0|^13.0
Requires (Dev)
- larastan/larastan: ^3.13
- laravel/pint: ^1.32
- orchestra/testbench: ^10.0|^11.0
- peckphp/peck: ^0.3
- pestphp/pest: ^3.8|^4.7
- pestphp/pest-plugin-laravel: ^3.2|^4.1
- pestphp/pest-plugin-type-coverage: ^3.6|^4.0.4
- phpstan/phpstan: ^2.3.3,!=2.3.4
- rector/rector: ^2.8
Suggests
None
Provides
None
Conflicts
None
Replaces
None
README
Importă ofertele din eMAG Marketplace API v3 în Laravel 12–13: produse, caracteristici (cu nume), opțiuni de variantă (mărime, culoare etc.), familii și imagini descărcate local.
Instalare
composer require webrteu/emag php artisan vendor:publish --tag=emag-config php artisan vendor:publish --tag=emag-migrations php artisan migrate
EMAG_BASE_URL=https://marketplace-api.emag.ro/api-3 # .bg / .hu pentru celelalte platforme EMAG_USERNAME=utilizator-api EMAG_PASSWORD=parola-api EMAG_IMAGES_DISK=public EMAG_IMAGES_PATH=emag
eMAG acceptă cereri doar de la IP-uri din whitelist: adaugă IP-ul serverului în contul de vânzător.
Import
php artisan emag:import # tot catalogul, cu imagini php artisan emag:import --no-images # doar URL-urile imaginilor php artisan emag:import --page=5 -v # reia de la pagina 5 și afișează fiecare produs
Din cod:
use WeBRTeu\Emag\EmagImporter; $count = app(EmagImporter::class)->importAll();
Reimportul e idempotent: produsul se actualizează după emag_id, caracteristicile se rescriu, imaginile deja descărcate nu se mai descarcă, iar cele scoase din eMAG se șterg (și fișierele lor).
Ce se salvează
| Tabel | Conținut |
|---|---|
emag_products |
id eMAG, part_number, PNK, nume, brand, descriere, categorie, familie, prețuri, stoc, EAN, răspunsul brut (raw) |
emag_product_characteristics |
id caracteristică, nume (din category/read), valoare, tag, is_option |
emag_product_images |
URL eMAG, tip (1 = principală), poziție, cale locală |
$product = EmagProduct::where('part_number', 'TRC-RED-M')->first(); $product->options(); // ['Mărime' => 'M', 'Culoare' => 'Roșu'] $product->variants; // toată familia (alte mărimi/culori) $product->images->first()->src(); // URL local, sau cel eMAG dacă nu s-a descărcat
Legarea de catalogul tău
Ascultă evenimentul și mapează în modelele aplicației:
use WeBRTeu\Emag\Events\EmagProductImported; Event::listen(function (EmagProductImported $event): void { Product::updateOrCreate(['sku' => $event->product->part_number], [ 'name' => $event->product->name, 'price' => $event->product->sale_price, ]); });
Teste
composer test
⚠️ Fixture-urile sunt scrise după documentație. Înainte de v1.0 trebuie înlocuite cu răspunsuri reale.
Licență
MIT · WeBRTeu