UPS API-eindpunte en voorbeeld van PHP-toetskode

ups api eindpunte php toets kode adres validering

Ons werk met 'n WooCommerce kliënt op die oomblik wie se UPS gestuur adres validering en afleweringskosteberekeninge het opgehou werk. Die eerste kwessie wat ons geïdentifiseer het, was die UPS-versending-inprop wat hulle gehad het, was verouderd en die kerndomein vir die maatskappy wat dit ontwikkel het, het wanware gehad ... dit is nooit 'n goeie teken nie. So, ons het die WooCommerce UPS-inprop aangesien dit goed ondersteun word deur die ontwikkelaars van Woocommerce.

Met die webwerf wat nie adresse bevestig nie en ook nie versending integreer nie, was ons eerste stap om te verifieer dat die UPS-toepassingsprogrammeringskoppelvlak (API) was op en operasioneel. UPS het wel 'n goeie webwerf om die status van sy API.

Aangesien die API blykbaar nie gedoen is nie, was ons volgende stap om die probleem plaaslik te ontfout. Interessant genoeg, geen inprop het enige aantekening of toetsing gehad om te sien of die UPS-versendingsintegrasie werklik gewerk het nie. Selfs die ontfoutinstelling het geen terugvoer gegee nie, en ook nie ons loglêers nie. Dus, om die API te toets, moes ek 'n skrip programmeer om die API werklik te toets.

Ek het die UPS API-ontwikkelaarstel… wat kodemonsters ingesluit het … en was soos altyd verward. Die dokumentasie is beperk, die eindpunte vir die API is nie eens gelys nie, en die kodemonsters is nie goed gedokumenteer nie.

Laai die UPS API-ontwikkelaarstel af

Gevolglik moes ek bietjie grawe ... die eerste was om eindpunte vir hul API te identifiseer. Ek het gedokumenteerde toetseindpunte gevind, my kode geskryf en dit getoets ... sonder sukses. 'n Bietjie meer grawe en ek het uitgevind dat die toetseindpunte basies nutteloos was. Ugh.

UPS API eindpunte

Ek kon 'n draad op 'n ontwikkelingswebwerf vind wat die UPS API-produksie-eindpunte:

  • 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

Die maklikste een om te toets is die Adres validering (vet hierbo) eindpunt, so ek het die kode gebruik wat verskaf is om 'n klein PHP-skrif te skryf wat die adres geslaag het en gereageer het of dit suksesvol was of nie. Hier is die kode as jy dit wil gebruik:

UPS API PHP-toetslêer vir adresvalidering

Hier is die opgedateerde PHP-skrip vir die toets van die UPS API-eindpunt vir adresvalidering:

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

Hierdie skrif sal jou ten minste wys of jou geloofsbriewe met die UPS API-adresvalidasie-eindpunt werk of nie. Ek besef die PHP-metodologie (fopen) om na hul API te plaas, is 'n bietjie verouderd in hierdie voorbeeld hierbo ... maar ek wou net hul toetskode laat werk.

Openbaarmaking: ek gebruik my WooCommerce geaffilieerde skakels in hierdie artikel.