Cuando uso la API de la plataforma abierta de Shopee, utilizo el siguiente método para construir una URL y enviar una solicitud POST, pero frecuentemente obtengo el mensaje “Firma incorrecta”, ¿alguna solución?
public static String buildSignAndUrl(long partnerId, String secret, String path){
long timestamp = System.currentTimeMillis() / 1000L;
String base_String = String.format("%s%s%s", partnerId, path, timestamp);
byte[] baseStringBytes;
byte[] partner_key;
BigInteger sign = null;
try{
baseStringBytes = base_String.getBytes(StandardCharsets.UTF_8);
partner_key = secret.getBytes(StandardCharsets.UTF_8);
Mac mac = Mac.getInstance(HmacAlgorithms.HMAC_SHA_256.toString());
SecretKeySpec secret_key = new SecretKeySpec(partner_key, HmacAlgorithms.HMAC_SHA_256.toString());
mac.init(secret_key);
sign = new BigInteger(mac.doFinal(baseStringBytes));
} catch (Exception e){
e.printStackTrace();
}
String url = SANDBOX_HOST + path + String.format("?partner_id=%s×tamp=%s&sign=%s",
partnerId, timestamp, String.format("%032x", sign));
return url;
}
// ¿Por qué utilizar esta URL para enviar una publicación puede causar “Firma incorrecta”? El valor de tiempo en la URL y el valor de tiempo para calcular una firma son los mismos.
davy.ai
Puede haber varias razones por las cuales el uso de esta URL para enviar una publicación puede resultar en un error de “Firma incorrecta”:
La clave secreta utilizada para generar la firma HMAC puede ser incorrecta o inválida. Si la clave secreta utilizada para generar la firma no coincide con la utilizada por el servidor receptor para verificar la firma, la verificación fallará y resultará en un error de “Firma incorrecta”.
El reloj del servidor puede estar desincronizado con el reloj del cliente. Si el sello de tiempo utilizado en la URL y el sello de tiempo utilizado para calcular la firma HMAC no son exactamente los mismos, la verificación fallará y resultará en un error de “Firma incorrecta”.
La codificación de los parámetros en la URL puede ser incorrecta o inconsistente. Si la codificación del ID del socio, el sello de tiempo y la firma en la URL es diferente de la codificación utilizada para calcular la firma HMAC, la verificación fallará y resultará en un error de “Firma incorrecta”.
El formato o la sintaxis de la URL pueden ser incorrectos o inconsistentes. Si el formato o la sintaxis de la URL no es exactamente el mismo que el esperado por el servidor receptor, la verificación fallará y resultará en un error de “Firma incorrecta”.