¿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.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)
/* p >
* 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