Puntos finais da API de UPS e código de proba PHP de mostra

ups api endpoints validación de enderezos de código de proba php

Estamos traballando con a WooCommerce cliente agora cuxo Envío UPS a validación de enderezos e os cálculos dos custos de envío deixaron de funcionar. O primeiro problema que identificamos foi que o complemento de envío de UPS que tiñan estaba desactualizado e que o dominio principal da empresa que o desenvolveu tiña malware... iso nunca é un bo sinal. Entón, compramos o Complemento UPS de WooCommerce xa que está ben apoiado polos desenvolvedores de Woocommerce.

Como o sitio non validaba enderezos nin integraba o envío, o noso primeiro paso foi verificar que a interface de programación da aplicación UPS (API) estaba activo e operativo. UPS ten un bo sitio para comprobar estado da súa API.

Dado que a API non parecía estar feita, o noso seguinte paso foi depurar o problema localmente. Curiosamente, ningún complemento tiña rexistro nin proba para ver se a integración de envío de UPS funcionaba realmente. Incluso a configuración de depuración non proporcionou ningún comentario, nin os nosos ficheiros de rexistro. Entón, para probar a API, tiven que programar un script para probar a API.

Descarguei o Kit de programador de API de UPS… que incluía mostras de código… e estaba confuso coma sempre. A documentación é limitada, os puntos finais para a API nin sequera estaban listados e as mostras de código non están ben documentadas.

Descarga o kit para desenvolvedores de API de UPS

Como resultado, tiven que investigar... o primeiro foi identificar os puntos finais para a súa API. Atopei puntos finais de proba documentados, escribín o meu código e probeino... sen éxito. Un pouco máis e descubrín que os puntos finais de proba eran basicamente inútiles. Uf.

Puntos finales da API de UPS

Puiden atopar un fío nun sitio de desenvolvemento que enumeraba o Puntos finais de produción da 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

O máis sinxelo de probar é Validación do enderezo (negriña enriba) polo que usei o código proporcionado para escribir un pequeno script PHP que pasaba o enderezo e respondeu se foi ou non exitoso ou non. Aquí tes o código no caso de que queiras usalo:

Ficheiro de proba PHP da API de UPS para a validación de enderezos

Aquí está o script PHP actualizado para probar o punto final da API UPS de validación de enderezos:

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

Este script mostrarache polo menos se as túas credenciais están a traballar ou non co punto final de validación de enderezos da API de UPS. Denme conta que a metodoloxía PHP (fopen) para publicar na súa API é un pouco antiga neste exemplo anterior... pero só quería que o seu código de proba funcione.

Divulgación: estou a usar o meu WooCommerce ligazóns de afiliados neste artigo.