A WordPress szép és jó, amíg egy fejlett oldalszerkesztőben összerakunk egy csilivili landing oldalt, ahol beúsznak, ficeregnek, mozgolódnak a dolgok a felhasználó görgetésének vagy klikkelésének, egérmozgásának hatására. De az előre meghatározott stílusok felülbírálásával együtt egy oldal összerakása ugyanannyi időt vesz igénybe, mintha nulláról kezdtem volna el összerakni egy CSS frameworkben (pl. Bootstrap). Az aggályosabb része azonban a biztonság. Sorozatosan tapasztalom, hogy azoknak az ügyfeleknek, akik nem kérnek rendszeres karbantartást, sorozatosan törik fel hackerek az oldalait. Mert az oldal készítéséhez felhasznált CMS (nagyrészt WordPress, Joomla) elavult, és egy 2 éve magára hagyott weboldalt már akármelyik script kiddie képes feltörni, és beletenni a saját kártékony kódját. A fertőzött oldalakat nem szeretik a tárhelyszolgáltatók, és jobb helyeken figyelmeztetik erre a honlap tulajdonosát, máshol meg korlátozzák az elérhetőségét külföldről, legrosszabb esetben mindenhonnan. El lehet képzelni, milyen rossz lehet, ha egy cikket nem lehet előnézettel együtt megosztani Facebookon, vagy megáll a Google indexelés, mert ezek a külföldi szerverek csak 403 forbidden hibát látnak az oldalból.Az a baj, hogy túl sok mindent tud már a WordPress. Létre lehet hozni vele egy teljes hírportált. Sokféleképpen lehet hozzá kapcsolódni. És amikor létrehozunk WordPress-szel egy landing oldalt, utána a sok, általunk nem használt funkción keresztül hatolnak be a hackerek.

Ezért amikor most egy régi, feltört Joomlát kellett volna megtakarítani, inkább létrehoztam egy új oldalt CodeIgniter PHP frameworkben. A CodeIgniter gondoskodik a megfelelő URL-ekről, a megrendelő űrlap ellenőrzéséről, és arról, hogy az űrlapban bekért adatokat továbbítja e-mailben, valamint az Ügyfélmester ügyviteli rendszerbe. Hogy mit nyerünk ezzel? Csak azokat a funkciókat építem az oldalba, amire pontosan szükség van, jelen esetben egyetlen űrlapkitöltésre kell nagyon odafigyelni, mert a támadások arra irányulnak. Villámgyorsan betöltődik az oldal, oldalanként egy-két PHP lekérés van, és mert a HTML + CSS + JS frontendet is a szuper tömör és kicsi Skeleton frameworkkel készítettem, ebbe illesztettem egy külön desktop és mobil nézetes menüt, a saját postaköltség-kalkulátort és egyebeket.

Íme a kezdőlap:

És ez az űrlap, ami dinamikusan, azonnal láthatóan számolja ki a postaköltséget:

Az Ügyfélmesterbe küldés azért fontos, mert akkor az ügyfélszolgálatnak nem kell az e-mailből másolgatnia a megrendelő adatait, hanem egyből minden adat megjelenik egy megrendelői bizonylaton, amit forgathatnak át további bizonylatokra (szállítói megrendelés, proforma, számla, pakolós lista, stb).

Mivel az Ügyfélmester oldalán még nincs API dokumentáció, ezért itt megosztom, milyen egyszerűen lehet kapcsolódni hozzá:

$url = 'https://ugyfelmester.hu/apiútvonal';
$cart = [];
$cart_item['sku'] = 'Sz-Tsk01';
$cart_item['price'] = 13970;
$cart_item['vat'] = 0;
$cart_item['qty'] = $data['darab'];
$cart[] = $cart_item;
if ($data['fizetesimod']=='Utánvét'){
  $paymode = 6;
} else if ($data['fizetesimod']=='Előreutalás'){
  $paymode = 3;
}

$params = [
'store_id' => 'Ügyfélmester store ID',
'remote_id' => 'Ezt is az Ügyfélmesterben definiáljuk',
'invoice_note' => 'etelmintatasak.hu '. $data['rendelesimegjegyzes'],
'partner_name' => $data['szamlazasinev'],
'partner_zip' => $data['szamlazasiiranyitoszam'],
'partner_address' => $data['szamlazasiutca'],
'partner_city' => $data['szamlazasitelepules'],
'partner_company_name' => '',
'partner_country' => '',
'partner_vatnumber' => $data['adoszam'],
'partner_email' => $data['email'],
'partner_fax' => '',
'partner_password' => '',
'partner_mobile' => '',
'partner_phone' => $data['telefonszam'],
'ship_name' => $data['szallitasinev'],
'ship_zip' => $data['szallitasiiranyitoszam'],
'ship_address' => $data['szallitasiutca'],
'ship_city' => $data['szallitasitelepules'],
'ship_country' => '',
'ship_vatnumber' => $data['adoszam'],
'ship_fax' => '',
'ship_mobile' => '',
'ship_phone' => '',
'paymode' => $paymode,
'cart' => json_encode($cart),
];

$postData = http_build_query($params);
  
ob_start();
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);
//curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_POST, count($postData));
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);

$output = curl_exec($ch);

curl_close($ch);
ob_end_clean();