Puntos finais da API de UPS e código de proba PHP de mostra
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: Martech Zone está a usar o seu WooCommerce ligazóns de afiliados neste artigo.