Koncové body UPS API a ukázkový testovací kód PHP

ups api endpoints php ověření adresy testovacího kódu

Pracujeme s a WooCommerce klient právě teď jehož Zásilka UPS přestalo fungovat ověřování adresy a kalkulace nákladů na dopravu. První problém, který jsme identifikovali, byl zastaralý plugin UPS pro přepravu, který měli, a hlavní doména společnosti, která jej vyvinula, měla malware… to nikdy není dobré znamení. Tak jsme koupili Plugin WooCommerce UPS protože je dobře podporován vývojáři Woocommerce.

Vzhledem k tomu, že stránka neověřuje adresy ani neintegruje zásilku, bylo naším prvním krokem ověřit, že rozhraní pro programování aplikací UPS (API) byl v provozu a funkční. UPS má pěkné stránky pro kontrolu stav jeho API.

Vzhledem k tomu, že se nezdálo, že by API bylo hotové, naším dalším krokem bylo odladit problém lokálně. Je zajímavé, že žádný plugin neměl žádné protokolování ani testování, aby se zjistilo, zda integrace přepravy UPS skutečně fungovala. Ani nastavení ladění neposkytlo žádnou zpětnou vazbu, stejně jako naše soubory protokolu. Abych tedy API otestoval, musel jsem naprogramovat skript, který API skutečně otestuje.

I stáhli UPS API Developer Kit...který obsahoval ukázky kódu... a byl zmatený jako vždy. Dokumentace je omezená, koncové body pro API nebyly ani uvedeny a ukázky kódu nejsou dobře zdokumentovány.

Stáhněte si sadu UPS API Developer Kit

V důsledku toho jsem musel udělat nějaké kopání… první bylo identifikovat koncové body pro jejich API. Našel jsem zdokumentované testovací koncové body, napsal svůj kód a otestoval jej... bez úspěchu. Trochu více kopání a zjistil jsem, že testovací koncové body byly v podstatě k ničemu. Fuj.

Koncové body UPS API

Podařilo se mi najít vlákno na vývojářském webu, kde je uvedeno Produkční koncové body UPS API:

  • 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

Nejjednodušší test je Ověření adresy (tučně nahoře) koncový bod, takže jsem použil poskytnutý kód k napsání malého PHP skriptu, který předal adresu a odpověděl, zda byl úspěšný nebo selhal. Zde je kód v případě, že jej chcete použít:

Testovací soubor PHP API UPS pro ověření adresy

Zde je aktualizovaný skript PHP pro testování koncového bodu UPS API pro ověření adresy:

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

Tento skript vám alespoň ukáže, zda vaše přihlašovací údaje fungují nebo nefungují s koncovým bodem ověřování adresy API UPS. Uvědomuji si, že metodika PHP (fopen) pro posílání do jejich API je v tomto příkladu výše trochu zastaralá... ale jen jsem chtěl, aby jejich testovací kód fungoval.

Zveřejnění: Používám svůj WooCommerce affiliate odkazy v tomto článku.