ID Mobile — Comparar la identidad del usuario sin OTP

Support DQE
Support DQE
  • Actualización
Matching without OTP - API ID Mobile

Utiliza este endpoint para comparar los datos enviados por el usuario con los datos del operador, sin requerir el consentimiento del usuario (OTP). Devuelve una puntuación de similitud para cada campo.

Related ID Mobile documentation:

Matching without OTP

Solicitud

Se admiten tanto GET como POST. Esta es una llamada de un solo paso — el resultado de la comparación se devuelve directamente en la respuesta, no se requiere página de consentimiento ni paso de recuperación.

{SERVER_ADDRESS} y {LICENCE_CODE} son proporcionados por DQE al crear la cuenta. {TOKEN} es el token de acceso obtenido del endpoint ID Mobile Access Token. Ponte en contacto con tu gestor de cuenta DQE para obtener la dirección del servidor y el código de licencia.
GEThttps://{SERVER_ADDRESS}/IDMOBILE/?number={NUM}&token={TOKEN}&mode={MODE}&name={NAME}&code_name={CODE_NAME}&licence={LICENCE_CODE}&user_infos={INFORMATION}&scope=matching_notp&redirect_uri={URL_REDIRECT}&country={COUNTRY}&format={FORMAT}&period={PERIOD}

Sustituye los valores entre llaves por tu propia información — consulta la tabla de parámetros más abajo.

Ejemplos de código

Comparar los datos de identidad enviados con los del operador — aquí user_infos se muestra como el marcador de posición {INFORMATION}; consulta el ejemplo completo debajo de la tabla de parámetros para ver su forma real en JSON.

curl "https://{SERVER_ADDRESS}/IDMOBILE/?number=33612345678&token={TOKEN}&mode=2&name=MYCOMPANY&licence={LICENCE_CODE}&user_infos={INFORMATION}&scope=matching_notp"
fetch("https://{SERVER_ADDRESS}/IDMOBILE/?" + new URLSearchParams({ number: "33612345678", token: "{TOKEN}", mode: "2", name: "MYCOMPANY", licence: "{LICENCE_CODE}", user_infos: "{INFORMATION}", scope: "matching_notp" })) .then(r => r.json()) .then(data => console.log(data));
import requests response = requests.get( "https://{SERVER_ADDRESS}/IDMOBILE/", params={ "number": "33612345678", "token": "{TOKEN}", "mode": "2", "name": "MYCOMPANY", "licence": "{LICENCE_CODE}", "user_infos": "{INFORMATION}", "scope": "matching_notp", }, ) print(response.json())
<?php $params = http_build_query([ 'number' => '33612345678', 'token' => '{TOKEN}', 'mode' => '2', 'name' => 'MYCOMPANY', 'licence' => '{LICENCE_CODE}', 'user_infos' => '{INFORMATION}', 'scope' => 'matching_notp', ]); $ch = curl_init("https://{SERVER_ADDRESS}/IDMOBILE/?{$params}"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); curl_close($ch); $data = json_decode($response, true);
const axios = require('axios'); axios.get('https://{SERVER_ADDRESS}/IDMOBILE/', { params: { number: '33612345678', token: '{TOKEN}', mode: '2', name: 'MYCOMPANY', licence: '{LICENCE_CODE}', user_infos: '{INFORMATION}', scope: 'matching_notp' } }) .then(response => console.log(response.data));
HttpClient client = HttpClient.newHttpClient(); String url = "https://{SERVER_ADDRESS}/IDMOBILE/" + "?number=33612345678&token={TOKEN}&mode=2&name=MYCOMPANY&licence={LICENCE_CODE}&user_infos={INFORMATION}&scope=matching_notp"; HttpRequest request = HttpRequest.newBuilder() .uri(URI.create(url)) .GET() .build(); HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.body());
using var client = new HttpClient(); var url = "https://{SERVER_ADDRESS}/IDMOBILE/" + "?number=33612345678&token={TOKEN}&mode=2&name=MYCOMPANY&licence={LICENCE_CODE}&user_infos={INFORMATION}&scope=matching_notp"; var response = await client.GetAsync(url); var body = await response.Content.ReadAsStringAsync(); Console.WriteLine(body);
package main import ( "fmt" "io" "net/http" ) func main() { url := "https://{SERVER_ADDRESS}/IDMOBILE/" + "?number=33612345678&token={TOKEN}&mode=2&name=MYCOMPANY&licence={LICENCE_CODE}&user_infos={INFORMATION}&scope=matching_notp" resp, err := http.Get(url) if err != nil { panic(err) } defer resp.Body.Close() body, _ := io.ReadAll(resp.Body) fmt.Println(string(body)) }
POSThttps://{SERVER_ADDRESS}/IDMOBILE/

Añade los siguientes parámetros en el cuerpo de la solicitud usando Content-Type: application/x-www-form-urlencoded:

Ejemplos de código

Comparar los datos de identidad enviados con los del operador

curl -X POST "https://{SERVER_ADDRESS}/IDMOBILE/" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "licence={LICENCE_CODE}" \ -d "number=33612345678" \ -d "token={TOKEN}" \ -d "mode=2" \ -d "name=MYCOMPANY" \ -d "user_infos={INFORMATION}" \ -d "scope=matching_notp"
fetch("https://{SERVER_ADDRESS}/IDMOBILE/", { method: "POST", headers: { "Content-Type": "application/x-www-form-urlencoded" }, body: new URLSearchParams({ licence: "{LICENCE_CODE}", number: "33612345678", token: "{TOKEN}", mode: "2", name: "MYCOMPANY", user_infos: "{INFORMATION}", scope: "matching_notp" }) }) .then(r => r.json()) .then(data => console.log(data));
import requests response = requests.post( "https://{SERVER_ADDRESS}/IDMOBILE/", data={ "licence": "{LICENCE_CODE}", "number": "33612345678", "token": "{TOKEN}", "mode": "2", "name": "MYCOMPANY", "user_infos": "{INFORMATION}", "scope": "matching_notp", }, ) print(response.json())
<?php $ch = curl_init("https://{SERVER_ADDRESS}/IDMOBILE/"); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([ 'licence' => '{LICENCE_CODE}', 'number' => '33612345678', 'token' => '{TOKEN}', 'mode' => '2', 'name' => 'MYCOMPANY', 'user_infos' => '{INFORMATION}', 'scope' => 'matching_notp', ])); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); curl_close($ch); $data = json_decode($response, true);
const axios = require('axios'); const qs = require('querystring'); axios.post('https://{SERVER_ADDRESS}/IDMOBILE/', qs.stringify({ licence: '{LICENCE_CODE}', number: '33612345678', token: '{TOKEN}', mode: '2', name: 'MYCOMPANY', user_infos: '{INFORMATION}', scope: 'matching_notp' })) .then(response => console.log(response.data));
HttpClient client = HttpClient.newHttpClient(); String form = "licence={LICENCE_CODE}&number=33612345678&token={TOKEN}&mode=2&name=MYCOMPANY&user_infos={INFORMATION}&scope=matching_notp"; HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("https://{SERVER_ADDRESS}/IDMOBILE/")) .header("Content-Type", "application/x-www-form-urlencoded") .POST(HttpRequest.BodyPublishers.ofString(form)) .build(); HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString()); System.out.println(response.body());
using var client = new HttpClient(); var form = new Dictionary<string, string> { ["licence"] = "{LICENCE_CODE}", ["number"] = "33612345678", ["token"] = "{TOKEN}", ["mode"] = "2", ["name"] = "MYCOMPANY", ["user_infos"] = "{INFORMATION}", ["scope"] = "matching_notp" }; var response = await client.PostAsync( "https://{SERVER_ADDRESS}/IDMOBILE/", new FormUrlEncodedContent(form)); var body = await response.Content.ReadAsStringAsync(); Console.WriteLine(body);
package main import ( "fmt" "io" "net/http" "net/url" ) func main() { form := url.Values{} form.Set("licence", "{LICENCE_CODE}") form.Set("number", "33612345678") form.Set("token", "{TOKEN}") form.Set("mode", "2") form.Set("name", "MYCOMPANY") form.Set("user_infos", "{INFORMATION}") form.Set("scope", "matching_notp") resp, err := http.PostForm("https://{SERVER_ADDRESS}/IDMOBILE/", form) if err != nil { panic(err) } defer resp.Body.Close() body, _ := io.ReadAll(resp.Body) fmt.Println(string(body)) }

Parámetros

Parámetro Descripción Obl / Opc
SERVER_ADDRESS Dirección del servidor DQE que procesará los datos. Mandatory
licence Número que se te asigna como código de licencia. Mandatory
number Número de teléfono. Mandatory
token Token obtenido mediante la autenticación. Mandatory
mode 2: autenticación por código. Mandatory
name Nombre del partner en la base de datos de DQE Software, normalmente el nombre de tu empresa. Mandatory
code_name Campo opcional que contiene un código asociado a name. Optional
user_infos Objeto JSON que contiene la información del cliente a comparar. Consulta la tabla de claves de user_infos más abajo. Obligatorio si el scope es matching_notp. Optional
scope Valor estático. Debe ser matching_notp para este scope. Mandatory
redirect_uri URL de redirección. DQE añade el token de sesión y el estado a la redirección. Optional
country Utilízalo solo para Matching without OTP internacional. Valor esperado: código de país ISO de 2 letras. Optional
format Código de formato del número de teléfono (consulta la documentación de la API DQE Phone) utilizado para reformatear el número de teléfono. Optional
period Ventana de validez para la comprobación de SIM swap, en horas (0 a 72). Solo relevante cuando se combina el scope simswap — consulta la nota más abajo. Optional
Combinación de scopes — matching_notp se puede combinar con simswap (prevención de fraude) en una sola solicitud, por ejemplo scope=matching_notp,simswap, y con info (información del número de teléfono) en cualquier combinación, por ejemplo scope=matching_notp,info. El parámetro format se utiliza cuando se combina el scope info, y period se vuelve relevante cuando se combina el scope simswap. Consulta los campos de info más abajo. Ponte en contacto con tu gestor de cuenta DQE para obtener orientación sobre la forma de respuesta completa combinada de matching_notp+simswap.

Campos adicionales de info — se devuelven además de los campos propios de este endpoint cuando se incluye info en scope:

Campo Descripción Ejemplo
telorigine Número de teléfono de la solicitud. 0600000000
tel Número de teléfono formateado. +33600000000
geolocation Situación geográfica del número de teléfono. FRANCE
operator Operador actual del número de teléfono, si está suscrito. ORANGE
oldoperator Operador anterior del número de teléfono. SFR
ported Indica si el número de teléfono está portado, si está suscrito. Y
type Tipo de número de teléfono. MOBILE
iderror Código de error de la comprobación (0 o 1). 1

Claves de user_infos — cada clave debe estar presente, aunque no se proporcione ningún valor:

Clave Descripción
street_address Tipo y nombre de la calle.
postal_code Código postal.
locality Ciudad.
country Nombre completo del país.
birthdate Fecha de nacimiento en formato YYYY-MM-DD.
email Dirección de correo electrónico.
lastname Apellido.
maiden_name Apellido de soltera.
gender Género: M o F.
firstname Nombre.
phone Número de teléfono.
number Número de la calle. Esta clave debe estar presente en el payload JSON, pero no es necesario rellenarla.

Ejemplo de valor de user_infos (todas las claves presentes, vacías si se desconocen)

{ "street_address": "", "postal_code": "", "locality": "", "country": "", "birthdate": "", "email": "", "lastname": "", "maiden_name": "", "gender": "", "firstname": "", "phone": "", "number": "" }

Respuesta

La API devuelve un objeto JSON con una puntuación de similitud para cada campo:

Clave Descripción Tipo
family_name Puntuación de similitud del apellido. Number
gender Puntuación de similitud del tratamiento. Number
birthdate Puntuación de similitud de la fecha de nacimiento. Number
given_name Puntuación de similitud del nombre. Number
address Objeto que contiene las puntuaciones de similitud de la dirección. Claves: country, postal_code, street_address, locality. Object
email Puntuación de similitud de la dirección de correo electrónico. Number

Ejemplo de respuesta

Ejemplo de respuesta correcta
{ "family_name": 1.0, "gender": "", "birthdate": 1.0, "given_name": 1.0, "address": { "country": 1.0, "postal_code": 0.78, "street_address": 0.56, "locality": 0.44 }, "email": 1.0 }

Errores

En caso de error, la API devuelve un objeto JSON con status, error_type y error_id:

ID de error Tipo de error Ejemplo de solicitud Respuesta
01 invalid request https://{SERVER_ADDRESS}/IDMOBILE/?token={TOKEN}&mode=2&name={NAME}&licence={LICENCE_CODE}&user_infos={INFORMATION}&scope=matching_notp
Ejemplo: falta el parámetro number.
{"status": "error", "error_type": "invalid request", "error_id": "01"}
02 invalid licence key https://{SERVER_ADDRESS}/IDMOBILE/?number={NUM}&token={TOKEN}&mode=2&name={NAME}&licence={INCORRECT_LICENCE_CODE}&user_infos={INFORMATION}&scope=matching_notp
{"status": "error", "error_type": "invalid licence key", "error_id": "02"}
04 invalid scope https://{SERVER_ADDRESS}/IDMOBILE/?number={NUM}&token={TOKEN}&mode=2&name={NAME}&licence={LICENCE_CODE}&user_infos={INFORMATION}&scope=wrongScope
{"status": "error", "error_type": "invalid scope", "error_id": "04"}
05 missing or empty parameter (user_infos) for this scope https://{SERVER_ADDRESS}/IDMOBILE/?number={NUM}&token={TOKEN}&mode=2&name={NAME}&licence={LICENCE_CODE}&scope=matching_notp
Ejemplo: falta el parámetro user_infos.
{"status": "error", "error_type": "missing or empty parameter (user_infos) for this scope", "error_id": "05"}
06 bad parameter format (user_infos) is not a valid JSON https://{SERVER_ADDRESS}/IDMOBILE/?number={NUM}&token={TOKEN}&mode=2&name={NAME}&licence={LICENCE_CODE}&user_infos=not-valid-json&scope=matching_notp
{"status": "error", "error_type": "bad parameter format (user_infos) is not a valid JSON", "error_id": "06"}
07 missing mandatory key in user informations (phone) https://{SERVER_ADDRESS}/IDMOBILE/?number={NUM}&token={TOKEN}&mode=2&name={NAME}&licence={LICENCE_CODE}&user_infos=%7B...no+phone+key...%7D&scope=matching_notp
Ejemplo: al objeto JSON user_infos le falta la clave phone.
{"status": "error", "error_type": "missing mandatory key in user informations (phone)", "error_id": "07"}
09 ineligible phone number https://{SERVER_ADDRESS}/IDMOBILE/?number={INELIGIBLE_NUMBER}&token={TOKEN}&mode=2&name={NAME}&licence={LICENCE_CODE}&user_infos={INFORMATION}&scope=matching_notp
{"status": "error", "error_type": "ineligible phone number", "error_id": "09"}
10 invalid phone number https://{SERVER_ADDRESS}/IDMOBILE/?number={INVALID_NUMBER}&token={TOKEN}&mode=2&name={NAME}&licence={LICENCE_CODE}&user_infos={INFORMATION}&scope=matching_notp
{"status": "error", "error_type": "invalid phone number", "error_id": "10"}
11 phone number is empty https://{SERVER_ADDRESS}/IDMOBILE/?number=&token={TOKEN}&mode=2&name={NAME}&licence={LICENCE_CODE}&user_infos={INFORMATION}&scope=matching_notp
{"status": "error", "error_type": "phone number is empty", "error_id": "11"}
12 phone check failed https://{SERVER_ADDRESS}/IDMOBILE/?number={NUM}&token={TOKEN}&mode=2&name={NAME}&licence={LICENCE_CODE}&user_infos={INFORMATION}&scope=matching_notp
Condición del lado del operador — una solicitud sintácticamente válida puede fallar aquí.
{"status": "error", "error_type": "phone check failed", "error_id": "12"}
13 operator [Operator Name] not found https://{SERVER_ADDRESS}/IDMOBILE/?number={NUM}&token={TOKEN}&mode=2&name={NAME}&licence={LICENCE_CODE}&user_infos={INFORMATION}&scope=matching_notp
Condición del lado del operador.
{"status": "error", "error_type": "operator [Operator Name] not found", "error_id": "13"}
14 operator [Operator Name] not authorized for this licence https://{SERVER_ADDRESS}/IDMOBILE/?number={NUM}&token={TOKEN}&mode=2&name={NAME}&licence={LICENCE_CODE}&user_infos={INFORMATION}&scope=matching_notp
Condición del lado del operador — tu licencia no está autorizada para este operador.
{"status": "error", "error_type": "operator [Operator Name] not authorized for this licence", "error_id": "14"}
15 operator [Operator Name] not supported yet https://{SERVER_ADDRESS}/IDMOBILE/?number={NUM}&token={TOKEN}&mode=2&name={NAME}&licence={LICENCE_CODE}&user_infos={INFORMATION}&scope=matching_notp
Condición del lado del operador.
{"status": "error", "error_type": "operator [Operator Name] not supported yet", "error_id": "15"}
16 operator [Operator Name] unreachable https://{SERVER_ADDRESS}/IDMOBILE/?number={NUM}&token={TOKEN}&mode=2&name={NAME}&licence={LICENCE_CODE}&user_infos={INFORMATION}&scope=matching_notp
Condición del lado del operador.
{"status": "error", "error_type": "operator [Operator Name] unreachable", "error_id": "16"}
17 scope not supported by this operator [Operator Name] yet https://{SERVER_ADDRESS}/IDMOBILE/?number={NUM}&token={TOKEN}&mode=2&name={NAME}&licence={LICENCE_CODE}&user_infos={INFORMATION}&scope=matching_notp
Condición del lado del operador.
{"status": "error", "error_type": "scope not supported by this operator [Operator Name] yet", "error_id": "17"}
30 invalid or expired token https://{SERVER_ADDRESS}/IDMOBILE/?number={NUM}&token={EXPIRED_TOKEN}&mode=2&name={NAME}&licence={LICENCE_CODE}&user_infos={INFORMATION}&scope=matching_notp
{"status": "error", "error_type": "invalid or expired token", "error_id": "30"}
Example error response
{ "status": "error", "error_type": "invalid phone number", "error_id": "10" }

Probar la API

Haz clic en el botón de abajo para probar este endpoint en directo en tu navegador.

Abrir consola

Ver también

¿Fue útil este artículo?

Usuarios a los que les pareció útil: 0 de 0