Puntos finales de la API de UPS y código de prueba de PHP de muestra

ups api endpoints php prueba código dirección validación

estamos trabajando con un WooCommerce cliente en este momento cuyo envío de UPS la validación de direcciones y los cálculos de costos de envío dejaron de funcionar. El primer problema que identificamos fue que el complemento de envío de UPS que tenían estaba desactualizado y el dominio central de la empresa que lo desarrolló tenía malware... eso nunca es una buena señal. Entonces, compramos el Complemento UPS de WooCommerce ya que está bien respaldado por los desarrolladores de Woocommerce.

Dado que el sitio no validaba direcciones ni integraba envíos, nuestro primer paso fue verificar que la interfaz de programación de aplicaciones de UPS (API) estaba en funcionamiento. UPS tiene un buen sitio para comprobar el estado de su API.

Dado que la API no parecía estar lista, nuestro siguiente paso fue depurar el problema localmente. Curiosamente, ninguno de los complementos tuvo ningún registro ni prueba para ver si la integración de envío de UPS realmente funcionó. Incluso la configuración de depuración no proporcionó ningún comentario, ni tampoco nuestros archivos de registro. Entonces, para probar la API, tuve que programar un script para probar la API.

He descargado el Kit para desarrolladores de API de UPS… que incluía muestras de código… y estaba tan confundido como siempre. La documentación es limitada, los puntos finales de la API ni siquiera se enumeraron y los ejemplos de código no están bien documentados.

Descargue el kit para desarrolladores de la API de UPS

Como resultado, tuve que investigar un poco... lo primero fue identificar puntos finales para su API. Encontré puntos finales de prueba documentados, escribí mi código y lo probé... sin éxito. Un poco más de excavación y descubrí que los puntos finales de prueba eran básicamente inútiles. Puaj.

Puntos finales de la API de UPS

Pude encontrar un hilo en un sitio de desarrollo que enumeraba los Puntos finales de producción de la API de 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

El más fácil de probar es el Validación de dirección (negrita arriba) punto final, así que usé el código provisto para escribir un pequeño script PHP que pasó la dirección y respondió si tuvo éxito o no. Aquí está el código en caso de que quieras usarlo:

Archivo de prueba PHP API de UPS para validación de direcciones

Aquí está el script PHP actualizado para probar el punto final de la API de UPS de validación de direcciones:

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

Esta secuencia de comandos al menos le mostrará si sus credenciales funcionan o no con el punto final de validación de direcciones de la API de UPS. Me doy cuenta de que la metodología PHP (fopen) para publicar en su API es un poco antigua en este ejemplo anterior... pero solo quería que su código de prueba funcionara.

Divulgación: estoy usando mi WooCommerce enlaces de afiliados en este artículo.