UPS API krajnje tačke i uzorak PHP test koda

ups api endpoints php provjera valjanosti adrese koda

Radimo sa a WooCommerce trenutno klijent čiji UPS dostava validacija adrese i kalkulacije troškova dostave su prestale da rade. Prvi problem koji smo identifikovali bio je UPS dodatak za isporuku koji su imali bio zastareo i osnovna domena kompanije koja ga je razvila imala je zlonamerni softver... to nikada nije dobar znak. Dakle, kupili smo WooCommerce UPS dodatak budući da je dobro podržan od strane programera Woocommercea.

S obzirom da web lokacija ne potvrđuje validaciju adresa niti integrira dostavu, naš prvi korak je bio da provjerimo da li je programski interfejs UPS aplikacije (API) je bio pokrenut i operativan. UPS ima lijepu stranicu za provjeru status svog API-ja.

Pošto se činilo da API nije urađen, naš sljedeći korak je bio da lokalno otklonimo grešku. Zanimljivo je da nijedan dodatak nije imao nikakvo evidentiranje niti testiranje da se vidi da li integracija UPS isporuke zaista radi. Čak ni postavka za otklanjanje grešaka nije dala nikakvu povratnu informaciju, kao ni naši log fajlovi. Dakle, da bih testirao API, morao sam da programiram skriptu da stvarno testiram API.

Preuzeo sam UPS API Developer Kit… koji je uključivao uzorke koda… i bio je zbunjen kao i uvijek. Dokumentacija je ograničena, krajnje tačke za API nisu čak ni navedene, a uzorci koda nisu dobro dokumentovani.

Preuzmite UPS API Developer Kit

Kao rezultat toga, morao sam malo da kopam... prvo je bilo da identifikujem krajnje tačke za njihov API. Našao sam dokumentirane krajnje tačke testiranja, napisao svoj kod i testirao ga… bez uspjeha. Još malo kopanja i otkrio sam da su krajnje tačke testiranja u osnovi beskorisne. Ugh.

UPS API krajnje tačke

Uspio sam pronaći temu na razvojnoj stranici koja je navela Krajnje tačke proizvodnje UPS API-ja:

  • 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

Najlakši za testiranje je Validacija adrese (podebljano iznad) krajnja tačka pa sam koristio dobijeni kod da napišem malu PHP skriptu koja je prosledila adresu i odgovorila da li je uspešna ili neuspešna. Evo koda u slučaju da ga želite koristiti:

UPS API PHP test fajl za validaciju adrese

Evo ažurirane PHP skripte za testiranje krajnje tačke UPS API za validaciju adrese:

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

Ova skripta će vam barem pokazati da li vaši akreditivi rade sa krajnjom točkom UPS API Validacije adrese. Shvaćam da je PHP metodologija (fopen) za objavljivanje na njihovom API-ju malo zastarjela u ovom primjeru iznad... ali samo sam želio da njihov testni kod radi.

Disclosure: Martech Zone koristi svoj WooCommerce partnerske veze u ovom članku.