===== XML alapú rendelés cikktörzsből =====
==== Kapcsolat felvétele a szerverrel: bejelentkezés és funkció választás ====
Első lepésben jelentkezzünk be a szerverre, és kezdeményezzük a kívánt funkciót.
=== Tennivalok: ===
* Szerver URL megszerzés ($url változó) :)
* Adatok összeállítása amivel bejelentkezünk, (token,lang kulcsok a $fields tömbben)
* Funkciók kiválasztása, és paraméterek megadása (dok, tetel_mezok kulcsok a $fields tömbben)
* Adatok továbbítása a szerver felé (példában: esystem_xml_communication függvény)
=== A szerver fele először küldendő adatok ===
||** Kulcs** ||**Lehetséges érteké/példa alapján** ||**típusa** ||**Leírás** ||
|| dok || rendeles_xml_felulet || szöveg || Jelen esetben a kívánt funkció a dok kulcs rendeles_xml_felulet ||
|| token || || szöveg || Egy userhez tartozó tokent jelenti ||
|| lang || HU || szöveg || A rendszer nyelve ||
|| tetel_mezok || 2 || szám || A rendelésen szereplő tételek száma, ennyi tétel sablont fog a rendszer a válasz XML-be generálni. Ez a folyamat közben változtatható ||
Példa:
http://.../cgi-bin/index.cgi?xml''
dokrendeles_xml_felulettokenEz a token helyelangHUtetel_mezok2
=== A szervertől kapott válasz az elérhető műveletekről (choice ok) ===
mainform
...
formbrendeles_xml_feluletpartner_idnumPartner IDtetel_mezok2hidden
.....
tetel_megj_2textbuttonsubmitb_felveszb_eldobback
...
DEV_Frissít
...
==== Művelet (choice) kiválasztása és adatok kitöltése, majd az XML visszaküldése a szervernek ====
=== Tennivalók ===
* Válasszuk ki a megfelelő choice-t (példában: esystem_catch_choice_click függvény)
* Töltsük ki a megfelelő mezőket (példában: esystem_change_field_value függvény)
* XML féltöltése az oldalra (példában: esystem_xml_send_text )
=== Mezők a adatok kitöltéséhez ===
||** Kulcs** ||**típus** ||**Leírás** ||
|| oid || num || nem használt mező, értekét nem kell változtatni ||
|| partner_id || szám || A partner id-je akihez a rendelés tartozik ||
|| szallitasi_hatarido || dátum || ||
|| rendelesi_hivatkozas || szöveg || ||
|| megjegyzes || szöveg || A rendelés megjegyzés mezője ||
|| tetel_mezok || szám || a rendelés tételeinek a száma ||
|| tetel_tipusa_$i || szöveg(termék/szolgáltatás) || a tétel típusa ||
|| tetel_cikkszam_$i || szöveg || tétetel cikkszáma ||
|| tetel_menny_$i || szám || a tétel mennyisége
|| tetel_netto_$i || szám || a tétel nettó egységára
|| tetel_megj_$i || szöveg || a tétel megjegyzése
a $i valtozo [1..tetel_mezok] intervallum elemeit veszi fel.
...
=== A szerver fele küldendő XML ===
......
oidhiddenoidpartner_id1numPartner ID
......
tetel_mezok2hiddentetel_tipusa_1termékselectszolgáltatástetel_cikkszam_1termek1texttetel_menny_13numtetel_netto_1300numtetel_megj_1megj1text
......
buttonb_felveszsubmitb_felveszb_eldob
==== A szervertol kapott valasz ertelmezes ====
=== Tennivalók ===
* A szerver a <info_message> XML blokkban add információt a művelet sikerességéről vagy a sikertelenséget okozó hibákról
* Sikeres rögzítés eseten "Rendelés rögzítve" message tájékoztat a történtekről. A form choce-ban kapunk egy új rendelés rögzítés XML-t
* Sikertelen esetben a messagebe megjelenik a hibazenet.
* Igény eseten a sikeres rögzítés után a rendelés PDF-et is megkaphatja a kliens.
=== A szerver felől kapott válasz, sikeres rögzítés eseten ===
mainform
....
....
InfoRendelés rögzítve
===== Példa php kód =====
A példa kód feltételezi a termek1 cikszámú terméket és a szolg1 cikkszámú szolgáltatás meglétét.
\s*$choice_name<\/choicename>(\s*.*?<\/click>)\s*<\/choice>/s", "$text", $matches)) {
return $matches[1];
} else {
die ('nem talalom a choice-t');
}
};
function esystem_change_field_value ($text,$field_name,$value){//TODO:fel van tetelezve, hogy elol van a name, es utanna a value!
$count = 0;
$new_text = preg_replace("/(.*?$field_name<\/name>.*?).*?(<\/value>.*?<\/field>)/s",'${1}'.$value.'${2}', $text,'-1',$count);
if ($count == 1) {
return $new_text;
} else {
die ('talalatok szam('.$count.') != 1 a fieldet:'.$field_name);
}
};
function esystem_xml_communication ($url,$fields) {
$head = urlencode('');
$tail = urlencode('');
$head_nc = '';
$tail_nc = '';
print "A server fele kuldeno adatok:\n";
var_dump($fields);
$text = $head;
$text_nc = $head_nc;
foreach($fields as $key=>$value) {
$text.=''.urlencode($key).''.urlencode($value).'';
$text_nc.=''.$key.''.$value.'';
}
$text .= $tail;
$text_nc .= $tail_nc;
print "\nA server fele kuldott get keres (url encodolatlanul):\n".$url.'?xml='.$text_nc."\n\n";
$contents = file_get_contents($url.'?xml='.$text);
print "\nA server felol kapott valasz\n".$contents."\n\n";
return $contents;
}
function esystem_xml_send_text ($url,$text) {
$head = '';
$tail = '';
$text = $head.$text.$tail;
print "A server fele xml kuldes: ".$text."\n\n";
# print "send:\n".$text."\n\n\n";
$postdata = http_build_query(
array(
'xml' => $text,
)
);
$opts = array('http' =>
array(
'method' => 'POST',
'header' => 'Content-type: application/x-www-form-urlencoded',
'content' => $postdata
)
);
$context = stream_context_create($opts);
$result = file_get_contents($url, false, $context);
print "\nA server felol kapott valasz:\n".$result."\n\n";
return $result;
}
$url = 'http://.../cgi-bin/index.cgi';
$fields = array(
'dok'=>'rendeles_xml_felulet',
'token'=>'A token helye',
'lang'=>'HU',
'tetel_mezok'=>'2',
);
$result = esystem_xml_communication($url,$fields);
# print $result;
$click = esystem_catch_choice_click($result,'form');
$click = esystem_change_field_value($click,'partner_id',1);
$click = esystem_change_field_value($click,'szallitasi_hatarido','2010-01-02');
$click = esystem_change_field_value($click,'rendelesi_hivatkozas','renles0001');
$click = esystem_change_field_value($click,'megjegyzes','XML test');
$click = esystem_change_field_value($click,'tetel_mezok','2');
$click = esystem_change_field_value($click,'tetel_tipusa_1','termék');
$click = esystem_change_field_value($click,'tetel_cikkszam_1','termek1');
$click = esystem_change_field_value($click,'tetel_menny_1','3');
$click = esystem_change_field_value($click,'tetel_netto_1','300');
$click = esystem_change_field_value($click,'tetel_megj_1','megj1');
$click = esystem_change_field_value($click,'tetel_tipusa_2','szolgáltatás');
$click = esystem_change_field_value($click,'tetel_cikkszam_2','szolg1');
$click = esystem_change_field_value($click,'tetel_menny_2','4');
$click = esystem_change_field_value($click,'tetel_netto_2','500');
$click = esystem_change_field_value($click,'tetel_megj_2','tetel megj');
$click = esystem_change_field_value($click,'button','b_felvesz');
$result = esystem_xml_send_text($url,$click);
# print $result;
?>
-- Main.SzaboAmbrus - 2011-03-30