Выставление счетов за контейнеры Azure с помощью службы измерения коммерческой платформы
С помощью службы измерения коммерческой платформы можно создавать предложения контейнеров Azure, которые взимается в соответствии с нестандартными единицами. Перед публикацией предложения на коммерческой платформе необходимо определить такие измерения выставления счетов, как пропускная способность, сегменты, файлы журнала, сканирование, обработанные электронные письма и т. д. Затем клиенты платят в соответствии с их потреблением этих измерений с приложением, информирующим Майкрософт через API службы измерения коммерческой платформы о оплачиваемых событиях по мере их возникновения.
Предварительные требования для выставления счетов по тарифу
Чтобы предложение контейнера Azure использовало выставление счетов по тарифу, сначала просмотрите параметры лицензирования, описанные в плане предложения контейнера Azure, и убедитесь, что у вас есть пользовательские потребности выставления счетов, которые не соответствуют одной из шести существующих стандартных моделей выставления счетов.
Затем предложение контейнера Azure может интегрироваться с API-интерфейсами службы измерения коммерческой платформы , чтобы сообщить Корпорации Майкрософт о оплачиваемых событиях.
Внимание
Приложению придется вызывать API-интерфейсы службы измерения коммерческой платформы. В настоящее время нет возможности разрешить размещенной службе (за пределами приложения) вызывать API службы измерения.
Примечание.
Служба измерения Marketplace доступна только для пользовательской модели выставления счетов и не применяется к модели выставления счетов для каждого пользователя.
Как взимается плата за использование с учетом цен
Понимание иерархии предложений важно, когда речь идет об определении предложения вместе с ее моделями ценообразования.
- Каждое предложение настроено для продажи через корпорацию Майкрософт или нет. После публикации предложения этот параметр не может быть изменен.
- Каждое предложение, настроенное для продажи через корпорацию Майкрософт, может иметь один или несколько планов.
- Каждый план имеет модель ценообразования, связанную с ней: ежемесячный план на основе использования или использование собственной лицензии (BYOL). Для ежемесячного плана выставления счетов на основе использования можно выбрать бесплатный вариант, один из шести стандартных вариантов выставления счетов или настраиваемый.
- Модель ценообразования и параметры ввода цен не могут быть обновлены после публикации.
- Каждый план должен иметь полный план ценообразования.
- Вы можете выбрать цену с помощью пользовательских измерений для оплаты клиентам, чтобы помочь в удовлетворении ваших потребностей в выставлении счетов. Каждое измерение представляет оплачиваемую единицу, которую служба передает корпорации Майкрософт с помощью API службы измерения коммерческой платформы.
Внимание
Вы должны отслеживать использование в коде и отправлять только события использования в Корпорацию Майкрософт для использования, на который вы хотите начислить счет.
Примечание.
Предложения будут выставляться клиентам в валюте соглашения клиентов с использованием цены на локальный рынок, которая была опубликована в то время, когда было создано предложение. Сумма, которую платят клиенты, и что поставщики услуг оплачиваются, зависит от валютных курсов в то время, когда клиент трансактирует предложение. Дополнительные сведения о том, как мы преобразуем валюту?.
Пример пользовательских параметров ценообразования
Например, Contoso является издателем, IP-адрес которого находится в логике сегментирования для приложения Kubernetes. Компания Contoso хочет взимать плату за свои клиенты в зависимости от количества используемых сегментов. Они также изучают другие удобные и конкурентные варианты выставления счетов. Компания Contoso зарегистрирована в Качестве издателя в Центре партнеров для программы коммерческой платформы и хочет опубликовать предложения контейнеров клиентам Azure. Существует четыре плана, связанные с Contoso, описанные ниже.
Плата за сегменты, используемые в час, например $ 1000/shard/hour
Моделирование однократного оплаты или регулярного выставления счетов: предположим, что Contoso хочет взимать клиент 449/mo за использование до 100 файлов журналов из приложения. Логика приложения Contoso отслеживает событие использования за месяц и активирует плату в конце месяца за использование 100 файлов журналов.
Моделирование многоуровневого выставления счетов: предположим, что Contoso хочет взимать $449/mo за до 100 сегментов, а затем многоуровневые цены для любого превышения. Логика приложения будет отслеживать использование в течение месяца, сегментируйте использование соответствующим образом и сообщите об этом с помощью API измерения ниже в конце периода:
Многомерное выставление счетов: Компания Contoso также может использовать пользовательские средства измерения для удовлетворения своих потребностей в расширенном выставлении счетов с помощью нескольких измерений.
В зависимости от выбранного плана клиент Azure, получающий предложение контейнера Contoso, взимается в зависимости от их использования. Contoso подсчитывает использование без отправки каких-либо событий использования в корпорацию Майкрософт. Если клиенты используют достаточное количество или периодически, contoso сообщает об использовании. Клиентам не нужно изменять планы или делать что-либо другое. Contoso измеряет использование и начинает выдавать события использования корпорации Майкрософт для зарядки чрезмерного использования с помощью API службы измерения коммерческой платформы. Корпорация Майкрософт, в свою очередь, взимает плату за использование, указанное издателем в пользовательских измерениях. Выставление счетов выполняется на следующей ежемесячной период выставления счетов.
Измерения выставления счетов
Каждая тарифицируемая величина определяет пользовательскую единицу, для которой независимый поставщик программного обеспечения может создавать события потребления. Измерения выставления счетов также используются для обмена данными с клиентом о том, как они будут выставляться за использование программного обеспечения. Они определены следующим образом:
- Идентификатор — неизменяемый идентификатор величины, который указывается в событиях потребления.
- Отображаемое имя — отображаемое имя, связанное с величиной, например "отправлено текстовых сообщений".
- Единица измерения — описание тарифицируемых единиц, например "за текстовое сообщение" или "за 100 писем".
- Цена за единицу в долларах США: цена за одну единицу измерения. Это поле может иметь нулевое значение.
Внимание
Необходимо отслеживать использование в коде приложения и отправлять события использования корпорации Майкрософт в соответствии с вашими потребностями выставления счетов.
Измерения выставления счетов являются общими во всех планах предложения. Некоторые атрибуты применяются к измерению во всех планах, а другие атрибуты зависят от плана.
Атрибуты, определяющие само измерение, совместно используются во всех планах предложения. Перед публикацией предложения изменения, внесенные в эти атрибуты из контекста любого плана, влияют на определение измерения во всех планах. После публикации предложения эти атрибуты больше не редактируются. Они перечислены ниже.
- Идентификатор
- Отображаемое имя.
- Единице измерения
Другие атрибуты измерения относятся к каждому плану и могут иметь разные значения в зависимости от плана. Перед публикацией плана можно изменить эти значения, и будет затронут только этот план. После публикации плана эти атрибуты больше нельзя будет изменить. Они перечислены ниже.
- Цена за единицу в долл. США
Измерения также имеют специальную концепцию с именем "включено":
- Включено: указывает, что этот план входит в измерение. Если вы создаете новый план, который не отправляет события использования на основе этого измерения, возможно, этот параметр не установлен. Кроме того, все новые измерения, добавленные после первоначальной публикации плана, будут отображаться как "не включено" для уже опубликованного плана. Отключенное измерение не отображается в списках измерений для плана, который отображается клиентами.
Примечание.
Явно не поддерживаются следующие сценарии.
- Вы можете добавить новое измерение в новый план. Новое измерение не будет включено во все уже опубликованные планы.
Указание цены за единицу величины для поддерживаемых рынков
Как и другие цены на основе использования, цены на измерения выставления счетов можно задать на поддерживаемую страну или регион. Для этого необходимо применить функцию импорта и экспорта данных о цене в Центре партнеров, как описано ниже.
- Определите нужные величины и укажите, какие рынки поддерживаются.
- Экспортируйте эти данные в файл.
- Добавьте нужные цены для страны или региона, а затем импортируйте файл в Центр партнеров.
Пользовательский интерфейс счетчика изменится на то, что цены на измерение можно увидеть только в файле.
Частный план
Как и стандартные планы выставления счетов на основе использования, план с пользовательскими измерениями можно задать как частный план, доступный только определенной аудиторией плана.
Ограничения
Режим блокировки
Поскольку измерение, используемое с службой измерения коммерческой платформы, представляет понимание того, как клиент будет платить за обслуживание, все сведения о измерении больше не редактируются после публикации. Важно полностью определить все величины для плана до публикации.
После публикации предложения с измерением следующие сведения на уровне предложения для этого измерения больше не могут быть изменены:
- Идентификатор
- Отображаемое имя.
- Единице измерения
После публикации плана этот уровень плана больше не может быть изменен:
- Включена ли эта величина для плана
Верхние пределы
Максимальное число измерений, которое можно настроить для одного предложения, составляет 30 уникальных измерений.
Выставление счетов по тарифу для контейнеров Azure
Если издатель создает собственные измерения контроля для предложения, которое должно быть опубликовано в Центре партнеров, следует использовать API выставления счетов за потребление. Интеграция с отслеживаемыми API выставления счетов за потребление требуется для любого приобретенного предложения с одним или несколькими планами с пользовательскими измерениями, чтобы создавать события потребления.
Внимание
Дополнительные сведения о создании пользовательских измерений измерения измерения для приложений Kubernetes см. в статье "Создание предложения контейнера Azure".
Применение заметки TLS 1.2
Версия TLS 1.2 применяется в качестве минимальной версии для HTTPS-соединений. Убедитесь, что в коде используется эта версия TLS. TLS версии 1.0 и 1.1 устарели, а попытки подключения отклоняются.
Выставление счета по тарифу за одно событие потребления
API события потребления должен вызываться издателем для отправки событий потребления в активный ресурс (с подпиской) для плана, приобретенного конкретным клиентом. Событие потребления создается отдельно для каждого пользовательского измерения плана, определенного издателем при публикации предложения.
Для каждого часа календаря и измерения можно создавать только одно событие использования. Если в течение часа использовалось более одной единицы, все единицы, потребленные в течение часа, накапливаются, а затем выдаются в одном событии. События потребления генерируются только за последние 24 часа. Если вы в любое время выдаете событие использования в период от 8:00 до 8:59:59 (и оно принято) и отправляет другое событие в тот же день от 8:00 до 8:59:59, оно отклоняется как дубликат.
POST: https://marketplaceapi.microsoft.com/api/usageEvent?api-version=<ApiVersion>
Параметры запроса.
Параметр | Рекомендация |
---|---|
ApiVersion |
Используйте версию 2018-08-31. |
Заголовки запроса:
Content-type | Использование application/json |
---|---|
x-ms-requestid |
Уникальное строковое значение для отслеживания запроса клиента, желательно GUID. Если это значение не указано, он создается и предоставляется в заголовках ответа. |
x-ms-correlationid |
Уникальное строковое значение для операции на стороне клиента. Этот параметр позволяет сопоставить все события клиентской операции с событиями на стороне сервера. Если это значение не указано, он создается и предоставляется в заголовках ответа. |
authorization |
Уникальный маркер доступа, определяющий независимого поставщика программного обеспечения, совершающего вызов API. Формат заключается "Bearer <access_token>" в том, когда значение маркера извлекается издателем, как описано в приложении Kubernetes в стратегиях проверки подлинности. |
Пример текста запроса:
{
"resourceUri": "<ARM resource URI of the Kubernetes app instance>", // unique identifier of the resource against which usage is emitted.
"quantity": 5.0, // how many units were consumed for the date and hour specified in effectiveStartTime, must be greater than 0 or a double integer
"dimension": "dim1", // custom dimension identifier
"effectiveStartTime": "2018-12-01T08:30:14", // time in UTC when the usage event occurred, from now and until 24 hours back
"planId": "plan1", // id of the plan purchased for the offer
}
Примечание.
Для приложений resourceUri
Kubernetes используется универсальный код ресурса ARM экземпляра приложения Kubernetes.
Отклики
Код: 200
ОК. Эмиссия потребления была принята и записана на стороне Майкрософт для дальнейшей обработки и выставления счетов.
Пример полезных данных ответа:
{
"usageEventId": <guid>, // unique identifier associated with the usage event in Microsoft records
"status": "Accepted" // this is the only value in case of single usage event
"messageTime": "2020-01-12T13:19:35.3458658Z", // time in UTC this event was accepted
"resourceUri": "<ARM resource URI of the Kubernetes app instance>", // unique identifier of the resource against which usage is emitted. For SaaS it's the subscriptionId.
"quantity": 5.0, // amount of emitted units as recorded by Microsoft
"dimension": "dim1", // custom dimension identifier
"effectiveStartTime": "2018-12-01T08:30:14", // time in UTC when the usage event occurred, as sent by the ISV
"planId": "plan1", // id of the plan purchased for the offer
}
Код: 400
Недопустимый запрос.
- Указаны отсутствующие или недопустимые данные запроса.
- Время
effectiveStartTime
было более чем 24 назад. Срок действия события истек.
Пример полезных данных ответа:
{
"message": "One or more errors have occurred.",
"target": "usageEventRequest",
"details": [
{
"message": "The resourceUri is required.",
"target": "ResourceUri",
"code": "BadArgument"
}
],
"code": "BadArgument"
}
Код: 400
Недопустимый запрос.
- URI ресурса уже зарегистрирован ранее, необходимо ждать 24 часа перед отправкой использования.
Пример полезных данных ответа:
{
"message": "One or more errors have occurred.",
"target": "usageEventRequest",
"details": [
{
"message": "Invalid usage state.",
"target": "ResourceUri",
"code": "BadArgument"
}
],
"code": "BadArgument"
}
Код: 403
Запрещено. Маркер авторизации не указан, является недопустимым или срок его действия истек.
Код: 409
Конфликт. Событие использования уже успешно отправлено для указанного идентификатора ресурса, настоящей даты и часа потребления.
Пример полезных данных ответа:
{
"additionalInfo": {
"acceptedMessage": {
"usageEventId": "<guid>", //unique identifier associated with the usage event in Microsoft records
"status": "Duplicate",
"messageTime": "2020-01-12T13:19:35.3458658Z",
"resourceUri": "<ARM resource URI of the Kubernetes app instance>", //unique identifier of the resource against which usage is emitted.
"quantity": 1.0,
"dimension": "dim1",
"effectiveStartTime": "2020-01-12T11:03:28.14Z",
"planId": "plan1"
}
},
"message": "This usage event already exist.",
"code": "Conflict"
}
Событие потребления пакетного выставления счетов
API пакетных событий потребления позволяет одновременно создавать события потребления для нескольких приобретенных ресурсов. Кроме того, он позволяет выдавать несколько событий использования для одного ресурса, если они в течение разных календарных часов. Максимальное число событий в одном пакете: 25.
POST: https://marketplaceapi.microsoft.com/api/batchUsageEvent?api-version=<ApiVersion>
Параметры запроса.
Параметр | Рекомендация |
---|---|
ApiVersion |
Используйте версию 2018-08-31. |
Заголовки запроса:
Content-type | Использование application/json |
---|---|
x-ms-requestid |
Уникальное строковое значение для отслеживания запроса клиента, желательно GUID. Если это значение не указано, создается один из них и предоставляется в заголовках ответа. |
x-ms-correlationid |
Уникальное строковое значение для операции на стороне клиента. Этот параметр позволяет сопоставить все события клиентской операции с событиями на стороне сервера. Если это значение не указано, создается и предоставляется в заголовках ответа. |
authorization |
Уникальный маркер доступа, определяющий независимого поставщика программного обеспечения, совершающего вызов API. Формат заключается Bearer <access_token> в том, когда значение маркера извлекается издателем, как описано в приложении Kubernetes в стратегиях проверки подлинности. |
Примечание.
В тексте запроса идентификатор resourceUri
ресурса для приложений Kubernetes .
Пример текста запроса для приложений Kubernetes:
{
"request": [ // list of usage events for the same or different resources of the publisher
{ // first event
"resourceUri": "<ARM resource URI of the Kubernetes app instance>", // Unique identifier of the resource against which usage is emitted.
"quantity": 5.0, // how many units were consumed for the date and hour specified in effectiveStartTime, must be greater than 0 or a double integer
"dimension": "dim1", //Custom dimension identifier
"effectiveStartTime": "2018-12-01T08:30:14",//Time in UTC when the usage event occurred, from now and until 24 hours back
"planId": "plan1", // id of the plan purchased for the offer
},
{ // next event
"resourceUri": "<ARM resource URI of the Kubernetes app instance>",
"quantity": 39.0,
"dimension": "email",
"effectiveStartTime": "2018-11-01T23:33:10
"planId": "gold", // id of the plan purchased for the offer
}
]
}
Отклики
Код: 200
ОК. Эмиссия пакетного потребления была принята и записана на стороне Майкрософт для дальнейшей обработки и выставления счетов. Список ответов возвращается с состоянием каждого отдельного события в пакете. Необходимо выполнить итерацию полезных данных ответа, чтобы понять ответы для каждого отдельного события потребления, отправляемого как часть события пакетной службы.
Пример полезных данных ответа:
{
"count": 2, // number of records in the response
"result": [
{ // first response
"usageEventId": "<guid>", // unique identifier associated with the usage event in Microsoft records
"status": "Accepted" // see list of possible statuses below,
"messageTime": "2020-01-12T13:19:35.3458658Z", // Time in UTC this event was accepted by Microsoft,
"resourceUri": "<ARM resource URI of the Kubernetes app instance>", // unique identifier of the resource against which usage is emitted.
"quantity": 5.0, // amount of emitted units as recorded by Microsoft
"dimension": "dim1", // custom dimension identifier
"effectiveStartTime": "2018-12-01T08:30:14",// time in UTC when the usage event occurred, as sent by the ISV
"planId": "plan1", // id of the plan purchased for the offer
},
{ // second response
"status": "Duplicate",
"messageTime": "0001-01-01T00:00:00",
"error": {
"additionalInfo": {
"acceptedMessage": {
"usageEventId": "<guid>",
"status": "Duplicate",
"messageTime": "2020-01-12T13:19:35.3458658Z",
"resourceUri": "<ARM resource URI of the Kubernetes app instance>",
"quantity": 1.0,
"dimension": "email",
"effectiveStartTime": "2020-01-12T11:03:28.14Z",
"planId": "gold"
}
},
"message": "This usage event already exist.",
"code": "Conflict"
},
"resourceId": "<guid2>",
"quantity": 1.0,
"dimension": "email",
"effectiveStartTime": "2020-01-12T11:03:28.14Z",
"planId": "gold"
}
]
}
Описание кода состояния, указанного в ответе API BatchUsageEvent
:
Код состояния | Description |
---|---|
Accepted |
Принято. |
Expired |
Потребление с истекшим сроком действия. |
Duplicate |
Предоставлен дубликат сведений о потреблении. |
Error |
Код ошибки. |
ResourceNotFound |
Указан недопустимый ресурс потребления. |
ResourceNotAuthorized |
Вы не авторизованы для предоставления использования этого ресурса. |
ResourceNotActive |
Ресурс приостановлен или не был активирован. |
InvalidDimension |
Измерение, для которого предоставлены сведения о потреблении, недопустимо для этого предложения или плана. |
InvalidQuantity |
Переданное количество меньше или равно 0. |
BadArgument |
Входное значение отсутствует или является недопустимым. |
Код: 400
Недопустимый запрос. Пакет содержал более 25 событий потребления.
Код: 403
Запрещено. Маркер авторизации не указан, является недопустимым или срок его действия истек.
Измерение выставления счетов извлекает события использования
Вы можете вызвать API событий использования, чтобы получить список событий использования. Поставщики программного обеспечения могут использовать этот API для просмотра событий использования, которые были размещены в течение определенного настраиваемого периода времени и состояния этих событий в точке вызова API.
GET: https://marketplaceapi.microsoft.com/api/usageEvents
Параметры запроса.
Параметр | Рекомендация |
---|---|
ApiVersion | Используйте версию 2018-08-31. |
usageStartDate | DateTime в формате ISO8601. Например, 2020-12-03T15:00 или 2020-12-03 |
UsageEndDate (необязательно) | DateTime в формате ISO8601. Default = текущая дата |
offerId (необязательно) | Default = все доступные |
planId (необязательно) | Default = все доступные |
измерение (необязательно) | Default = все доступные |
azureSubscriptionId (необязательно) | Default = все доступные |
reconStatus (необязательно) | Default = все доступные |
Возможные значения reconStatus:
ReconStatus | Description |
---|---|
Отправлено | Пока не обработано аналитикой КОМПЬЮТЕРов |
Акцептировано | Соответствует аналитике компьютеров |
Аннулировано | Отклонено в конвейере. Обратитесь в службу поддержки Майкрософт, чтобы изучить причину. |
Несоответствие | Объемы Аналитики MarketplaceAPI и Центра партнеров являются ненулевой, но не соответствуют |
TestHeaders | Подписка, указанная с использованием тестовых заголовков, и поэтому не в аналитике компьютеров |
DryRun | Отправлено с помощью SessionMode=DryRun и, следовательно, не на компьютере |
Заголовки запроса:
Content type | Использование application/json |
---|---|
x-ms-requestid | Уникальное строковое значение (предпочтительно GUID) для отслеживания запроса от клиента. Если это значение не указано, он создается и предоставляется в заголовках ответа. |
x-ms-correlationid | Уникальное строковое значение для операции на стороне клиента. Этот параметр позволяет сопоставить все события клиентской операции с событиями на стороне сервера. Если это значение не указано, он создается и предоставляется в заголовках ответа. |
авторизации | Уникальный маркер доступа, определяющий независимого поставщика программного обеспечения, совершающего вызов API. Формат заключается в Bearer <access_token> том, что значение маркера извлекается издателем.— Приложение Kubernetes в стратегиях проверки подлинности |
Отклики
Примеры полезных данных ответа:
Принятый
[
{
"usageDate": "2020-11-30T00:00:00Z",
"usageResourceId": "11111111-2222-3333-4444-555555555555",
"dimension": "tokens",
"planId": "silver",
"planName": "Silver",
"offerId": "mycooloffer",
"offerName": "My Cool Offer",
"offerType": "SaaS",
"azureSubscriptionId": "12345678-9012-3456-7890-123456789012",
"reconStatus": "Accepted",
"submittedQuantity": 17.0,
"processedQuantity": 17.0,
"submittedCount": 17
}
]
Отправлено
[
{
"usageDate": "2020-11-30T00:00:00Z",
"usageResourceId": "11111111-2222-3333-4444-555555555555",
"dimension": "tokens",
"planId": "silver",
"planName": "",
"offerId": "mycooloffer",
"offerName": "",
"offerType": "SaaS",
"azureSubscriptionId": "12345678-9012-3456-7890-123456789012",
"reconStatus": "Submitted",
"submittedQuantity": 17.0,
"processedQuantity": 0.0,
"submittedCount": 17
}
]
Несовпадение
[
{
"usageDate": "2020-11-30T00:00:00Z",
"usageResourceId": "11111111-2222-3333-4444-555555555555",
"dimension": "tokens",
"planId": "silver",
"planName": "Silver",
"offerId": "mycooloffer",
"offerName": "My Cool Offer",
"offerType": "SaaS",
"azureSubscriptionId": "12345678-9012-3456-7890-123456789012",
"reconStatus": "Mismatch",
"submittedQuantity": 17.0,
"processedQuantity": 16.0,
"submittedCount": 17
}
]
Аннулировано
[
{
"usageDate": "2020-11-30T00:00:00Z",
"usageResourceId": "11111111-2222-3333-4444-555555555555",
"dimension": "tokens",
"planId": "silver",
"planName": "",
"offerId": "mycooloffer",
"offerName": "",
"offerType": "SaaS",
"azureSubscriptionId": "12345678-9012-3456-7890-123456789012",
"reconStatus": "Rejected",
"submittedQuantity": 17.0,
"processedQuantity": 0.0,
"submittedCount": 17
}
]
Коды состояния
Код 403: запрещено. Маркер авторизации не указан, является недопустимым или срок его действия истек.
Рекомендации по разработке и тестированию
Чтобы протестировать выбросы пользовательского счетчика, реализуйте интеграцию с API измерения, создайте план для опубликованного предложения Kubernetes Apps с пользовательскими измерениями, определенными в нем с нулевой ценой за единицу. Опубликуйте это предложение в предварительной версии, чтобы только некоторые пользователи могли получить доступ к интеграции и проверить ее.
Вы также можете использовать частный план для существующего действующего предложения, чтобы ограничить доступ к этому плану во время тестирования для ограниченной аудитории.
Связанный контент
- Дополнительные сведения об API-интерфейсах служб измерения см. в статьях API службы измерения Marketplace.
Поддержка
При наличии одной из следующих проблем можно открыть запрос в службу поддержки.
- Технические проблемы с API службы контроля Marketplace.
- Проблема, которая должна быть эскалация из-за ошибки или ошибки на стороне (например, неправильное событие использования).
- Другие проблемы, связанные с лимитным выставлением счетов по тарифу.
Чтобы ознакомиться с вариантами поддержки издателя и открыть запрос в службу поддержки Майкрософт, следуйте инструкциям на странице Поддержка программы коммерческой платформы в Центре партнеров.