Rechnungsabstimmungs-API v2 (GA)
Gilt für: Partner Center (nicht verfügbar in souveräner Cloud)
Unsere neue asynchrone API bietet eine schnellere und effizientere Möglichkeit, über Azure-Blobs auf Ihre Abrechnungs- und Abstimmungsdaten zuzugreifen. Anstatt eine Verbindung für Stunden offen zu halten oder Batches von 2.000 Zeilenelementen zu verarbeiten, können Sie ihren Workflow jetzt optimieren.
Die neue Abrechnungs-API für die Rechnungsabrechnung verwendet erweiterte Techniken wie Valet-Schlüssel und asynchrone Anforderungsantwortmuster . Diese API stellt Ihnen ein SAS-Token (Shared Access Signature) bereit, mit dem Sie entweder auf alle Attribute oder eine Teilmenge der Rechnungsabstimmungsdaten zugreifen können.
Unsere API verwendet optimierte Techniken, um Ihre Effizienz zu steigern, sodass Sie schnellere Ergebnisse mit weniger Aufwand erzielen können. Nutzen Sie diese API, um den Datenzugriff zu vereinfachen und Ihre Gesamteffizienz zu verbessern.
Hinweis
Die neue API wird nicht auf dem Partner Center-API-Host gehostet. Stattdessen finden Sie sie auf MS Graph unter Verwendung der Microsoft Graph-API zum Exportieren von Partnerabrechnungsdaten – Microsoft Graph v1.0. Informationen zum Zugriff auf diese API finden Sie in den folgenden Details.
Wichtig
Um Ihrer App Zugriff auf Partnerabrechnungsdaten zu ermöglichen, folgen Sie diesem Link und machen Sie sich mit den Authentifizierungs- und Autorisierungsgrundlagen für Microsoft Graph vertraut.
Sie können die Berechtigung "PartnerBilling.Read.All" entweder über das Azure-Portal oder das Entra Admin Center zuweisen. Gehen Sie dazu wie folgt vor:
- Registrieren Sie Ihre App auf der Microsoft Entra-Startseite unter dem Abschnitt App-Registrierungen.
- Um die erforderliche Berechtigung zu erteilen, wechseln Sie zur Seite "Microsoft Entra App" unter dem Abschnitt "API-Berechtigungen". Wählen Sie "Berechtigung hinzufügen" und dann den Bereich "PartnerBilling.Read.All" aus.
Durch Ausführen dieser Schritte stellen Sie sicher, dass Ihre App über den erforderlichen Zugriff auf Partnerabrechnungsdaten verfügt.
API-Übersicht
Um Ihnen beim asynchronen Abrufen neuer Rechnungsabrechnungspositionen zu helfen, bieten wir zwei wichtige API-Endpunkte an. Hier ist ein optimiertes Handbuch für die ersten Schritte:
Abrechnungsendpunkt für Rechnungsabrechnungen
Verwenden Sie zunächst diese API, um neue Rechnungsabgleichspositionen abzurufen. Wenn Sie eine Anforderung stellen, erhalten Sie einen HTTP-Status 202 und einen Speicherortheader mit einer URL. Rufen Sie diese URL regelmäßig ab, bis Sie einen Erfolgsstatus und eine Manifest-URL erhalten.
Vorgangsstatusendpunkt
Überprüfen Sie als Nächstes den Vorgangsstatus, indem Sie diese API in regelmäßigen Abständen aufrufen. Wenn die Daten nicht bereit sind, enthält die Antwort einen Retry-After-Header , der angibt, wie lange gewartet werden soll, bevor sie es erneut versuchen. Sobald der Vorgang abgeschlossen ist, erhalten Sie eine Manifestressource mit einem Speicherordnerlink zum Herunterladen der Nutzungsdaten. Die Antwortsegmente der Dateien, um den Durchsatz zu verbessern und die E/A-Parallelität zu ermöglichen.
Indem Sie diese Schritte ausführen, können Sie Ihren Rechnungsausgleichsprozess effizient verwalten.
Sequenzdiagramm
Hier ist ein Sequenzdiagramm, das die Schritte zum Herunterladen neuer Rechnungsabgleichsdaten zeigt.
Benutzeraktionssequenz
Führen Sie die folgenden Schritte aus, um Rechnungsabrechnungsdaten abzurufen:
Schritt 1: Senden einer Anforderung
Senden Sie eine POST-Anforderung an den API-Endpunkt.
Rechnungsabrechnungspositionen abrufen
API-Anforderung
POST https://graph.microsoft.com/v1.0/reports/partners/billing/reconciliation/billed/export
Accept: application/json
Content-Type: application/json
{
"invoiceId": "G016907411",
"attributeSet": "basic"
}
Abfrageparameter
N/V
Anforderungstext
Attribut | Erforderlich | Type | Beschreibung |
---|---|---|---|
attributeSet | False | String | Wählen Sie "vollständig" für alle Attribute oder "Einfach" für einen begrenzten Satz aus. Wenn nicht angegeben, ist "full" der Standardwert. Überprüfen Sie die Liste der Attribute in diesem Abschnitt. Optional. |
invoiceId | True | String | Ein eindeutiger Bezeichner für jede Rechnung. Erforderlich. |
Anforderungsheader
Fordern Sie Kopfzeilen für die API mithilfe der Unter " Bewährte Methoden für die Verwendung von Microsoft Graph" aufgeführten Schritte an. Durch die Einhaltung dieser Richtlinien stellen Sie Zuverlässigkeit und Unterstützung für Ihre Anwendung sicher. Ihre Aufmerksamkeit auf Details in diesem Schritt ist entscheidend für die nahtlose Integration und optimale Leistung.
API-Antwort
HTTP/1.1 202 Accepted
Location: <https://graph.microsoft.com/v1.0/reports/partners/billing/operations/9ab9cb54-d07f-4f52-9ea6-a09d7de52c14>
Die API antwortet in der Regel mit einem HTTP 202-Status. Je nach Ihren Anforderungen können auch andere Status auftreten. Diese Status werden im Abschnitt "Standard-API-Antwortstatus" aufgeführt.
Code | Beschreibung |
---|---|
202 – Akzeptiert | Ihre Anfrage wurde angenommen. Um den Status Ihrer Anforderung zu überprüfen, fragen Sie die url ab, die im Speicherortheader angegeben ist. |
Schritt 2: Überprüfen des Anforderungsstatus
Um den Status einer Anforderung nachzuverfolgen, stellen Sie sicher, dass Sie eine HTTP 200-Antwort erhalten, die "erfolgreich" oder "fehlgeschlagen" angibt. Bei erfolgreicher Ausführung finden Sie die Manifest-URL im Attribut "resourceLocation". Dieses Attribut stellt einen Endpunkt für den Zugriff auf die erforderlichen Informationen bereit.
Vorgangsstatus abrufen
Ruft den Status einer Anforderung ab.
API-Anforderung
GET <https://graph.microsoft.com/v1.0/reports/partners/billing/operations/9ab9cb54-d07f-4f52-9ea6-a09d7de52c14>
Anforderungsparameter
Name | Einschließen in | Erforderlich | Type | Beschreibung |
---|---|---|---|---|
operationId | Anforderungs-URI | True | String | Eine eindeutige ID zum Überprüfen des Anforderungsstatus. Erforderlich. |
Anforderungsheader
Fordern Sie Kopfzeilen für die API mithilfe der Unter " Bewährte Methoden für die Verwendung von Microsoft Graph" aufgeführten Schritte an. Durch die Einhaltung dieser Richtlinien stellen Sie Zuverlässigkeit und Unterstützung für Ihre Anwendung sicher. Ihre Aufmerksamkeit auf Details in diesem Schritt ist entscheidend für die nahtlose Integration und optimale Leistung.
Anforderungstext
Nicht zutreffend.
Antwortstatus
Abgesehen von den standardmäßigen HTTP-Status, die in Standard-API-Antwortstatus aufgeführt sind, kann die API auch den folgenden HTTP-Status zurückgeben:
Code | Beschreibung |
---|---|
410 – Nicht mehr | Der Manifestlink läuft nach einer festgelegten Zeit ab. Um den Manifestlink erneut abzurufen, senden Sie eine neue Anforderung. |
Antwortnutzlast
Die API-Antwortnutzlast enthält die folgenden Attribute:
Attribut | Erforderlich | Beschreibung |
---|---|---|
id | True | Ein eindeutiger Bezeichner für jede Antwort Erforderlich. |
status | True | Werte und Aktionen: Erforderlich. notstarted: Warten Sie, bis die im Header "Retry-After" angegebene Zeit angegeben ist, und führen Sie dann einen weiteren Aufruf aus, um den Status zu überprüfen. running: Wait for the time specified in the "Retry-After" header, then make another call to check the status. erfolgreich: Die Daten sind bereit. Rufen Sie die Manifestnutzlast mithilfe des in resourceLocation angegebenen URI ab. failed: The operation failed permanent. Starten Sie ihn neu. |
createdDateTime | True | Der Zeitpunkt, zu dem die Anforderung gestellt wurde. Erforderlich. |
lastActionDateTime | True | Das letzte Mal, wenn der Status geändert wurde. Erforderlich. |
resourceLocation | False | Der URI für die Manifestnutzlast. Optional. |
error | False | Details zu Fehlern, die im JSON-Format bereitgestellt werden. Optional. Enthaltene Attribute: message: Beschreibung des Fehlers. code: Der Typ des Fehlers. |
Ressourcenspeicherortobjekt
Attribute | Beschreibung |
---|---|
id | Ein eindeutiger Bezeichner für das Manifest. |
schemaVersion | Version des Manifestschemas. |
dataFormat | Format der Abrechnungsdatendatei. compressedJSON: Data format where each blob is a compressed file that contains data in JSON lines format. Um die Daten aus jedem Blob abzurufen, dekomprimieren Sie sie. |
createdDateTime | Datum und Uhrzeit der Erstellung der Manifestdatei. |
eTag | Version der Manifestdaten. Bei jeder Änderung der Abrechnungsinformationen wird ein neuer Wert generiert. |
partnerTenantId | Microsoft Entra-ID des Mandanten des Partners. |
rootDirectory | Stammverzeichnis der Datei. |
sasToken> | SAS-Token (Freigegebene Zugriffssignatur), mit dem Sie alle Dateien unter dem Verzeichnis lesen können. |
partitionType | Dividiert Daten basierend auf dem partitionValue-Attribut in mehrere Blobs. Das System teilt Partitionen auf, die die unterstützte Zahl überschreiten. Standardmäßig werden Daten basierend auf der Anzahl der Zeilenelemente in der Datei partitioniert. Legen Sie im Code keine feste Anzahl von Zeilenelementen oder Dateigrößen fest, da sich diese Werte ändern können. |
blobCount | Gesamtanzahl der Dateien für diese Partnermandanten-ID. |
blobs | Ein JSON-Array von "blob"-Objekten, die die Dateidetails für die Partnermandanten-ID enthalten. |
Blob-Objekt | Ein Objekt mit den folgenden Details: name und partitionValue |
name | Der Name des Blobs. |
partitionValue | Partition, die die Datei enthält. Partition, die die Datei enthält. Große Partitionen werden in mehrere Dateien aufgeteilt, die jeweils den gleichen "partitionValue" enthalten. |
API-Anforderung
GET <https://graph.microsoft.com/v1.0/reports/partners/billing/operations/9ab9cb54-d07f-4f52-9ea6-a09d7de52c14>
API-Antwort
Die Antwort empfiehlt, auf 10 Sekunden zu warten, bevor Sie es erneut versuchen, wenn Ihre Daten noch verarbeitet werden.
HTTP/1.1 200 OK
Retry-After: 10
{
"id": "9ab9cb54-d07f-4f52-9ea6-a09d7de52c14",
"createdDateTime": "2022-06-1T10-01-03.4Z",
"lastActionDateTime": "2022-06-1T10-01-05Z",
"status": "running"
}
API-Anforderung
(10 Sekunden nach der vorherigen Anforderung...)
GET <https://graph.microsoft.com/v1.0/reports/partners/billing/operations/9ab9cb54-d07f-4f52-9ea6-a09d7de52c14>
API-Antwort
Die API gibt den Status "erfolgreich" und den URI für "resourceLocation" zurück.
HTTP/1.1 200 OK
Content-Type: application/json
{
"@odata.context": "https://graph.microsoft.com/v1.0/\$metadata#reports/partners/billing/operations/\$entity",
"@odata.type": "#microsoft.graph.partners.billing.exportSuccessOperation",
"id": "f2170b13-6a8e-47d6-b481-6988490dc0cb",
"createdDateTime": "2023-12-05T21:17:29Z",
"lastActionDateTime": "2023-12-05T21:18:00.8897902Z",
"status": "succeeded",
"resourceLocation": {
"id": "44e8500b-ab92-490e-8ac3-90500a1d3427",
"createdDateTime": "2023-11-06T19:58:47.513Z",
"schemaVersion": "2",
"dataFormat": "compressedJSON",
"partitionType": "default",
"eTag": "RwDrn7fbiTXy6UULE",
"partnerTenantId": "0e195b37-4574-4539-bc42-0e539b9684c0",
"rootDirectory": "https://adlsreconbuprodeastus201.blob.core.windows.net/path_id",
"sasToken": "{token}",
"blobCount": 1,
"blobs": \[
{
"name": "part-00123-5a93fa5d-749f-48bc-a372-9b021d93c3fa.c000.json.gz",
"partitionValue": "default"
}
\]
}
}
Schritt 3: Herunterladen von Rechnungsabrechnungspositionen aus Azure Blob Storage
Zunächst müssen Sie das SAS-Token (Shared Access Signature) und den Blob-Speicherort abrufen. Diese Details finden Sie in den Eigenschaften "sasToken" und "rootDirectory" der Manifestnutzlast-API-Antwort. Verwenden Sie dann das Azure Storage SDK/Tool, um die BLOB-Datei herunterzuladen und zu entzippen. Sie befindet sich im JSONLines-Format .
Tipp
Sehen Sie sich unseren Beispielcode an. Es zeigt Ihnen, wie Sie die Azure-BLOB-Datei in Ihre lokale Datenbank herunterladen und entpacken.
Standard-API-Antwortstatus
Möglicherweise erhalten Sie diese HTTP-Status aus der API-Antwort:
Code | Beschreibung |
---|---|
400 – Ungültige Anforderung | Die Anforderung fehlt oder enthält falsche Daten. Überprüfen Sie den Antworttext auf Fehlerdetails. |
401 – Nicht autorisiert | Die Authentifizierung ist erforderlich, bevor der erste Anruf erfolgt. Authentifizieren mit dem Partner-API-Dienst. |
403 – Unzulässig | Sie verfügen nicht über die erforderliche Autorisierung, um die Anforderung zu stellen. |
404 – Nicht gefunden | Die angeforderten Ressourcen sind mit den bereitgestellten Eingabeparametern nicht verfügbar. |
410 – Nicht mehr | Der Manifestlink ist nicht mehr gültig oder aktiv. Senden Sie eine neue Anforderung. |
500: interner Serverfehler | Die API oder ihre Abhängigkeiten können die Anforderung im Moment nicht erfüllen. Versuchen Sie es später noch einmal. |
5000 – Keine Daten verfügbar | Das System hat keine Daten für die bereitgestellten Eingabeparameter. |
Attribute der Rechnungsabrechnungsposition
Informationen zum Vergleichen der Attribute, die von der Rechnungsabstimmungs-API für die Attributsätze "full" oder "basic" zurückgegeben werden, finden Sie in der folgenden Tabelle. Weitere Informationen zu diesen Attributen finden Sie unter Verwenden der Recon-Datei.
Attribut | Vollständig | Grundlegend |
---|---|---|
PartnerId | ja | ja |
CustomerId | ja | ja |
CustomerName | ja | ja |
CustomerDomainName | ja | Nein |
CustomerCountry | ja | Nein |
InvoiceNumber | ja | ja |
MpnId | ja | Nein |
Tier2MpnId | ja | ja |
OrderId | ja | ja |
OrderDate | ja | ja |
ProductId | ja | ja |
SkuId | ja | ja |
AvailabilityId | ja | ja |
SkuName | ja | Nein |
ProductName | ja | ja |
ChargeType | ja | ja |
UnitPrice | ja | ja |
Menge | ja | Nein |
Zwischensumme | ja | ja |
TaxTotal | ja | ja |
Gesamt | ja | ja |
Währung | ja | ja |
PriceAdjustmentDescription | ja | ja |
PublisherName | ja | ja |
PublisherId | ja | Nein |
SubscriptionDescription | ja | Nein |
SubscriptionId | ja | ja |
ChargeStartDate | ja | ja |
ChargeEndDate | ja | ja |
TermAndBillingCycle | ja | ja |
EffectiveUnitPrice | ja | ja |
UnitType | ja | Nein |
AlternateId | ja | Nein |
BillableQuantity | ja | ja |
BillingFrequency | ja | Nein |
PricingCurrency | ja | ja |
PCToBCExchangeRate | ja | ja |
PCToBCExchangeRateDate | ja | Nein |
MeterDescription | ja | Nein |
ReservationOrderId | ja | ja |
CreditReasonCode | ja | ja |
SubscriptionStartDate | ja | ja |
SubscriptionEndDate | ja | ja |
ReferenceId | ja | ja |
ProductQualifiers | ja | Nein |
PromotionId | ja | ja |
ProductCategory | ja | ja |
Beispielcode
Informationen zur Verwendung dieser API finden Sie unter dem folgenden Link, der C#-Beispielcode enthält.