es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Generando una Firma AWS (ShipLogic)

Entonces, estoy implementando la API de ship-logic en mi programa y nunca he trabajado con la autenticación de AWS. He investigado en la documentación y he hecho lo siguiente:

<?php
$host = "api.shiplogic.com";
$accessKey = '*';
$secretKey = '*';
$requestUrl = 'https://api.shiplogic.com';
$uri = '/rates';
$httpRequestMethod = 'POST';
$data = '{"collection address": {"company": "Kenesis Test","street address": " 32 Goud Street, Goedeburg, Benoni","local area": "Benoni","city": "Johannesburg","country": "ZA","code": "1501"},"delivery address": {"street address": "17 bloomberg street","local area": "minnebron","city": "brakpan","code": "1541"},"parcels": [{"submitted lengthcm": 1,"submitted widthcm": 1,"submitted heightcm": 1,"submitted weightkg": 0.1}],"declared_value": 99}';

require 'vendor/autoload.php';
use Aws\Signature\SignatureV4;
use Aws\Credentials\Credentials;
use GuzzleHttp\Client;
use GuzzleHttp\Psr7\Request;
use Psr\Http\Client\ClientInterface;

$signature = new SignatureV4('execute-api', 'af-south-1');
$credentials = new Credentials($accessKeyId, $secretAccessKey);
$psr7Request = new Request($httpRequestMethod, $requestUrl.$uri, ["content-type"=>"application/json"], $data);
$client = new Client([$requestUrl, 'timeout' => 30]);
$sr = $signature->signRequest($psr7Request, $credentials);
$response = $client->send($sr);

//var_dump($response);
?>

Ahora es un simple fragmento de código pero constantemente obtengo una respuesta 403. Cuando hago la misma solicitud exacta con PostMan, la respuesta vuelve exitosamente.

¿Puede algún experto en AWS ayudarme y señalarme si estoy haciendo algo mal? Agradecería mucho la ayuda.

PD: Estoy usando credenciales de prueba aquí, no se preocupen.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que estás intentando implementar la autenticación AWS Signature Version 4, que es necesaria al realizar solicitudes API a los servicios de AWS. Sin embargo, dado que estás utilizando la API de ShipLogic, no está claro si ellos utilizan autenticación AWS para su API. ¿Has confirmado con ShipLogic si su API requiere autenticación AWS?

    Suponiendo que ShipLogic utiliza la autenticación AWS, generalmente una respuesta 403 significa un error de autenticación o un error de permiso. Aquí tienes algunas cosas que debes verificar:

    • Verifica nuevamente que estés utilizando las claves de acceso y secreto correctas para tus credenciales de API. Puedes confirmarlo consultando la documentación de ShipLogic o contactando a su soporte.
    • Asegúrate de que la política IAM asociada a tus credenciales de API otorgue permiso para utilizar la API de ShipLogic. Específicamente, debería incluir permiso para invocar la función lambda execute-api en la región af-south-1.
    • Verifica que el reloj de tu sistema esté sincronizado correctamente. AWS requiere que el reloj del sistema esté dentro de unos pocos minutos de la hora actual.

    Si has intentado todo lo anterior y aún sigues obteniendo un error 403, puede ser necesario contactar al soporte de ShipLogic para obtener más ayuda.

Comments are closed.