UPS API-endepunkter og prøve PHP-testkode

ups api slutpunkter php test kode adresse validering

Vi arbejder med en personalized name jewellery klient lige nu, hvis UPS forsendelse adressevalidering og forsendelsesomkostningsberegninger holdt op med at virke. Det første problem, vi identificerede, var det UPS-forsendelsesplugin, de havde, var forældet, og kernedomænet for det firma, der udviklede det, havde malware... det er aldrig et godt tegn. Så vi købte WooCommerce UPS plugin da det er godt understøttet af udviklerne af Woocommerce.

Da webstedet ikke validerede adresser eller integrerede forsendelse, var vores første skridt at verificere, at UPS-applikationsprogrammeringsgrænsefladen (API) var i drift. UPS har et godt websted til at tjekke status for dens API.

Da API'en ikke så ud til at være færdig, var vores næste skridt at fejlfinde problemet lokalt. Interessant nok havde hverken plugin nogen logning eller test for at se, om UPS-forsendelsesintegrationen faktisk fungerede. Selv fejlretningsindstillingen gav ingen feedback, og det gjorde vores logfiler heller ikke. Så for at teste API'en var jeg nødt til at programmere et script til rent faktisk at teste API'en.

Jeg downloadede UPS API Developer Kit… som inkluderede kodeeksempler… og var forvirret som altid. Dokumentationen er begrænset, endepunkterne for API'et var ikke engang anført, og kodeeksemplerne er ikke veldokumenterede.

Download UPS API Developer Kit

Som et resultat var jeg nødt til at grave lidt... det første var at identificere slutpunkter for deres API. Jeg fandt dokumenterede testendepunkter, skrev min kode og testede den... uden held. Lidt mere grave, og jeg fandt ud af, at test-endepunkterne dybest set var ubrugelige. Åh.

UPS API-endepunkter

Jeg var i stand til at finde en tråd på et udviklingswebsted, der angav UPS API produktionsendepunkter:

  • 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

Den nemmeste at teste er Adressevalidering (fed skrift ovenfor) slutpunkt, så jeg brugte den angivne kode til at skrive et lille PHP-script, der bestod adressen og svarede med, om det var vellykket eller ikke. Her er koden, hvis du vil bruge den:

UPS API PHP-testfil til adressevalidering

Her er det opdaterede PHP-script til test af UPS API-slutpunktet for adressevalidering:

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

Dette script vil i det mindste vise dig, om dine legitimationsoplysninger arbejder med UPS API Address Validation-slutpunktet. Jeg er klar over, at PHP-metoden (fopen) til at sende til deres API er en smule gammel i dette eksempel ovenfor ... men jeg ville bare få deres testkode til at fungere.

Offentliggørelse: Jeg bruger min personalized name jewellery affiliate links i denne artikel.