===== 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_felulet tokenEz a token helyelangHU tetel_mezok2 === A szervertől kapott válasz az elérhető műveletekről (choice ok) === main form ... formb rendeles_xml_felulet partner_id num Partner ID tetel_mezok 2 hidden ..... tetel_megj_2 text button submit b_felvesz b_eldob back ... 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 === ...... oid hidden oid partner_id 1 num Partner ID ...... tetel_mezok 2 hidden tetel_tipusa_1 termék select szolgáltatás tetel_cikkszam_1 termek1 text tetel_menny_1 3 num tetel_netto_1 300 num tetel_megj_1 megj1 text ...... button b_felvesz submit b_felvesz b_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 === main form .... .... Info Rendelé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