Colección de citas famosas - Slogan de motivación - ¿Qué significa la firma de la API de Android?

¿Qué significa la firma de la API de Android?

La firma de la API de Android significa que cuando se llama a la API, se debe generar una cadena de acuerdo con los parámetros acordados. Después de recibirla, la otra parte verificará los parámetros, aceptará la solicitud y devolverá el resultado. si es legal.

Las URL de acceso válidas de todas las API de Android incluyen las siguientes tres partes:

1. Ruta de acceso a recursos, como /v1/deal/find_deals

<. p>2 Parámetros de solicitud: es decir, el nombre del parámetro requerido y el valor del parámetro param=valor correspondiente a la API, varios parámetros de solicitud están conectados con &

Por ejemplo, deal_id=1-85462&appkey=00000;

3. Cadena de firma, generada por el algoritmo de firma

El algoritmo de firma es el siguiente:

1. Organice todos los parámetros de solicitud excepto appkey en orden ascendente del diccionario;

2. Concatene la tabla de parámetros ordenada anteriormente con cadenas, como key1value1key2value2key3value3...keyNvalueN

3. Utilice la clave de la aplicación como prefijo y el secreto de la aplicación como sufijo. Cálculo SHA-1 en la cadena y conversión a codificación hexadecimal;

4. Después de convertir a mayúsculas, se obtiene la cadena de firma

Después de obtener la cadena de firma, agréguela. a la URL correspondiente como parámetro de signo, puede acceder a la API normalmente.

Nota: asegúrese de que la codificación de datos de la solicitud HTTP debe estar en formato UTF-8 y que la URL también debe estar en formato de codificación UTF-8.

Código de referencia:

// Definir appKey y appSecret obtenidos por la aplicación

String appkey = "XXXXXXXX"

String secret; = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";

String apiUrl = "/v1/business/find_businesses";

// Crear tabla de parámetros

Map paramMap = nuevo HashMap();

paramMap.put("formato", "json");

paramMap.put("ciudad", "Shanghai")

paramMap.put("latitud", "31.21524");

paramMap.put("longitud", "121.420033"); put ("categoría", "Gourmet");

paramMap.put("región", "Distrito de Changning"); )

paramMap.put("radio", "2000");

paramMap.put("offset_type", "0"); . put("has_coupon", "1");

paramMap.put("has_deal", "1");

paramMap.put("palabra clave", "comida tailandesa" " );

paramMap.put("sort", "7");

// Clasificación de diccionario de nombres de parámetros

String[] keyArray = paramMap .keySet().toArray(new String[0]);

Arrays.sort(keyArray);

// Empalme de cadenas de nombre-valor de parámetros ordenados

StringBuilder stringBuilder = new StringBuilder();

stringBuilder.append(appkey);

for (Clave de cadena: keyArray)

{

stringBuilder.append(key).append(paramMap.get(key));

}

stringBuilder.append(secret); = stringBuilder.toString();

// Ejemplo de conexión de cadena

// XXXXXXXXcategoría comida ciudad Shanghai formatojsonhas_coupon1has_deal1keyword Comida tailandesalatitude31.21524limit20longitude121.420033offset_type0radius2000regionChangning Districtsort7XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

// SHA -1 codificación, utilizada aquí

Usando el códec Apache, puede obtener la firma (shaHex() primero convertirá la codificación china a UTF8 y luego realizará el cálculo sha1. Preste atención a la conversión de codificación UTF8 cuando utilice otros paquetes de herramientas)

/*

* El siguiente código de firma sha1 tiene el mismo efecto

* byte[] sha = org.apache.commons.codec.digest.DigestUtils.sha(org.apache.commons.codec. binario.StringUtils. getBytesUtf8(códigos));

* Signo de cadena = org.apache.commons.codec.binary.Hex.encodeHexString(sha).toUpperCase(); /

Signo de cadena = org.apache.commons.codec.digest.DigestUtils.shaHex(codes).toUpperCase()

//Ejemplo de firma

//7D78381BC58E1DB1DBA4BD965916FE6B4D5DC892