UPS API -päätepisteet ja esimerkki PHP-testikoodista

ups api päätepisteiden php-testikoodin osoitteen vahvistus

Työskentelemme a WooCommerce kenen asiakas juuri nyt UPS toimitus osoitteen vahvistus ja toimituskustannuslaskelmat lakkasivat toimimasta. Ensimmäinen havaitsemamme ongelma oli heidän käytössään ollut UPS-toimituslaajennus, joka oli vanhentunut ja sen kehittäneen yrityksen ydinverkkotunnuksessa oli haittaohjelmia… se ei ole koskaan hyvä merkki. Eli ostimme WooCommerce UPS -laajennus koska Woocommercen kehittäjät tukevat sitä hyvin.

Koska sivusto ei vahvista osoitteita eikä integroi toimitusta, ensimmäinen askel oli varmistaa, että UPS:n sovellusohjelmointirajapinta (API) oli valmis ja toiminnassa. UPS:llä on hyvä sivusto tarkistaa sen API tila.

Koska API ei näyttänyt olevan valmis, seuraava vaihe oli ongelman paikallistaminen. Mielenkiintoista kyllä, kummallakaan laajennuksella ei ollut kirjauksia tai testauksia, jotta voitaisiin nähdä, toimiko UPS-toimitusintegraatio todella. Edes virheenkorjausasetus ei antanut palautetta, eivät myöskään lokitiedostomme. Joten API:n testaamiseksi minun piti ohjelmoida komentosarja, joka todella testaa API:ta.

Olen ladannut UPS API Developer Kit…joka sisälsi koodinäytteitä… ja oli hämmentynyt kuten aina. Dokumentaatio on rajallinen, API:n päätepisteitä ei edes listattu, ja koodinäytteet eivät ole hyvin dokumentoituja.

Lataa UPS API Developer Kit

Seurauksena oli, että minun täytyi kaivella… ensinnäkin oli tunnistaa päätepisteet heidän APIlle. Löysin dokumentoidut testauspäätepisteet, kirjoitin koodini ja testasin sen… tuloksetta. Vielä vähän kaivamista ja huomasin, että testauspäätepisteet olivat periaatteessa hyödyttömiä. Oho.

UPS API -päätepisteet

Löysin ketjun kehityssivustolta, jossa lueteltiin UPS API -tuotannon päätepisteet:

  • 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

Helpoin testattava on Osoitteen vahvistus (lihavoitu yllä) päätepisteeseen, joten käytin toimitettua koodia pienen PHP-komentosarjan kirjoittamiseen, joka välitti osoitteen ja vastasi, oliko se onnistunut vai epäonnistunut. Tässä on koodi siinä tapauksessa, että haluat käyttää sitä:

UPS API PHP-testitiedosto osoitteen vahvistamista varten

Tässä on päivitetty PHP-skripti osoitteen vahvistamisen UPS-sovellusliittymän päätepisteen testaamiseen:

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

Tämä komentosarja näyttää ainakin, toimivatko valtuustietosi UPS API Address Validation -päätepisteen kanssa. Ymmärrän, että PHP-metodologia (fopen) lähettää heidän API:lleen on hieman vanhentunut tässä yllä olevassa esimerkissä… mutta halusin vain saada heidän testikoodinsa toimimaan.

Ilmoitus: Käytän omaa WooCommerce kumppanilinkkejä tässä artikkelissa.