Points de terminaison de l'API UPS et exemple de code de test PHP

ups api endpoints php test code adresse validation

Nous travaillons avec un WooCommerce client en ce moment dont Expédition UPS la validation des adresses et les calculs des frais d'expédition ont cessé de fonctionner. Le premier problème que nous avons identifié était que le plug-in d'expédition UPS qu'ils avaient était obsolète et que le domaine principal de l'entreprise qui l'avait développé contenait des logiciels malveillants… ce n'est jamais bon signe. Donc, nous avons acheté le Plug-in WooCommerce UPS car il est bien pris en charge par les développeurs de Woocommerce.

Le site ne validant pas les adresses ni n'intégrant l'expédition, notre première étape a été de vérifier que l'interface de programmation de l'application UPS (API) était en place et opérationnel. UPS a un bon site pour vérifier le statut de son API.

Étant donné que l'API ne semblait pas terminée, notre prochaine étape consistait à déboguer le problème localement. Chose intéressante, aucun plugin n'avait de journalisation ni de test pour voir si l'intégration de l'expédition UPS fonctionnait réellement. Même le paramètre de débogage n'a fourni aucun retour, pas plus que nos fichiers journaux. Donc, afin de tester l'API, j'ai dû programmer un script pour tester réellement l'API.

J'ai téléchargé le Kit de développement API UPS… qui comprenait des exemples de code… et était plus confus que jamais. La documentation est limitée, les points de terminaison de l'API n'étaient même pas répertoriés et les exemples de code ne sont pas bien documentés.

Télécharger le kit de développement de l'API UPS

En conséquence, j'ai dû faire quelques recherches… la première consistait à identifier les points de terminaison pour leur API. J'ai trouvé des points de terminaison de test documentés, j'ai écrit mon code et je l'ai testé… sans succès. En creusant un peu plus, j'ai découvert que les points de terminaison de test étaient fondamentalement inutiles. Pouah.

Points de terminaison de l'API UPS

J'ai pu trouver un fil sur un site de développement qui répertorie les Points de terminaison de production de l'API UPS:

  • 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

Le plus facile à tester est le Validation d'adresse (gras ci-dessus) point de terminaison, j'ai donc utilisé le code fourni pour écrire un petit script PHP qui transmettait l'adresse et répondait s'il avait réussi ou échoué. Voici le code au cas où vous voudriez l'utiliser :

Fichier de test PHP de l'API UPS pour la validation des adresses

Voici le script PHP mis à jour pour tester le point de terminaison de l'API UPS de validation d'adresse :

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

Ce script vous montrera au moins si vos informations d'identification fonctionnent ou non avec le point de terminaison UPS API Address Validation. Je me rends compte que la méthodologie PHP (fopen) pour publier sur leur API est un peu vieillie dans cet exemple ci-dessus… mais je voulais juste que leur code de test fonctionne.

Divulgation: j'utilise mon WooCommerce liens affiliés dans cet article.