구독에 대한 추가 기능 구매
적용 대상: 파트너 센터 | 21Vianet에서 운영되는 파트너 센터 | Microsoft Cloud for US Government 파트너 센터
기존 구독에 대한 추가 기능을 구매하는 방법입니다.
필수 구성 요소
자격 증명(파트너 센터 인증에서 설명). 이 시나리오는 독립 실행형 앱 및 App+사용자 자격 증명을 모두 사용하여 인증을 지원합니다.
고객 ID (
customer-tenant-id
). 고객의 ID를 모르는 경우 고객 작업 영역, 고객 목록에서 고객, 계정을 차례로 선택하여 파트너 센터에서 조회할 수 있습니다. 고객 계정 페이지의 고객 계정 정보 섹션에서 Microsoft ID를 찾습니다. Microsoft ID는 고객 ID(customer-tenant-id
)와 동일합니다.구독 ID입니다. 이 구독은 추가 기능 제품을 구매할 기존 구독입니다.
구매할 추가 기능 제품을 식별하는 제품 ID입니다.
코드를 통해 추가 기능 구매
구독에 대한 추가 기능을 구매하는 경우 추가 기능에 대한 주문으로 원래 구독 주문을 업데이트합니다. 다음에서 customerId는 고객 ID이고 subscriptionId는 구독 ID이고 addOnOfferId는 추가 기능의 제품 ID입니다.
실행할 단계는 다음과 같습니다.
구독 작업에 대한 인터페이스를 가져옵니다.
var subscriptionOperations = partnerOperations.Customers.ById(customerId).Subscriptions.ById(subscriptionId);
해당 인터페이스를 사용하여 구독 개체를 인스턴스화합니다. 그러면 주문 ID를 포함한 부모 구독 세부 정보가 표시됩니다.
var parentSubscription = subscriptionOperations.Get();
새 Order 개체를 인스턴스화합니다. 이 주문 instance 구독을 구매하는 데 사용되는 원래 주문을 업데이트하는 데 사용됩니다. 추가 기능을 나타내는 순서에 한 줄 항목을 추가합니다.
var orderToUpdate = new Order() { ReferenceCustomerId = customerId, LineItems = new List<OrderLineItem>() { new OrderLineItem() { LineItemNumber = 0, OfferId = addOnOfferId, FriendlyName = "Some friendly name", Quantity = 2, ParentSubscriptionId = subscriptionId } } };
추가 기능에 대한 새 주문으로 구독의 원래 주문을 업데이트합니다.
Order updatedOrder = partnerOperations.Customers.ById(customerId).Orders.ById(parentSubscription.OrderId).Patch(orderToUpdate);
C#
추가 기능을 구매하려면 먼저 고객 ID를 사용하여 IAggregatePartner.Customers.ById 메서드를 호출하여 구독 작업에 대한 인터페이스를 가져오고, Subscriptions.ById 메서드를 호출하여 추가 기능 제품이 있는 구독을 식별합니다. 해당 인터페이스 를 사용하여 Get을 호출하여 구독 세부 정보를 검색 합니다. 구독 세부 정보에는 추가 기능으로 업데이트할 주문인 구독 주문의 주문 ID가 포함됩니다.
다음으로, 새 Order 개체를 인스턴스화하고 다음 코드 조각과 같이 추가 기능을 식별하는 정보가 포함된 단일 LineItem instance 채웁니다. 이 새 개체를 사용하여 추가 기능으로 구독 순서를 업데이트합니다. 마지막으로, IAggregatePartner.Customers.ById로 고객을 식별하고 Orders.ById로 주문을 식별한 후 Patch 메서드를 호출하여 구독 주문을 업데이트합니다.
// 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);
샘플: 콘솔 테스트 앱. 프로젝트: 파트너 센터 SDK 샘플 클래스: AddSubscriptionAddOn.cs
REST 요청
요청 구문
방법 | 요청 URI |
---|---|
PATCH | {baseURL}/v1/customers/{customer-tenant-id}/orders/{order-id} HTTP/1.1 |
URI 매개 변수
다음 매개 변수를 사용하여 고객 및 주문을 식별합니다.
Name | 형식 | 필수 | Description |
---|---|---|---|
customer-tenant-id | guid | Y | 값은 고객을 식별하는 GUID 형식 의 customer-tenant-id 입니다. |
order-id | guid | Y | 주문 식별자입니다. |
요청 헤더
자세한 내용은 파트너 센터 REST 헤더를 참조하세요.
요청 본문
다음 표에서는 요청 본문의 속성을 설명합니다.
주문
Name | 형식 | 필수 | 설명 |
---|---|---|---|
Id | 문자열 | N | 주문 ID입니다. |
ReferenceCustomerId | 문자열 | Y | 고객 ID |
LineItems | 개체의 배열 | Y | OrderLineItem 개체의 배열입니다. |
CreationDate | 문자열 | N | 주문이 만들어진 날짜(날짜-시간 형식)입니다. |
특성 | object | N | "ObjectType": "Order"를 포함합니다. |
OrderLineItem
Name | 형식 | 필수 | Description |
---|---|---|---|
LineItemNumber | number | Y | 0부터 시작하는 품목 번호입니다. |
OfferId | 문자열 | Y | 추가 기능의 제품 ID입니다. |
SubscriptionId | 문자열 | N | 구매한 추가 기능 구독의 ID입니다. |
ParentSubscriptionId | 문자열 | Y | 추가 기능 제품이 있는 부모 구독의 ID입니다. |
FriendlyName | 문자열 | N | 이 품목의 이름입니다. |
수량 | number | Y | 라이선스 수입니다. |
PartnerIdOnRecord | 문자열 | N | 레코드 파트너의 PartnerID입니다. |
특성 | object | N | "ObjectType": "OrderLineItem"을 포함합니다. |
요청 예제
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 응답
성공하면 이 메서드는 응답 본문에서 업데이트된 구독 순서를 반환합니다.
응답 성공 및 오류 코드
각 응답에는 성공 또는 실패와 추가 디버깅 정보를 나타내는 HTTP 상태 코드가 함께 제공됩니다. 네트워크 추적 도구를 사용하여 이 코드, 오류 유형 및 추가 매개 변수를 읽을 수 있습니다. 전체 목록은 파트너 센터 오류 코드를 참조하세요.
응답 예제
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"
}
}