ID Mobile API — Billing
Verwenden Sie diesen Endpunkt, um mit Zustimmung des Nutzers eine Rechnung oder einen Adressnachweis vom Betreiber abzurufen. Der Vorgang umfasst zwei Schritte: Einleitung der Zustimmungsanfrage und anschließender Abruf des Dokuments.
Zweistufiger Ablauf - Rufen Sie zuerst /IDMOBILE/ auf, um die Zustimmung des Nutzers anzufordern und die URL der Zustimmungsseite des Betreibers zu erhalten. Sobald die Zustimmung erteilt wurde, rufen Sie /GET/ auf, um das Abrechnungsdokument abzurufen.
Zugehörige ID-Mobile-Dokumentation:
⬇ OpenAPI-3.0.0-Spezifikation herunterladen (JSON)
Schritt 1 von 2 — Zustimmung anfordern
Leiten Sie die Zustimmungsanfrage ein und erhalten Sie die URL der Zustimmungsseite des Betreibers.
Schritt 1 — Zustimmungsanfrage einleiten
Anfrage
Sowohl GET als auch POST werden unterstützt.
{SERVER_ADDRESS} und {LICENCE_CODE} werden von DQE bei der Kontoerstellung bereitgestellt. Wenden Sie sich an Ihren DQE-Kundenbetreuer, um diese Zugangsdaten zu erhalten.
GET POST
GET https://{SERVER_ADDRESS}/IDMOBILE/?number ={NUM}&token ={TOKEN}&mode ={MODE}&name ={NAME}&code_name ={CODE_NAME}&licence ={LICENCE_CODE}&scope =billing&redirect_uri ={URL_REDIRECT}
Codebeispiele
Zustimmung zum Abruf des Abrechnungsdokuments anfordern
cURL JavaScript Python PHP Node.js Java C# Go
curl "https://{SERVER_ADDRESS}/IDMOBILE/?number={NUM}&token={TOKEN}&mode={MODE}&name={NAME}&code_name={CODE_NAME}&licence={LICENCE_CODE}&scope=billing&redirect_uri={URL_REDIRECT}"
fetch("https://{SERVER_ADDRESS}/IDMOBILE/?" + new URLSearchParams({
number: "{NUM}",
token: "{TOKEN}",
mode: "{MODE}",
name: "{NAME}",
code_name: "{CODE_NAME}",
licence: "{LICENCE_CODE}",
scope: "billing",
redirect_uri: "{URL_REDIRECT}"
}))
.then(r => r.json())
.then(data => console.log(data));
import requests
response = requests.get(
"https://{SERVER_ADDRESS}/IDMOBILE/",
params={
"number": "{NUM}",
"token": "{TOKEN}",
"mode": "{MODE}",
"name": "{NAME}",
"code_name": "{CODE_NAME}",
"licence": "{LICENCE_CODE}",
"scope": "billing",
"redirect_uri": "{URL_REDIRECT}",
},
)
print(response.json())
<?php
$params = http_build_query([
'number' => '{NUM}',
'token' => '{TOKEN}',
'mode' => '{MODE}',
'name' => '{NAME}',
'code_name' => '{CODE_NAME}',
'licence' => '{LICENCE_CODE}',
'scope' => 'billing',
'redirect_uri' => '{URL_REDIRECT}',
]);
$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}',
mode: '{MODE}',
name: '{NAME}',
code_name: '{CODE_NAME}',
licence: '{LICENCE_CODE}',
scope: 'billing',
redirect_uri: '{URL_REDIRECT}'
}
})
.then(response => console.log(response.data));
HttpClient client = HttpClient.newHttpClient();
String url = "https://{SERVER_ADDRESS}/IDMOBILE/"
+ "?number={NUM}&token={TOKEN}&mode={MODE}&name={NAME}&code_name={CODE_NAME}&licence={LICENCE_CODE}&scope=billing&redirect_uri={URL_REDIRECT}";
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}&mode={MODE}&name={NAME}&code_name={CODE_NAME}&licence={LICENCE_CODE}&scope=billing&redirect_uri={URL_REDIRECT}";
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}&mode={MODE}&name={NAME}&code_name={CODE_NAME}&licence={LICENCE_CODE}&scope=billing&redirect_uri={URL_REDIRECT}"
resp, err := http.Get(url)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
POST https://{SERVER_ADDRESS}/IDMOBILE/
Fügen Sie die folgenden Parameter im Anfragetext im Format x-www-form-urlencoded hinzu.
Codebeispiele
Zustimmung zum Abruf des Abrechnungsdokuments anfordern
cURL JavaScript Python PHP Node.js Java C# Go
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 "mode={MODE}" \
-d "name={NAME}" \
-d "code_name={CODE_NAME}" \
-d "scope=billing" \
-d "redirect_uri={URL_REDIRECT}"
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}",
mode: "{MODE}",
name: "{NAME}",
code_name: "{CODE_NAME}",
scope: "billing",
redirect_uri: "{URL_REDIRECT}"
})
})
.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}",
"mode": "{MODE}",
"name": "{NAME}",
"code_name": "{CODE_NAME}",
"scope": "billing",
"redirect_uri": "{URL_REDIRECT}",
},
)
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}',
'mode' => '{MODE}',
'name' => '{NAME}',
'code_name' => '{CODE_NAME}',
'scope' => 'billing',
'redirect_uri' => '{URL_REDIRECT}',
]));
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}',
mode: '{MODE}',
name: '{NAME}',
code_name: '{CODE_NAME}',
scope: 'billing',
redirect_uri: '{URL_REDIRECT}'
}))
.then(response => console.log(response.data));
HttpClient client = HttpClient.newHttpClient();
String form = "licence={LICENCE_CODE}&number={NUM}&token={TOKEN}&mode={MODE}&name={NAME}&code_name={CODE_NAME}&scope=billing&redirect_uri={URL_REDIRECT}";
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}",
["mode"] = "{MODE}",
["name"] = "{NAME}",
["code_name"] = "{CODE_NAME}",
["scope"] = "billing",
["redirect_uri"] = "{URL_REDIRECT}"
};
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("mode", "{MODE}")
form.Set("name", "{NAME}")
form.Set("code_name", "{CODE_NAME}")
form.Set("scope", "billing")
form.Set("redirect_uri", "{URL_REDIRECT}")
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))
}
Parameters
Parameter
Beschreibung
Pflicht/Opt
SERVER_ADDRESS
Adresse des DQE-Servers, der die Daten verarbeitet.
Pflicht
licence
Ihnen zugewiesene Nummer als Lizenzcode.
Pflicht
number
Telefonnummer.
Pflicht
token
Durch Authentifizierung abgerufenes Token.
Pflicht
mode
2: Authentifizierung per Code.Fester Wert: 2
Pflicht
name
Partnername in der DQE-Software-Datenbank, in der Regel Ihr Firmenname.
Pflicht
code_name
Optionales Feld mit einem Code, der name zugeordnet ist.
Optional
scope
Fester Wert. Muss für diesen Scope billing sein.Fester Wert: billing
Pflicht
redirect_uri
Weiterleitungs-URL. DQE fügt der Weiterleitung das Sitzungstoken und den Status hinzu.
Optional
Scopes kombinieren — Der Parameter billing kann mit formfilling (beide sind zustimmungsbasiert) in einer einzigen Anfrage kombiniert werden, z. B. scope=billing,formfilling, sowie mit info (Telefonnummern-Intelligenz) in jeder Kombination, z. B. scope=billing,info. Siehe die info-Felder unten. Wenden Sie sich an Ihren DQE-Kundenbetreuer für Hinweise zur vollständigen kombinierten Antwortstruktur von billing+formfilling.
info-Zusatzfelder — werden zusätzlich zu den eigenen Feldern dieses Endpunkts zurückgegeben, wenn info im scope enthalten ist:
Feld
Beschreibung
Beispiel
telorigine
Telefonnummer in der Anfrage.
0600000000
tel
Formatierte Telefonnummer.
+33600000000
geolocation
Geografische Lage der Telefonnummer.
FRANCE
operator
Aktueller Betreiber der Telefonnummer, sofern vorhanden.
ORANGE
oldoperator
Vorheriger Betreiber der Telefonnummer.
SFR
ported
Gibt an, ob die Telefonnummer portiert wurde, sofern vorhanden.
Y
type
Art der Telefonnummer.
MOBILE
iderror
Fehlercode der Prüfung (0 oder 1).
1
Response
Bei Erfolg gibt die API ein JSON-Objekt mit den folgenden Schlüsseln zurück.
Schlüssel
Beschreibung
Typ
status
success: Die Informationen wurden erfolgreich abgerufen.
STRING
scope
billing
STRING
billing
Proof of address in Base64 encoding.
STRING
Pending
Schlüssel
Beschreibung
Typ
status
pending: DQE wartet auf die Antwort des Betreibers.
STRING
scope
billing
STRING
Response example
Erfolgreiche Zustimmungsanfrage {
"status" : "success" ,
"scope" : "billing" ,
"billing" : "N0YXJ0eHJlZgo0OTg2MQolJUVPRgoKLS1ZS0xJNTYpPUlSeFdNUzEoYXJpOWI/UklzLkRXZ1dwUF9FLS0K"
}
Ausstehend — Warten auf den Betreiber {
"status" : "pending" ,
"scope" : "billing"
}
Errors
Fehler-ID
Fehlertyp
Beschreibung
01
invalid request
Die Anfrage ist ungültig.
02
invalid licence key
Die Lizenz ist ungültig.
04
invalid scope
Ungültiger Scope.
05
missing or empty parameter (user_infos) for this scope
Für den angeforderten Scope fehlt ein Parameter.
06
bad parameter format (user_infos) is not a valid JSON
Der Parameter user_infos ist kein gültiges JSON.
07
missing mandatory key in user informations (phone)
Der Schlüssel phone ist im Parameter user_infos für diesen Betreiber Pflicht.
09
ineligible phone number
Die Telefonnummer ist für diese Lösung nicht zulässig.
10
invalid phone number
Die Telefonnummer existiert nicht.
11
phone number is empty
Die Telefonnummer ist leer.
12
phone check failed
Die Betreiberprüfung ist fehlgeschlagen.
13
operator [Operator Name] not found
Der Betreiber konnte nicht gefunden werden.
14
operator [Operator Name] not authorized for this licence
Ihre Lizenz ist für diesen Betreiber nicht autorisiert.
15
operator [Operator Name] not supported yet
Die Lösung ist für diesen Betreiber noch nicht verfügbar.
16
operator [Operator Name] unreachable
Der Betreiber konnte nicht kontaktiert werden.
17
scope not supported by this operator [Operator Name] yet
Dieser Scope wird vom Betreiber nicht unterstützt.
30
invalid or expired token
Das Token ist abgelaufen.
API testen
Klicken Sie auf die Schaltfläche unten, um diesen Endpunkt live in Ihrem Browser zu testen.
Konsole öffnen
Schritt 2 von 2 — Abrechnungsdokument abrufen
Sobald der Nutzer seine Zustimmung erteilt hat, rufen Sie das vom Betreiber zurückgegebene Abrechnungsdokument ab.
Schritt 2 — Abrechnungsdokument abrufen
Anfrage
Sowohl GET als auch POST werden unterstützt.
{SERVER_ADDRESS} und {LICENCE_CODE} werden von DQE bei der Kontoerstellung bereitgestellt. Wenden Sie sich an Ihren DQE-Kundenbetreuer, um diese Zugangsdaten zu erhalten.
GET POST
GET https://{SERVER_ADDRESS}/GET/?token ={TOKEN}&Licence ={LICENCE_CODE}&scope =billing
Codebeispiele
Abrechnungsdokument nach erteilter Zustimmung abrufen
cURL JavaScript Python PHP Node.js Java C# Go
curl "https://{SERVER_ADDRESS}/GET/?token={TOKEN}&Licence={LICENCE_CODE}&scope=billing"
fetch("https://{SERVER_ADDRESS}/GET/?" + new URLSearchParams({
token: "{TOKEN}",
Licence: "{LICENCE_CODE}",
scope: "billing"
}))
.then(r => r.json())
.then(data => console.log(data));
import requests
response = requests.get(
"https://{SERVER_ADDRESS}/GET/",
params={
"token": "{TOKEN}",
"Licence": "{LICENCE_CODE}",
"scope": "billing",
},
)
print(response.json())
<?php
$params = http_build_query([
'token' => '{TOKEN}',
'Licence' => '{LICENCE_CODE}',
'scope' => 'billing',
]);
$ch = curl_init("https://{SERVER_ADDRESS}/GET/?{$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}/GET/', {
params: {
token: '{TOKEN}',
Licence: '{LICENCE_CODE}',
scope: 'billing'
}
})
.then(response => console.log(response.data));
HttpClient client = HttpClient.newHttpClient();
String url = "https://{SERVER_ADDRESS}/GET/"
+ "?token={TOKEN}&Licence={LICENCE_CODE}&scope=billing";
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}/GET/" +
"?token={TOKEN}&Licence={LICENCE_CODE}&scope=billing";
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}/GET/" +
"?token={TOKEN}&Licence={LICENCE_CODE}&scope=billing"
resp, err := http.Get(url)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
POST https://{SERVER_ADDRESS}/GET/
Fügen Sie die folgenden Parameter im Anfragetext im Format x-www-form-urlencoded hinzu.
Codebeispiele
Abrechnungsdokument nach erteilter Zustimmung abrufen
cURL JavaScript Python PHP Node.js Java C# Go
curl -X POST "https://{SERVER_ADDRESS}/GET/" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "Licence={LICENCE_CODE}" \
-d "token={TOKEN}" \
-d "scope=billing"
fetch("https://{SERVER_ADDRESS}/GET/", {
method: "POST",
headers: { "Content-Type": "application/x-www-form-urlencoded" },
body: new URLSearchParams({
Licence: "{LICENCE_CODE}",
token: "{TOKEN}",
scope: "billing"
})
})
.then(r => r.json())
.then(data => console.log(data));
import requests
response = requests.post(
"https://{SERVER_ADDRESS}/GET/",
data={
"Licence": "{LICENCE_CODE}",
"token": "{TOKEN}",
"scope": "billing",
},
)
print(response.json())
<?php
$ch = curl_init("https://{SERVER_ADDRESS}/GET/");
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([
'Licence' => '{LICENCE_CODE}',
'token' => '{TOKEN}',
'scope' => 'billing',
]));
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}/GET/', qs.stringify({
Licence: '{LICENCE_CODE}',
token: '{TOKEN}',
scope: 'billing'
}))
.then(response => console.log(response.data));
HttpClient client = HttpClient.newHttpClient();
String form = "Licence={LICENCE_CODE}&token={TOKEN}&scope=billing";
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://{SERVER_ADDRESS}/GET/"))
.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}",
["token"] = "{TOKEN}",
["scope"] = "billing"
};
var response = await client.PostAsync(
"https://{SERVER_ADDRESS}/GET/",
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("token", "{TOKEN}")
form.Set("scope", "billing")
resp, err := http.PostForm("https://{SERVER_ADDRESS}/GET/", form)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
Parameters
Parameter
Beschreibung
Pflicht/Opt
SERVER_ADDRESS
Adresse des DQE-Servers, der die Daten verarbeitet.
Pflicht
Licence
Ihnen zugewiesene Nummer als Lizenzcode.
Pflicht
token
Durch Authentifizierung abgerufenes Token.
Pflicht
scope
Fester Wert. Muss für diesen Scope billing sein.Fester Wert: billing
Pflicht
Antwort
Die API gibt ein JSON-Objekt mit den folgenden Schlüsseln zurück:
Schlüssel
Beschreibung
Typ
status
success: Das Dokument wurde erfolgreich abgerufen.
STRING
scope
billing
STRING
billing
Adressnachweis in Base64-Kodierung.
STRING
Ausstehend
Schlüssel
Beschreibung
Typ
status
pending: DQE wartet auf die Antwort des Betreibers.
STRING
scope
billing
STRING
Response example
Erfolgreicher Abruf {
"status" : "success" ,
"scope" : "billing" ,
"billing" : "N0YXJ0eHJlZgo0OTg2MQolJUVPRgoKLS1ZS0xJNTYpPUlSeFdNUzEoYXJpOWI/UklzLkRXZ1dwUF9FLS0K"
}
Fehler {
"status" : "error" ,
"error_type" : "internal server error" ,
"error_id" : "99"
}
Errors
Fehler-ID
Fehlertyp
Beschreibung
01
invalid request
Die Anfrage ist ungültig.
02
invalid licence key
Die Lizenz ist ungültig.
04
invalid scope
Ungültiger Scope.
18
failed to retrieve data from operator
Nach der OTP-Validierung wurden keine Daten empfangen.
20
OTP incorrect
Die OTP-Validierung wurde nicht abgeschlossen.
21
access denied
Die OTP-Validierung wurde abgelehnt.
30
invalid or expired token
Das Token ist abgelaufen.
99
internal server error
Serverfehler.
API testen
Klicken Sie auf die Schaltfläche unten, um diesen Endpunkt live in Ihrem Browser zu testen.
Konsole öffnen