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''<?xml version''"1.0" encoding''"UTF-8"?>
<esystem><click><data><record><field><name>dok</name><value>rendeles_xml_felulet</value></field>
<field><name>token</name><value>Ez a token helye</value></field><field><name>lang</name><value>HU</value></field>
<field><name>tetel_mezok</name><value>2</value></field></record></data></click></esystem>

A szervertől kapott válasz az elérhető műveletekről (choice ok)

<?xml version''"1.0" encoding''"UTF-8"?>
<esystem>
<frame>
<framename>main</framename>
<choice>
<choicename>form</choicename>
<click>
<session>
<record>
...
<field>
<name>formb</name>
<value>rendeles_xml_felulet</value>
</field>
</record>
</session>
<data>
<record>
<field>
<name>partner_id</name>
<value></value>
<metadata>
<type>num</type>
<human>
<help>Partner ID</help>
<label>Partner ID</label>
</human>
</metadata>
</field>
<field>
<name>tetel_mezok</name>
<value>2</value>
<metadata>
<type>hidden</type>
</metadata>
</field>
.....
<field>
<name>tetel_megj_2</name>
<value></value>
<metadata>
<type>text</type>
<human>
<label>Tetel netto</label>
</human>
</metadata>
</field>
<field>
<name>button</name>
<value></value>
<metadata>
<type>submit</type>
<check>
<options>b_felvesz</options>
<options>b_eldob</options>
</check>
</metadata>
</field>
</record>
</data>
</click>
</choice>
<choice>
<choicename>back</choicename>
...
</choice>
<choice>
<choicename>DEV_Frissít</choicename>
<click>
...
</click>
</choice>
<info_message>
</info_message>
</frame>
</esystem>

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
tetel_netto_$i	szám
tetel_megj_$i	szöveg

a $i valtozo [1..tetel_mezok] intervallum elemeit veszi fel. …

A szerver fele küldendő XML

<?xml version''"1.0" encoding''"UTF-8"?><esystem>
<click>
......
<data>
<record>
<field>
<name>oid</name>
<value></value>
<metadata>
<type>hidden</type>
<human>
<help>oid</help>
<label>oid</label>
</human>
</metadata>
</field>
<field>
<name>partner_id</name>
<value>1</value>
<metadata>
<type>num</type>
<human>
<help>Partner ID</help>
<label>Partner ID</label>
</human>
</metadata>
</field>
......
<field>
<name>tetel_mezok</name>
<value>2</value>
<metadata>
<type>hidden</type>
</metadata>
</field>
<field>
<name>tetel_tipusa_1</name>
<value>termék</value>
<metadata>
<type>select</type>
<check>
<options></options>
<options>szolgáltatás</options>
</check>
<human>
<label>Tetel tipus</label>
</human>
</metadata>
</field>
<field>
<name>tetel_cikkszam_1</name>
<value>termek1</value>
<metadata>
<type>text</type>
<human>
<label>Tetel cikkszáma</label>
</human>
</metadata>
</field>
<field>
<name>tetel_menny_1</name>
<value>3</value>
<metadata>
<type>num</type>
<human>
<label>Tetel menny</label>
</human>
</metadata>
</field>
<field>
<name>tetel_netto_1</name>
<value>300</value>
<metadata>
<type>num</type>
<human>
<label>Tetel netto</label>
</human>
</metadata>
</field>
<field>
<name>tetel_megj_1</name>
<value>megj1</value>
<metadata>
<type>text</type>
<human>
<label>Tetel netto</label>
</human>
</metadata>
</field>
......
<field>
<name>button</name>
<value>b_felvesz</value>
<metadata>
<type>submit</type>
<check>
<options>b_felvesz</options>
<options>b_eldob</options>
</check>
</metadata>
</field>
</record>
</data>
</click></esystem>

A szervertol kapott valasz ertelmezes

Tennivalók

A szerver a &lt;info_message&gt; 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

<?xml version''"1.0" encoding''"UTF-8"?>
<esystem>
<frame>
<framename>main</framename>
<choice>
<choicename>form</choicename>
<click>
....
</click>
</choice>
....
<info_message>
<msg>
<level>Info</level>
<time>2011.03.30 13:54:02</time>
<message>Rendelés rögzítve</message>
</msg>
</info_message>
</frame>
</esystem>

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.

<?php ini_set("error_reporting",E_ALL); function esystem_catch_choice_click ($text,$choice_name){ if (preg_match("/<choice>\s*<choicename>$choice_name<\/choicename>(\s*<click>.*?<\/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>$field_name<\/name>.*?<value>).*?(<\/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('<?xml version="1.0" encoding="UTF-8"?><esystem><click><data><record>'); $tail = urlencode('</record></data></click></esystem>'); $head_nc = '<?xml version="1.0" encoding="UTF-8"?><esystem><click><data><record>'; $tail_nc = '</record></data></click></esystem>'; print "A server fele kuldeno adatok:\n"; var_dump($fields); $text = $head; $text_nc = $head_nc; foreach($fields as $key=>$value) { $text.='<field><name>'.urlencode($key).'</name><value>'.urlencode($value).'</value></field>'; $text_nc.='<field><name>'.$key.'</name><value>'.$value.'</value></field>'; } $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 = '<?xml version="1.0" encoding="UTF-8"?><esystem>'; $tail = '</esystem>'; $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