Tartalomjegyzék

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:

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

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 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.

rendeles_cikktorzsbol.php
<?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