Fra PHP til ASP (XML)
Hejsa,Jeg har købt en service, som tillader mig at benytte API til at
modtage data.
Så vidt jeg forstår fungere det ved at jeg kan sende noget XML
til deres server - som derefter returnere et svar.
Men deres API eksempel er kun lavet i PHP, og derfor vil jeg
gerne høre om nogle af jer kan forklare mig hvad scriptet gør ?
Og evt. et hint så jeg kan få det bygget i ASP ?
Her er php koden (med fiktive url´s):
--------------------------------------------------------
<?php
$api_host = "domain.org";
$api_port = 474;
$authcode = "mypass";
$res = fsockopen("tls://" . $api_host, $api_port);
stream_set_blocking($res, 0);
function build_request($content) {
$namespace = "http://www.url.org/ns";
$doc = $content->ownerDocument;
$whapi = $doc->createElement("whapi");
$whapi->setAttribute("xmlns", $namespace);
$doc->appendChild($whapi);
$c = $doc->createElement('command');
$whapi->appendChild($c);
$c->appendChild($content);
$output = $doc->saveXML();
return $output;
}
function send_request($output) {
global $res;
fwrite($res, $output);
$content = "";
while(true) {
$part = fread($res, 8192);
$content.=$part;
if(preg_match('/<\/whapi>/', $content)) break;
}
if($content) {
$result=array();
$parser = xml_parser_create();
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
xml_parse_into_struct($parser, $content, $result);
return $result;
} else {
// Error handling
throw new Exception("Invalid XML received: " . $content);
}
}
function build_login($authcode) {
$doc = new DOMDocument();
$content = $doc->createElement("log-in");
$authcode_element = $doc->createElement('authcode');
$authcode_element->appendChild($doc->createTextNode($authcode));
$content->appendChild($authcode_element);
return $content;
}
function parse_reason($result) {
foreach($result as $tag)
if($tag['tag']=="reason")
return $tag['attributes']['code'] . ":" . $tag['value'];
}
function handle_login_result($result) {
foreach($result as $tag) {
if($tag['tag']=="result" && $tag['type']!="close" &&
$tag['attributes']['code']!=1)
throw new Exception("Failed to log in!: " .
parse_reason($result));
if($tag['tag']=="session-id") return $tag['value'];
}
}
try {
$content = build_login($authcode);
$xml = build_request($content);
$result = send_request($xml);
$session_id = handle_login_result($result);
$doc = new DOMDocument();
$content =
$doc->createElementNS("http://www.url.org/packages", "list");
$xml = build_request($content);
$result = send_request($xml);
$target_level = 0;
foreach($result as $tag) {
if($tag['tag']=="result" && $tag['type']!="close" &&
$tag['attributes']['code']!=1)
throw new Exception("Failed to list packages: " .
parse_reason($result));
if($target_level) {
if($tag['level']<=$target_level and
$tag['type']=='close') {
$target_level=0;
echo $package_id . " ". $domain_name . "<br/>";
} else {
if($tag['tag']=="package:package-id") $package_id =
$tag['value'];
else if($tag['tag']=="domain-name") $domain_name =
$tag['value'];
}
}
if($tag['tag']=="package:package") $target_level =
$tag['level'];
}
} catch(Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
}
fclose($res);
?>
--------------------------------------------------------
Med i manualen er også et XML eksempel:
--------------------------------------------------------
<?xml version="1.0"?>
<whapi xmlns="http://www.url.org/ns"
xmlns:package="http://www.url.org/packages">
<command>
<package:list/>
</command>
</whapi>
--------------------------------------------------------
Jeg er vare helt blank på hvordan jeg får afsendt det XML via ASP
og derefter modtage resultatet.
Håber i kan hjælpe mig :-) På forhånd takker.