OpenCart 3.0.5 PHP 8.x

Utánvétes Fizetés
Modul

Bővített Cash on Delivery (COD) fizetési modul OpenCart 3.0.5-höz. Az alap funkcionalitáson túl lehetővé teszi a minimális és maximális rendelési összeg beállítását, valamint azt, hogy az utánvét csak meghatározott szállítási módokkal legyen elérhető. PHP 8.x kompatibilis.

🛒 OpenCart 3.0.5 🐘 PHP 8.x 💳 Fizetési modul 🚚 Szállítási mód szűrés 💰 Összeg korlátok

✨ Funkciók

💰

Minimális rendelési összeg

Az utánvét csak egy minimális kosárérték felett érhető el. 0 esetén nincs alsó határ.

🔝

Maximális rendelési összeg ÚJ

Az utánvét meghatározott összeg felett automatikusan eltűnik a pénztárból. 0 esetén nincs felső határ.

🚚

Szállítási mód szűrés ÚJ

Megadható, hogy az utánvét csak meghatározott szállítási módokkal legyen elérhető. Üresen hagyva minden módnál megjelenik.

🌍

Geo zóna korlátozás

Az utánvét csak meghatározott földrajzi zónákra korlátozható (ország, megye szinten).

📦

Szállítást igénylő kosár

Automatikusan elrejtésre kerül, ha a kosárban csak digitális termék van (nincs szállítás).

🐘

PHP 8.x kompatibilis

Teljes PHP 8.x kompatibilitás: null coalescing operátor, typed property, biztonságos tömb kezelés.

📋 Követelmények

🛍️
OpenCart 3.0.5 Korábbi 3.x verziókon is működik
🐘
PHP 8.0+ Ajánlott: PHP 8.1 / 8.2
🗄️
MySQL / MariaDB Verzió: 5.7+ / 10.3+
📂
FTP / SFTP Fájlok feltöltéséhez
ℹ️
Nincs szükség extra bővítményre, Composer csomagra vagy adatbázis módosításra. A modul kizárólag az OpenCart beépített infrastruktúráját (config, session, db) használja.

⚙️ Hogyan működik

A pénztár folyamat fizetési mód kiválasztása lépésénél az OpenCart meghívja minden aktív fizetési modul getMethod() függvényét. A COD modul ebben az ellenőrzési láncban dönti el, hogy megjelenjen-e a vásárlónak.

Ellenőrzési lánc

🛒 Vásárló a pénztárban van (szállítási mód: még nem feltétlenül választott)
📦 Van-e fizikai szállítást igénylő termék a kosárban?
Digitális terméknél azonnal elrejtés
💰 Kosár értéke ≥ minimális összeg? (ha be van állítva)
Alatta: elrejtés
🔝 Kosár értéke ≤ maximális összeg? (ha be van állítva)
Felette: elrejtés
🌍 Szállítási cím benne van az engedélyezett geo zónában? (ha be van állítva)
Kívül esik: elrejtés
🚚 Kiválasztott szállítási mód szerepel az engedélyezettekben? (ha be van állítva)
Nem szerepel: elrejtés  ·  Még nincs választva: átenged (OC újra meghívja választás után)
✅ Minden feltétel teljesül → Utánvét megjelenik a pénztárban

Szállítási mód kód formátum

Az OpenCart a session-ben a szállítási módot modul.metódus formátumban tárolja (pl. flat.flat, free.free, pickup.pickup). A COD modul a kód első részét (a modul nevét) hasonlítja össze az admin beállításokban kiválasztott módokkal.

Session kódModul neveAdmin kiválasztható neve
flat.flatflatFlat Rate Shipping
free.freefreeFree Shipping
pickup.pickuppickupStore Pickup
weight.weightweightWeight Based Shipping
ℹ️
Az admin felületen csak a telepített szállítási modulok jelennek meg checkbox-ként. Ha egy szállítási modult később távolítasz el, a COD beállításból is érdemes kivenni, hogy ne maradjon hivatkozás nem létező módra.

Konfiguráció tárolása

Minden beállítás az OpenCart beépített oc_setting táblájában tárolódik, payment_cod_* kulcs előtaggal. A szállítási módok tömbjét az OC JSON formátumban szerializálja.

1 Fájlok feltöltése

Töltsd fel az összes fájlt FTP/SFTP-vel a webshop gyökérkönyvtárába. A csomag struktúrája megfelel a szerver struktúrájának (1:1 másolás).

upload/
├── admin/
│ ├── controller/extension/payment/
│ │ └── cod.php
│ ├── language/en-gb/extension/payment/
│ │ └── cod.php
│ ├── language/hu-hu/extension/payment/
│ │ └── cod.php
│ └── view/template/extension/payment/
│ └── cod.twig
└── catalog/
├── controller/extension/payment/
│ └── cod.php
├── language/en-gb/extension/payment/
│ └── cod.php
├── language/hu-hu/extension/payment/
│ └── cod.php
├── model/extension/payment/
│ └── cod.php ← szállítási mód + max összeg logika
└── view/theme/default/template/extension/payment/
└── cod.twig
⚠️
Ha a shopod nem az alapértelmezett default témát használja (pl. Journal3), a catalog/view/theme/default/template/ mappát cseréld a saját témád nevére, vagy hozd létre mindkettőben a fájlt.

2 Telepítés az OpenCart adminban

  • 1
    Lépj be az admin felületre
  • 2
    Navigálj: Extensions → Extensions → szűrő: Payments
  • 3
    Keresd meg: Cash On Delivery a listában
  • 4
    Kattints az Install gombra (zöld + ikon), ha még nincs telepítve
  • 5
    Kattints az Edit gombra (ceruza ikon) a beállítások megnyitásához
ℹ️
Ha a COD korábban már telepítve volt és csak a fájlokat cserélted le, az Install lépés kihagyható – elég megnyitni az Edit oldalt és menteni.

3 Beállítások az admin felületen

Mező Leírás Alapértelmezett
Minimális összeg Az a rendelési összeg, amelyet el kell érni, hogy az utánvét megjelenjen.
0 = nincs alsó határ
0
Maximális összeg ÚJ Az a rendelési összeg, amely felett az utánvét eltűnik a pénztárból.
0 = nincs felső határ
0
Rendelés állapot A rendelés ezt az állapotot kapja a vásárlás befejezésekor. Javasolt: Pending vagy Processing.
Geo zóna Ha ki van választva, az utánvét csak az adott geo zónában érhető el. Üresen hagyva (All Zones) minden szállítási cím esetén megjelenik. Minden zóna
Engedélyezett szállítási módok ÚJ Checkboxok a telepített szállítási modulokhoz. Ha egyik sem bejelölve, az utánvét minden szállítási módnál megjelenik. Ha legalább egy be van jelölve, csak a kijelölt módokkal érhető el az utánvét. Mind engedélyezett
Állapot A modul engedélyezése / letiltása. Letiltva
Sorrend A fizetési módok sorrendje a pénztárban (kisebb szám = előrébb). 0

Beállítási példák

💡
Példa: Utánvét csak 5 000 – 150 000 Ft között, csak futárszolgálattal
Minimális összeg: 5000  ·  Maximális összeg: 150000  ·  Engedélyezett szállítás: ✅ GLSDPD (a többi, pl. csomagpont vagy személyes átvétel, nincs bejelölve)
💡
Példa: Utánvét maximum 50 000 Ft-ig, bármely szállítási móddal
Minimális összeg: 0  ·  Maximális összeg: 50000  ·  Engedélyezett szállítás: (egyik sem bejelölve)
⚠️
A maximális összeg a kosár bruttó végösszegét vizsgálja, pontosan azt az értéket amelyet az OpenCart a getMethod() hívásnál átad. Ellenőrizd, hogy ez tartalmazza-e a szállítási díjat, ÁFA-t stb. az OpenCart verziódban.

🚀 Frissítés az online szerveren

Ha a modul már telepítve van és csak a funkcionális változtatásokat töltöd fel, az alábbi fájlokat kell felülírni a szerveren:

Fájl útvonala (webshop gyökértől) Mit tartalmaz Miért kell frissíteni
catalog/model/extension/payment/cod.php Katalógus – modell logika Maximális összeg + szállítási mód szűrő bekerült
admin/controller/extension/payment/cod.php Admin – vezérlő Új mezők kezelése, szállítási módok betöltése
admin/language/en-gb/extension/payment/cod.php Admin – angol szövegek Új language stringek az új mezőkhöz
admin/language/hu-hu/extension/payment/cod.php Admin – magyar szövegek Új language stringek az új mezőkhöz
admin/view/template/extension/payment/cod.twig Admin – sablon (form) Maximális összeg mező + szállítási módok checkboxok megjelennek
ℹ️
A catalog oldali controller, language és view fájlok (cod.twig) nem változtak – azokat nem kell feltölteni, kivéve ha frissen telepítesz.

Adatbázis módosítás szükséges-e?

Nem. Az új beállítások (payment_cod_max_total, payment_cod_shipping_methods) az OpenCart meglévő oc_setting táblájában tárolódnak. Sem tábla létrehozása, sem séma módosítás nem szükséges.

Cache törlése feltöltés után

  • 1
    Admin → Dashboard → jobb felső sarokban a fogaskerék ikon → Refresh
  • 2
    Vagy töröld manuálisan: system/cache/ és system/storage/cache/ mappák tartalmát (a mappát ne töröld, csak a tartalmát)

🗑️ Eltávolítás

  1. Admin → Extensions → Extensions → Payments → Cash On Delivery → Uninstall (piros – gomb)
  2. Fájlok manuális törlése a szerverről (a feltöltött 10 fájl eltávolítása)
⚠️
Az Uninstall gomb törli az összes payment_cod_* beállítást az oc_setting táblából. Új telepítésnél az összes mezőt újra be kell állítani.

🔧 Hibaelhárítás

⛔ Az utánvét nem jelenik meg a pénztárban

Ellenőrizd sorban: 1) A modul Státusza Enabled? 2) A kosárban van fizikai szállítást igénylő termék? 3) A kosár értéke az összeg korlátok között van? 4) A kiválasztott szállítási mód szerepel az engedélyezettekben? 5) A szállítási cím a beállított geo zónában van?

Ha még nincs szállítási mód kiválasztva: ez normális – az utánvét ilyenkor is látszódnia kell (a szállítási mód szűrő csak akkor lép életbe, ha már van aktív választás a sessionben). Ha még szállítás nélkül sem jelenik meg, a többi feltétel (összeg, geo zóna, státusz) valamelyike nem teljesül.

⛔ Az új mezők (maximális összeg, szállítási módok) nem látszanak az adminban

Ellenőrizd, hogy az összes 5 admin fájlt sikeresen feltöltötted-e. Utána töröld az OpenCart template cache-t: Admin → Dashboard → fogaskerék → Refresh.

⛔ Szállítási módok checkboxai üresek az adminban

Az admin felület csak a telepített szállítási modulokat listázza. Navigálj Extensions → Extensions → Shipping → és telepíts legalább egy szállítási modult (Install gomb), ezután a COD admin oldalon megjelennek.

⛔ Mentés után a szállítási módok beállítása elveszik

Ha egyetlen checkbox sincs bejelölve a form beküldésekor, az a „minden szállítás engedélyezett" állapotot jelenti – ez helyes viselkedés. A beállítás nem vész el, hanem szándékosan nincs tárolva.

⛔ PHP 8 TypeError: „null given" valamilyen string függvénynél

Győződj meg róla, hogy a catalog/model/extension/payment/cod.php fájl a frissített verziója van a szerveren – a régi verzióban hiányoznak a ?? null coalescing és az (string) cast biztonsági ellenőrzések.

⛔ „Nincs jogosultságod" hiba az admin mentésnél

Admin → System → Users → User Groups → adjunk hozzá extension/payment/cod jogosultságot (Access + Modify).

Utánvétes Fizetés – OpenCart 3.0.5  ·  PHP 8.x kompatibilis  ·  Maximális összeg + szállítási mód szűrő