UPS API-Endpunkte und Beispiel-PHP-Testcode

ups api endpoints php testcode Adressvalidierung

Wir arbeiten mit einem WooCommerce Kunde gerade dessen UPS-Versand Adressvalidierung und Versandkostenberechnung funktionierten nicht mehr. Das erste Problem, das wir identifizierten, war, dass das UPS-Versand-Plug-in, das sie hatten, veraltet war und die Kerndomäne des Unternehmens, das es entwickelt hatte, Malware enthielt … das ist nie ein gutes Zeichen. Also kauften wir die WooCommerce UPS-Plugin da es von den Entwicklern von Woocommerce gut unterstützt wird.

Da die Website weder Adressen validiert noch den Versand integriert, bestand unser erster Schritt darin, zu überprüfen, ob die UPS Anwendungsprogrammierschnittstelle (API) war betriebsbereit. UPS hat eine nette Seite zum Überprüfen der Status seiner API.

Da die API anscheinend noch nicht fertig war, bestand unser nächster Schritt darin, das Problem lokal zu debuggen. Interessanterweise hatte kein Plugin eine Protokollierung oder einen Test, um zu sehen, ob die UPS-Versandintegration tatsächlich funktionierte. Auch die Debug-Einstellung lieferte kein Feedback, unsere Logfiles auch nicht. Um die API zu testen, musste ich also ein Skript programmieren, um die API tatsächlich zu testen.

Ich habe die UPS API Developer Kit… die Codebeispiele enthielt … und war wie immer verwirrt. Die Dokumentation ist begrenzt, die Endpunkte für die API wurden nicht einmal aufgelistet, und die Codebeispiele sind nicht gut dokumentiert.

Laden Sie das UPS API Developer Kit herunter

Infolgedessen musste ich etwas graben … das erste war, Endpunkte für ihre API zu identifizieren. Ich habe dokumentierte Testendpunkte gefunden, meinen Code geschrieben und ihn getestet … ohne Erfolg. Ein wenig mehr Graben und ich fand heraus, dass die Testendpunkte im Grunde nutzlos waren. Pfui.

UPS API-Endpunkte

Ich konnte auf einer Entwicklungsseite einen Thread finden, der die UPS API-Produktionsendpunkte:

  • https://onlinetools.ups.com/ups.app/xml/TimeInTransit
  • https://onlinetools.ups.com/ups.app/xml/License
  • https://onlinetools.ups.com/ups.app/xml/QVEvents
  • https://onlinetools.ups.com/ups.app/xml/Register
  • https://onlinetools.ups.com/ups.app/xml/AV
  • https://onlinetools.ups.com/ups.app/xml/ShipAccept
  • https://onlinetools.ups.com/ups.app/xml/Void
  • https://onlinetools.ups.com/ups.app/xml/XAV
  • https://onlinetools.ups.com/ups.app/xml/Track
  • https://onlinetools.ups.com/ups.app/xml/Rate
  • https://onlinetools.ups.com/ups.app/xml/ShipConfirm
  • https://onlinetools.ups.com/ups.app/xml/LabelRecovery

Am einfachsten zu testen ist die Adressüberprüfung (oben fett) Endpunkt, also habe ich den bereitgestellten Code verwendet, um ein kleines PHP-Skript zu schreiben, das die Adresse übergab und antwortete, ob es erfolgreich war oder nicht. Hier ist der Code, falls Sie ihn verwenden möchten:

UPS API PHP-Testdatei für die Adressvalidierung

Hier ist das aktualisierte PHP-Skript zum Testen des Adressvalidierungs-UPS-API-Endpunkts:

<html>
<head>UPS Address Validation Test</head>
<body>Response: <?php

// Configuration
$accessLicenseNumber = "Insert Your API Key";
$userId = "Insert Your User ID";
$password = "Insert Your Password";

$endpointurl = 'https://onlinetools.ups.com/ups.app/xml/AV';

try {
	
	// Create AccessRequest XMl
	$accessRequestXML = new SimpleXMLElement ( "<AccessRequest></AccessRequest>" );
	$accessRequestXML->addChild ( "AccessLicenseNumber", $accessLicenseNumber );
	$accessRequestXML->addChild ( "UserId", $userId );
	$accessRequestXML->addChild ( "Password", $password );
	
	// Create AddressValidationRequest XMl
	$avRequestXML = new SimpleXMLElement ( "<AddressValidationRequest ></AddressValidationRequest >" );
	$request = $avRequestXML->addChild ( 'Request' );
	$request->addChild ( "RequestAction", "AV" );
	
	$address = $avRequestXML->addChild ( 'Address' );
	$address->addChild ( "City", "ALPHARETTA" );
	$address->addChild ( "PostalCode", "300053778" );
	$requestXML = $accessRequestXML->asXML () . $avRequestXML->asXML ();
	
	$form = array (
			'http' => array (
					'method' => 'POST',
					'header' => 'Content-type: application/x-www-form-urlencoded',
					'content' => "$requestXML" 
			) 
	);
	
	// get request
	$request = stream_context_create ( $form );
	$browser = fopen ( $endpointurl, 'rb', false, $request );
	if (! $browser) {
		throw new Exception ( "Connection failed." );
	}
	
	// get response
	$response = stream_get_contents ( $browser );
	fclose ( $browser );
	
	if ($response == false) {
		throw new Exception ( "Bad data." );
	} else {
		
		// get response status
		$resp = new SimpleXMLElement ( $response );
		echo $resp->Response->ResponseStatusDescription . "\n";
	}
	
} catch ( Exception $ex ) {
	echo $ex;
}

?>
</body>
</html>

Dieses Skript zeigt Ihnen zumindest, ob Ihre Anmeldeinformationen mit dem UPS API-Adressvalidierungsendpunkt funktionieren oder nicht. Mir ist klar, dass die PHP-Methodik (fopen) zum Posten an ihre API in diesem Beispiel oben etwas veraltet ist … aber ich wollte nur ihren Testcode zum Laufen bringen.

Offenlegung: Ich benutze meine WooCommerce Affiliate-Links in diesem Artikel.