ID Mobile — Rechnungsdokumente mit Zustimmung abrufen

Support DQE
Support DQE
  • Aktualisiert
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:

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.
GEThttps://{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 "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)) }
POSThttps://{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 -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.
GEThttps://{SERVER_ADDRESS}/GET/?token={TOKEN}&Licence={LICENCE_CODE}&scope=billing

Codebeispiele

Abrechnungsdokument nach erteilter Zustimmung abrufen

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)) }
POSThttps://{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 -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

Siehe auch

War dieser Beitrag hilfreich?

0 von 0 fanden dies hilfreich