ID Mobile — Detectar un cambio de tarjeta SIM

Support DQE
Support DQE
  • Actualización
Simswap - API ID Mobile

Utiliza este endpoint para comprobar si la tarjeta SIM asociada a un número de teléfono ha sido cambiada en un período determinado.

Documentación de ID Mobile relacionada:
Requisito previo - Simswap requiere un token obtenido previamente desde el endpoint de Access Token de ID Mobile. Llama primero a ACCESS_TOKEN y pasa el valor de access_token devuelto como el parámetro token a continuación.

simswap

Solicitud

Se admiten tanto GET como POST.

{SERVER_ADDRESS} y {LICENCE_CODE} son proporcionados por DQE al crear la cuenta. Contacta con tu gestor de cuenta DQE para obtener estas credenciales.
GEThttps://{SERVER_ADDRESS}/IDMOBILE/?number={NUM}&token={TOKEN}&licence={LICENCE_CODE}&scope=simswap&period={PERIOD}&name={NAME}

Ejemplos de código

Comprobar un cambio de SIM en un número de teléfono

curl "https://{SERVER_ADDRESS}/IDMOBILE/?number={NUM}&token={TOKEN}&licence={LICENCE_CODE}&scope=simswap&period={PERIOD}&name={NAME}"
fetch("https://{SERVER_ADDRESS}/IDMOBILE/?" + new URLSearchParams({ number: "{NUM}", token: "{TOKEN}", licence: "{LICENCE_CODE}", scope: "simswap", period: "{PERIOD}", name: "{NAME}" })) .then(r => r.json()) .then(data => console.log(data));
import requests response = requests.get( "https://{SERVER_ADDRESS}/IDMOBILE/", params={ "number": "{NUM}", "token": "{TOKEN}", "licence": "{LICENCE_CODE}", "scope": "simswap", "period": "{PERIOD}", "name": "{NAME}", }, ) print(response.json())
<?php $params = http_build_query([ 'number' => '{NUM}', 'token' => '{TOKEN}', 'licence' => '{LICENCE_CODE}', 'scope' => 'simswap', 'period' => '{PERIOD}', 'name' => '{NAME}', ]); $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: '{NUM}', token: '{TOKEN}', licence: '{LICENCE_CODE}', scope: 'simswap', period: '{PERIOD}', name: '{NAME}' } }) .then(response => console.log(response.data));
HttpClient client = HttpClient.newHttpClient(); String url = "https://{SERVER_ADDRESS}/IDMOBILE/" + "?number={NUM}&token={TOKEN}&licence={LICENCE_CODE}&scope=simswap&period={PERIOD}&name={NAME}"; 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={NUM}&token={TOKEN}&licence={LICENCE_CODE}&scope=simswap&period={PERIOD}&name={NAME}"; 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={NUM}&token={TOKEN}&licence={LICENCE_CODE}&scope=simswap&period={PERIOD}&name={NAME}" 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

Comprobar un cambio de SIM en un número de teléfono

curl -X POST "https://{SERVER_ADDRESS}/IDMOBILE/" \ -H "Content-Type: application/x-www-form-urlencoded" \ -d "licence={LICENCE_CODE}" \ -d "number={NUM}" \ -d "token={TOKEN}" \ -d "scope=simswap" \ -d "period={PERIOD}" \ -d "name={NAME}"
fetch("https://{SERVER_ADDRESS}/IDMOBILE/", { method: "POST", headers: { "Content-Type": "application/x-www-form-urlencoded" }, body: new URLSearchParams({ licence: "{LICENCE_CODE}", number: "{NUM}", token: "{TOKEN}", scope: "simswap", period: "{PERIOD}", name: "{NAME}" }) }) .then(r => r.json()) .then(data => console.log(data));
import requests response = requests.post( "https://{SERVER_ADDRESS}/IDMOBILE/", data={ "licence": "{LICENCE_CODE}", "number": "{NUM}", "token": "{TOKEN}", "scope": "simswap", "period": "{PERIOD}", "name": "{NAME}", }, ) 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' => '{NUM}', 'token' => '{TOKEN}', 'scope' => 'simswap', 'period' => '{PERIOD}', 'name' => '{NAME}', ])); 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: '{NUM}', token: '{TOKEN}', scope: 'simswap', period: '{PERIOD}', name: '{NAME}' })) .then(response => console.log(response.data));
HttpClient client = HttpClient.newHttpClient(); String form = "licence={LICENCE_CODE}&number={NUM}&token={TOKEN}&scope=simswap&period={PERIOD}&name={NAME}"; 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"] = "{NUM}", ["token"] = "{TOKEN}", ["scope"] = "simswap", ["period"] = "{PERIOD}", ["name"] = "{NAME}" }; 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", "{NUM}") form.Set("token", "{TOKEN}") form.Set("scope", "simswap") form.Set("period", "{PERIOD}") form.Set("name", "{NAME}") 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. Obligatorio
licence Número asignado como tu código de licencia. Obligatorio
number Número de teléfono. Obligatorio
token Token obtenido mediante autenticación. Obligatorio
scope Valor estático. Debe ser simswap para este scope.
Valor fijo: simswap
Obligatorio
period Período pasado durante el cual se realiza la comprobación de cambio de SIM. Valor en horas. Obligatorio
name Nombre del cliente en la base de datos de DQE. Obligatorio
Combinación de scopes — simswap puede combinarse con matching_notp (puntuación de fraude) en una misma solicitud, p. ej. scope=simswap,matching_notp, y con info (información sobre el número de teléfono) en cualquier combinación, p. ej. scope=simswap,info. Consulta los campos de info a continuación. Contacta con tu gestor de cuenta DQE para obtener orientación sobre la forma completa de la respuesta combinada `simswap`+`matching_notp`.

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

Campo Descripción Ejemplo
telorigine Número de teléfono en 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 ha sido 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

Respuesta

La API devuelve un objeto JSON con las siguientes claves.

Clave Descripción Tipo
status Etiqueta del estado de la solicitud. String
operator Operador del número de teléfono. String
swapped Indica si la tarjeta SIM ha sido cambiada: true o false. String

Ejemplo de respuesta

Ejemplo de respuesta de simswap
{ "status": "success", "operator": "Orange", "swapped": "false" }

Errores

Estos códigos de error son compartidos entre los scopes de ID Mobile — la API clasifica los errores por código, no por endpoint. Los códigos 09 y 12–17 dependen de la elegibilidad del número de teléfono y de la configuración del operador consultado, más que de un único parámetro incorrecto; la solicitud de ejemplo mostrada es una llamada a simswap sintácticamente válida, y el error se devuelve según el estado de la cuenta, del operador o del número.

ID Tipo de error Solicitud de ejemplo Respuesta
01 invalid request https://{SERVER_ADDRESS}/IDMOBILE/?number={NUM}&token={TOKEN}&licence={LICENCE_CODE}&period={PERIOD}&name={NAME}
{"status": "error", "error_type": "invalid request", "error_id": "01"}
02 invalid licence key https://{SERVER_ADDRESS}/IDMOBILE/?number={NUM}&token={TOKEN}&licence={INCORRECT_LICENCE_CODE}&scope=simswap&period={PERIOD}&name={NAME}
{"status": "error", "error_type": "invalid licence key", "error_id": "02"}
04 invalid scope https://{SERVER_ADDRESS}/IDMOBILE/?number={NUM}&token={TOKEN}&licence={LICENCE_CODE}&scope=unknown&period={PERIOD}&name={NAME}
{"status": "error", "error_type": "invalid scope", "error_id": "04"}
05 missing or empty parameter (user_infos) for this scope No se activa con los parámetros propios de Simswap (código de error compartido de la plataforma)
{"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 No se activa con los parámetros propios de Simswap (código de error compartido de la plataforma)
{"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) No se activa con los parámetros propios de Simswap (código de error compartido de la plataforma)
{"status": "error", "error_type": "missing mandatory key in user informations (phone)", "error_id": "07"}
09 ineligible phone number https://{SERVER_ADDRESS}/IDMOBILE/?number={NUM}&token={TOKEN}&licence={LICENCE_CODE}&scope=simswap&period={PERIOD}&name={NAME}
{"status": "error", "error_type": "ineligible phone number", "error_id": "09"}
10 invalid phone number https://{SERVER_ADDRESS}/IDMOBILE/?number={INVALID_NUM}&token={TOKEN}&licence={LICENCE_CODE}&scope=simswap&period={PERIOD}&name={NAME}
{"status": "error", "error_type": "invalid phone number", "error_id": "10"}
11 phone number is empty https://{SERVER_ADDRESS}/IDMOBILE/?number=&token={TOKEN}&licence={LICENCE_CODE}&scope=simswap&period={PERIOD}&name={NAME}
{"status": "error", "error_type": "phone number is empty", "error_id": "11"}
12 phone check failed https://{SERVER_ADDRESS}/IDMOBILE/?number={NUM}&token={TOKEN}&licence={LICENCE_CODE}&scope=simswap&period={PERIOD}&name={NAME}
{"status": "error", "error_type": "phone check failed", "error_id": "12"}
13 operator [Operator Name] not found https://{SERVER_ADDRESS}/IDMOBILE/?number={NUM}&token={TOKEN}&licence={LICENCE_CODE}&scope=simswap&period={PERIOD}&name={NAME}
{"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}&licence={LICENCE_CODE}&scope=simswap&period={PERIOD}&name={NAME}
{"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}&licence={LICENCE_CODE}&scope=simswap&period={PERIOD}&name={NAME}
{"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}&licence={LICENCE_CODE}&scope=simswap&period={PERIOD}&name={NAME}
{"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}&licence={LICENCE_CODE}&scope=simswap&period={PERIOD}&name={NAME}
{"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}&licence={LICENCE_CODE}&scope=simswap&period={PERIOD}&name={NAME}
{"status": "error", "error_type": "invalid or expired token", "error_id": "30"}

Probar la API

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

Abrir consola

Ver también

¿Fue útil este artículo?

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