Freigeben über


Erwerben eines Add-Ons zu einem Abonnement

Gilt für: Partner Center | Partner Center-Betrieb durch 21Vianet | Partner Center für Microsoft Cloud for US Government

Hier erfahren Sie, wie Sie ein Add-On für ein vorhandenes Abonnement erwerben.

Voraussetzungen

  • Anmeldeinformationen, wie unter Partner Center-Authentifizierung beschrieben. Dieses Szenario unterstützt die Authentifizierung sowohl mit eigenständigen App- als auch mit App+Benutzeranmeldeinformationen.

  • Eine Kunden-ID (customer-tenant-id). Wenn Sie die ID des Kunden nicht kennen, können Sie sie im Partner Center nachschlagen, indem Sie den Arbeitsbereich Kunden und dann den Kunden aus der Kundenliste und dann Konto auswählen. Suchen Sie auf der Kontoseite des Kunden im Abschnitt Kundenkontoinfo nach der Microsoft-ID. Die Microsoft-ID entspricht der Kunden-ID (customer-tenant-id).

  • Eine Abonnement-ID. Dies ist das vorhandene Abonnement, für das ein Add-On-Angebot erworben werden soll.

  • Eine Angebots-ID, die das zu erwerbende Add-On-Angebot identifiziert.

Kauf eines Add-Ons über Code

Wenn Sie ein Add-On für ein Abonnement erwerben, aktualisieren Sie den ursprünglichen Abonnementauftrag mit der Bestellung für das Add-On. Im Folgenden ist customerId die Kunden-ID, subscriptionId die Abonnement-ID und addOnOfferId die Angebots-ID für das Add-On.

Gehen Sie wie folgt vor:

  1. Rufen Sie eine Schnittstelle zu den Vorgängen für das Abonnement ab.

    var subscriptionOperations = partnerOperations.Customers.ById(customerId).Subscriptions.ById(subscriptionId);
    
  2. Verwenden Sie diese Schnittstelle, um ein Abonnementobjekt zu instanziieren. Dadurch erhalten Sie die Details des übergeordneten Abonnements, einschließlich der Bestell-ID.

    var parentSubscription = subscriptionOperations.Get();
    
  3. Instanziieren Sie ein neues Order-Objekt . Diese Bestellung instance wird verwendet, um die ursprüngliche Bestellung zu aktualisieren, die zum Erwerb des Abonnements verwendet wurde. Fügen Sie der Bestellung, die das Add-On darstellt, ein einzeiliges Element hinzu.

    var orderToUpdate = new Order()
    {
        ReferenceCustomerId = customerId,
        LineItems = new List<OrderLineItem>()
        {
            new OrderLineItem()
            {
                LineItemNumber = 0,
                OfferId = addOnOfferId,
                FriendlyName = "Some friendly name",
                Quantity = 2,
                ParentSubscriptionId = subscriptionId
            }
        }
    };
    
  4. Aktualisieren Sie die ursprüngliche Bestellung für das Abonnement mit der neuen Bestellung für das Add-On.

    Order updatedOrder = partnerOperations.Customers.ById(customerId).Orders.ById(parentSubscription.OrderId).Patch(orderToUpdate);
    

C#

Um ein Add-On zu erwerben, rufen Sie zunächst eine Schnittstelle zu den Abonnementvorgängen ab, indem Sie die IAggregatePartner.Customers.ById-Methode mit der Kunden-ID zur Identifizierung des Kunden und die Subscriptions.ById-Methode aufrufen, um das Abonnement zu identifizieren, das über das Add-On-Angebot verfügt. Verwenden Sie diese Schnittstelle , um die Abonnementdetails abzurufen, indem Sie Get aufrufen. Die Abonnementdetails enthalten die Bestell-ID des Abonnementauftrags, bei dem es sich um die Bestellung handelt, die mit dem Add-On aktualisiert werden soll.

Instanziieren Sie als Nächstes ein neues Order-Objekt, und füllen Sie es mit einem einzelnen LineItem-instance auf, der die Informationen zum Identifizieren des Add-Ons enthält, wie im folgenden Codeausschnitt gezeigt. Sie verwenden dieses neue Objekt, um die Abonnementreihenfolge mit dem Add-On zu aktualisieren. Rufen Sie schließlich die Patch-Methode auf, um die Abonnementbestellung zu aktualisieren, nachdem Sie den Kunden zuerst mit IAggregatePartner.Customers.ById und den Auftrag mit Orders.ById identifiziert haben.

// IAggregatePartner partnerOperations;
// string customerId;
// string subscriptionId;
// string addOnOfferId;

// Get an interface to the operations for the subscription.
var subscriptionOperations = partnerOperations.Customers.ById(customerId).Subscriptions.ById(subscriptionId);

// Get the parent subscription details.
var parentSubscription = subscriptionOperations.Get();

// In order to buy an add-on subscription for this offer, we need to patch/update the order through which the base offer was purchased
// by creating an order object with a single line item which represents the add-on offer purchase.
var orderToUpdate = new Order()
{
    ReferenceCustomerId = customerId,
    LineItems = new List<OrderLineItem>()
    {
        new OrderLineItem()
        {
            LineItemNumber = 0,
            OfferId = addOnOfferId,
            FriendlyName = "Some friendly name",
            Quantity = 2,
            ParentSubscriptionId = subscriptionId
        }
    }
};

// Update the order to apply the add on purchase.
Order updatedOrder = partnerOperations.Customers.ById(customerId).Orders.ById(parentSubscription.OrderId).Patch(orderToUpdate);

Beispiel: Konsolentest-App. Project: Partner Center SDK Samples Class: AddSubscriptionAddOn.cs

REST-Anforderung

Anforderungssyntax

Methode Anforderungs-URI
PATCH {baseURL}/v1/customers/{customer-tenant-id}/orders/{order-id} HTTP/1.1

URI-Parameter

Verwenden Sie die folgenden Parameter, um den Kunden und die Bestellung zu identifizieren.

Name Typ Erforderlich BESCHREIBUNG
customer-tenant-id guid J Der Wert ist eine GUID-formatierte Customer-Tenant-ID , die den Kunden identifiziert.
order-id guid J Der Auftragsbezeichner.

Anforderungsheader

Weitere Informationen finden Sie unter Partner Center-REST-Header.

Anforderungstext

In den folgenden Tabellen werden die Eigenschaften im Anforderungstext beschrieben.

Order

Name Typ Erforderlich BESCHREIBUNG
Id string N Die Auftrags-ID.
ReferenceCustomerId Zeichenfolge J Die Kunden-ID.
LineItems Array von Objekten J Ein Array von OrderLineItem-Objekten .
CreationDate Zeichenfolge N Das Datum, an dem der Auftrag erstellt wurde, im Format Datum/Uhrzeit.
Attribute Objekt (object) N Enthält "ObjectType": "Order".

OrderLineItem

Name Typ Erforderlich BESCHREIBUNG
LineItemNumber number J Die Positionsnummer, beginnend mit 0.
OfferId Zeichenfolge J Die Angebots-ID des Add-Ons.
SubscriptionId Zeichenfolge N Die ID des erworbenen Add-On-Abonnements.
ParentSubscriptionId Zeichenfolge J Die ID des übergeordneten Abonnements, das das Add-On-Angebot enthält.
FriendlyName Zeichenfolge N Der Anzeigename für dieses Zeilenelement.
Menge number J Die Anzahl der Lizenzen.
PartnerIdOnRecord Zeichenfolge N Die PartnerID des erfassten Partners.
Attribute Objekt (object) N Enthält "ObjectType": "OrderLineItem".

Anforderungsbeispiel

PATCH https://api.partnercenter.microsoft.com/v1/customers/4d3cf487-70f4-4e1e-9ff1-b2bfce8d9f04/orders/CF3B0E37-BE0B-4CDD-B584-D1A97D98A922 HTTP/1.1
Authorization: Bearer <token>
Accept: application/json
MS-RequestId: 17a2658e-d2cc-439b-a2f0-2aefd9344fbc
MS-CorrelationId: aaaa0000-bb11-2222-33cc-444444dddddd
X-Locale: en-US
Content-Type: application/json
Host: api.partnercenter.microsoft.com
Content-Length: 414
Expect: 100-continue

{
    "Id": null,
    "ReferenceCustomerId": "4d3cf487-70f4-4e1e-9ff1-b2bfce8d9f04",
    "LineItems": [{
            "LineItemNumber": 0,
            "OfferId": "2828BE95-46BA-4F91-B2FD-0BEF192ECF60",
            "SubscriptionId": null,
            "ParentSubscriptionId": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
            "FriendlyName": "Some friendly name",
            "Quantity": 2,
            "PartnerIdOnRecord": null,
            "Attributes": {
                "ObjectType": "OrderLineItem"
            }
        }
    ],
    "CreationDate": null,
    "Attributes": {
        "ObjectType": "Order"
    }
}

REST-Antwort

Bei erfolgreicher Ausführung gibt diese Methode die aktualisierte Abonnementreihenfolge im Antworttext zurück.

Erfolgs- und Fehlercodes der Antwort

Jede Antwort enthält einen HTTP-Statuscode, der Aufschluss darüber gibt, ob der Vorgang erfolgreich war, sowie ggf. zusätzliche Debuginformationen. Verwende ein Tool für die Netzwerkablaufverfolgung, um diesen Code, den Fehlertyp und zusätzliche Parameter zu lesen. Die vollständige Liste finden Sie unter Partner Center-Fehlercodes.

Antwortbeispiel

HTTP/1.1 200 OK
Content-Length: 1135
Content-Type: application/json; charset=utf-8
MS-CorrelationId: aaaa0000-bb11-2222-33cc-444444dddddd
MS-RequestId: 17a2658e-d2cc-439b-a2f0-2aefd9344fbc
MS-CV: WtFy3zI8V0u2lnT9.0
MS-ServerId: 020021921
Date: Wed, 25 Jan 2017 23:01:08 GMT

{
    "id": "cf3b0e37-be0b-4cdd-b584-d1a97d98a922",
    "referenceCustomerId": "4d3cf487-70f4-4e1e-9ff1-b2bfce8d9f04",
    "billingCycle": "none",
    "lineItems": [{
            "lineItemNumber": 0,
            "offerId": "195416C1-3447-423A-B37B-EE59A99A19C4",
            "subscriptionId": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
            "friendlyName": "new offer purchase",
            "quantity": 5,
            "links": {
                "subscription": {
                    "uri": "/customers/4d3cf487-70f4-4e1e-9ff1-b2bfce8d9f04/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e",
                    "method": "GET",
                    "headers": []
                }
            }
        }, {
            "lineItemNumber": 1,
            "offerId": "2828BE95-46BA-4F91-B2FD-0BEF192ECF60",
            "subscriptionId": "bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f",
            "friendlyName": "Some friendly name",
            "quantity": 2,
            "links": {
                "subscription": {
                    "uri": "/customers/4d3cf487-70f4-4e1e-9ff1-b2bfce8d9f04/subscriptions/bbbb1b1b-cc2c-dd3d-ee4e-ffffff5f5f5f",
                    "method": "GET",
                    "headers": []
                }
            }
        }
    ],
    "creationDate": "2017-01-25T14:53:12.093-08:00",
    "links": {
        "self": {
            "uri": "/customers/4d3cf487-70f4-4e1e-9ff1-b2bfce8d9f04/orders/cf3b0e37-be0b-4cdd-b584-d1a97d98a922",
            "method": "GET",
            "headers": []
        }
    },
    "attributes": {
        "etag": "eyJpZCI6ImNmM2IwZTM3LWJlMGItNGNkZC1iNTg0LWQxYTk3ZDk4YTkyMiIsInZlcnNpb24iOjJ9",
        "objectType": "Order"
    }
}