Tässä on esimerkki Matkahuollon XML-rajapinnan käyttämisestä. Koodi on kirjoitettu Matkahuollon oman esimerkkikoodin pohjalta mutta huomattavasti lyhyemmin, selvemmin ja paremmin.

Matkahuolto.php
<?php

class MatkahuoltoException extends Exception {
}

class Matkahuolto {
	// Pyynnössä tarvittavat kentät
	private static $shipment_vars = array('MessageType', 'ShipmentNumber', 'ShipmentDate', 'Weight', 'Volume', 'Packages', 'SenderId', 'SenderName1', 'SenderName2', 'SenderAddress', 'SenderPostal', 'SenderCity', 'SenderContactName', 'SenderContactNumber', 'SenderEmail', 'SenderReference', 'DeparturePlaceCode', 'DeparturePlaceName', 'ReceiverId', 'ReceiverName1', 'ReceiverName2', 'ReceiverAddress', 'ReceiverPostal', 'ReceiverCity', 'ReceiverContactName', 'ReceiverContactNumber', 'ReceiverEmail', 'ReceiverReference', 'DestinationPlaceCode', 'DestinationPlaceName', 'PayerCode', 'Remarks', 'ProductCode', 'ProductName', 'Pickup', 'PickupPayer', 'PickupRemarks', 'Delivery', 'DeliveryPayer', 'DeliveryRemarks', 'CODSum', 'CODCurrency', 'CODAccount', 'CODReference', 'Goods', 'VAKCode', 'VAKDescription', 'DocumentType');

	// Vastauksen kentät
	private static $response_vars = array('ShipmentNumber', 'SenderReference', 'ShipmentPdf', 'ErrorNbr', 'ErrorMsg');

	// Puuttuvien muuttujien hakeminen
	public function __get($x) {
		if (in_array($x, self::$shipment_vars) || in_array($x, self::$response_vars)) {
			return null;
		}
		throw new MatkahuoltoException("Unknown variable: $x");
	}

	// Puuttuvien muuttujien asettaminen
	public function __set($x, $value) {
		if (in_array($x, self::$shipment_vars) || in_array($x, self::$response_vars)) {
			return $this->$x = $value;
		}
		throw new MatkahuoltoException("Unknown variable: $x");
	}

	// Pyynnön lähetys
	public function sendRequest($user, $password, $url) {
		if (!class_exists("XMLWriter")) {
			throw new MatkahuoltoException("XMLWriter missing");
		}
		if (!class_exists("XMLReader")) {
			throw new MatkahuoltoException("XMLReader missing");
		}

		// Luodaan pyyntö.
		$xml = new XMLWriter();
		$xml->openMemory();
		$xml->startDocument('1.0');
		$xml->startElement('MHShipmentRequest');
		$xml->writeElement("Version", "1.0");
		$xml->writeElement("pUserId", $user);
		$xml->writeElement("Password", $password);
		$xml->startElement('Shipment');
		foreach (self::$shipment_vars as $x) if ($this->$x !== null) {
			$xml->writeElement($x, $this->$x);
		}
		$xml->endElement();
		$xml->endElement();
		$xml->endDocument();
		$xml = $xml->flush();

		// Lähetetään pyyntö.
		$ctx = stream_context_create(array("http" => array(
			"method" => "POST",
			"content" => $xml,
			"header" => "Content-Type: text/xml",
			"timeout" => 10,
		)));
		$data = @file_get_contents($url, null, $ctx);
		if ($data === false) {
			$tmp = error_get_last();
			throw new MatkahuoltoException($tmp["message"]);
		}

		// Tulkitaan vastaus.
		$xml = new XMLReader();
		$xml->XML($data);
		foreach (array_diff(self::$response_vars, self::$shipment_vars) as $x) {
			$this->$x = null;
		}
		while ($xml->read()) {
			if ($xml->nodeType == 1) {
				if (in_array($name = $xml->name, self::$response_vars)) {
					$xml->read();
					$this->$name = $xml->value;
				}
			}
		}
		if ($this->ErrorNbr) {
			throw new MatkahuoltoException("{$this->ErrorNbr}: {$this->ErrorMsg}");
		}

		// Puretaan PDF.
		$this->ShipmentPdf = base64_decode($this->ShipmentPdf);
	}

	// PDF:n näyttäminen
	public function outputPDF() {
		if (headers_sent()) {
			throw new MatkahuoltoException("Headers already sent");
		}
		header("Content-Type: application/pdf");
		header("Content-Length: ".strlen($this->ShipmentPdf));
		header("Content-Disposition: attachment; filename=\"{$this->ShipmentNumber}.pdf\"");
		echo $this->ShipmentPdf;
	}
}
pdf.php
<?php
require_once "Matkahuolto.php";

$mh = new Matkahuolto();

$mh->MessageType = "N";
$mh->Weight = "3.25";
$mh->Packages = "2";
$mh->SenderId = "09430023";
$mh->ReceiverName1 = "Metabolix";
$mh->ReceiverPostal = "00280";
$mh->ReceiverCity = "HELSINKI";
$mh->ProductCode = "30";

try {
	$mh->sendRequest("09430023", "456", "https://mhhkiweb1.matkahuolto.fi/scripts101c/mhshipmentxmltesti.wsc/ovtinxml");
	$mh->outputPDF();
} catch (MatkahuoltoException $e) {
	header("Content-Type: text/plain");
	echo $e->getMessage();
}

Esimerkin on tehnyt Lauri Kenttä (nimimerkki Metabolix). Älä kopioi, jos et ymmärrä koodia!