API ценообразования для Commerce
В этой статье описываются различные API ценообразования, предоставляемые механизма ценообразования Microsoft Dynamics 365 Commerce.
Механизм ценообразования Dynamics 365 Commerce предоставляет следующие API серверной службы Retail Server, которые могут использоваться внешними приложениями для обеспечения поддержки различных сценариев ценообразования:
- GetActivePrices — этот API получает рассчитанную цену продукта, включая простые скидки.
- CalculateSalesDocument — этот API вычисляет цены и скидки на продукты с заданными количествами, если они куплены вместе.
- GetAvailablePromotions — этот API получает применимые скидки на продукты в корзине.
- AddCoupons – этот API добавляет купоны в корзину.
- RemoveCoupons – этот API удаляет купоны из корзины.
Дополнительные сведения об использовании интерфейсов API серверной службы Retail Server во внешних приложениях см. в разделе Использование интерфейсов API Retail Server во внешних приложениях.
API-интерфейс GetActivePrices был представлен в версии Commerce 10.0.4. Этот API получает расчетную цену продукта, включая простые скидки. Он не вычисляет многострочные скидки, и предполагается, что каждый продукт в запросе API имеет количество 1. Этот API также может принимать список продуктов в качестве входных данных и запрашивать цены отдельных продуктов в пакетном режиме.
API-интерфейс GetActivePrices поддерживает роли Сотрудник, Клиент, Анонимный и Приложение в Commerce.
Основным вариантом использования API-интерфейса GetActivePrices является страница со сведениями о продукте (PDP), на которой розничные продавцы показывают лучшую цену на продукт, включая действующие скидки.
Примечание
Если вы видите меньше продуктов, возвращаемых для вызова GetActivePrices
, можно использовать Средство проверки конфигурации сбыта канала для проверки ваших конфигураций сбыта.
В следующей таблице показаны входные параметры для API-интерфейса GetActivePrices.
ФИО | Вложенное имя | Тип | Обязательно/Необязательно | Описание |
---|---|---|---|---|
projectDomain | ProjectionDomain | Обязательное поле | ||
ChannelId | длинный | Обязательное поле | ||
CatalogId | длинный | Обязательное поле | ||
productIds | IEnumerable<long> | Обязательное поле | Список продуктов, для которых требуется рассчитать цены. | |
activeDate | DateTimeOffset | Обязательное поле | Дата, в которую рассчитываются цены. | |
customerId | строка | Необязательно | Номер счета клиента. | |
affiliationLoyaltyTiers | IEnumerable<AffiliationLoyaltyTier> | Необязательный | Уровни назначения и лояльности. | |
AffiliationId | длинный | Обязательное поле | Код назначения. | |
LoyaltyTierId | длинный | Необязательно | Код уровня лояльности. | |
includeSimpleDiscountsInContextualPrice | логический | Необязательно | Установите для этого параметра значение true, чтобы добавить простые скидки в расчет ценообразования. Значение по умолчанию равно false. | |
includeVariantPriceRange | логический | Необязательно | Установите для этого параметра значение true, чтобы получить минимальные и максимальные цены из всех вариантов для основного продукта. Значение по умолчанию равно false. | |
includeAttainablePricesAndDiscounts | логический | Необязательно | Установите для этого параметра значение true, чтобы получить достижимые цены и скидки. Значение по умолчанию равно false. |
Образец тела запроса
{
"projectDomain":
{
"ChannelId": 5637144592,
"CatalogId": 0
},
"productIds":
[
68719489871
],
"activeDate": "2022-06-20T14:40:05.873+08:00",
"includeSimpleDiscountsInContextualPrice": true,
"includeVariantPriceRange": false
}
Тело образцов ответ
{
"value":
[
{
"ProductId": 68719489871,
"ListingId": 68719489871,
"BasePrice": 0,
"TradeAgreementPrice": 0,
"AdjustedPrice": 0,
"MaxVariantPrice": 0,
"MinVariantPrice": 0,
"CustomerContextualPrice": 0,
"DiscountAmount": 0,
"CurrencyCode": "USD",
"ItemId": "82000",
"InventoryDimensionId": null,
"UnitOfMeasure": "ea",
"ValidFrom": "2022-06-20T01:40:05.873-05:00",
"ProductLookupId": 0,
"ChannelId": 5637144592,
"CatalogId": 0,
"SalesAgreementPrice": 0,
"PriceSourceTypeValue": 1,
"DiscountLines": [],
"AttainablePriceLines": [],
}
]
}
Класс PriceLookupContext был представлен в версии Commerce 10.0.37. Этот класс содержит все критерии поиска для API-интерфейса GetActivePrices и заменяет предыдущие параметры productIds, activeDate, customerId и affiliationLoyaltyTiers. У класса также есть дополнительные свойства, которые разработчики могут использовать для фильтрации скидок во время поиска скидок.
В соответствии с потребностями организации, API-интерфейс GetActivePrices может принимать или предыдущие параметры, или новые параметры, связанные с классом PriceLookupContext.
Входные параметры
ФИО | Вложенное имя | Тип | Обязательно/Необязательно | Описание |
---|---|---|---|---|
projectDomain | ProjectionDomain | Обязательно | ||
ChannelId | длинный | Обязательно | ||
CatalogId | длинный | Обязательно | ||
priceLookupContext | PriceLookupContext | Обязательно | ||
HeaderContext | PriceLookupHeaderContext | Обязательно | Содержит CustomerAccountNumber, AffiliationLoyaltyTierLines и SalesOrderProperties | |
LineContexts | IEnumerable<PriceLookupLineContext> | Обязательно | Содержит ProductRecordId, UnitOfMeasureSymbol, InventorySiteId, InventoryLocationId, DeliveryMode, CatalogId и SalesLineProperties. | |
includeSimpleDiscountsInContextualPrice | логический | Необязательное | Установите для этого параметра значение true, чтобы добавить простые скидки в расчет ценообразования. Значение по умолчанию равно false. | |
includeVariantPriceRange | логический | Необязательно | Установите для этого параметра значение true, чтобы получить минимальные и максимальные цены из всех вариантов для основного продукта. Значение по умолчанию равно false. | |
includeAttainablePricesAndDiscounts | логический | Необязательно | Установите для этого параметра значение true, чтобы получить достижимые цены и скидки. Значение по умолчанию равно false. |
Дополнительные сведения см. в разделе PriceLookupContext.
API-интерфейс CalculateSalesDocument был представлен в версии Commerce 10.0.25. Этот API вычисляет цены и скидки для продуктов в заданных количествах, если они куплены вместе в заказе. При расчете ценообразования в API-интерфейсе CalculateSalesDocument учитываются однострочные скидки и скидки по нескольким строкам.
Основным вариантом использования API-интерфейса CalculateSalesDocument является расчет ценообразования в сценариях, когда контекст полной корзины не сохраняется (например, для предложений по продажам). Сценарии в POS и в электронной коммерции Commerce могут также использовать преимущества этого случая использования. Более низкая общая цена, когда номенклатуры корзины рассчитываются как набор (например, для дискретных наборов, связанных или рекомендуемых продуктов или продуктов, которые уже добавлены в корзину), может склонить клиентов к добавлению продуктов в корзину.
Модель данных для запроса и ответа API-интерфейса CalculateSalesDocument — Корзина. Однако в контексте этого API модель данных называется SalesDocument. Так как большинство свойств являются необязательными, и только некоторые из них влияют на расчет ценообразования, в следующей таблице показаны только поля, связанные с ценообразованием. Не рекомендуется добавлять в запрос API какие-либо другие поля.
Область API-интерфейса CalculateSalesDocument представляет собой просто расчет цен и скидок. Налоги и расходы не учитываются.
В следующей таблице показаны входные параметры внутри объекта с именем salesDocument.
ФИО | Вложенное имя | Тип | Обязательно/Необязательно | Описание |
---|---|---|---|---|
Код | строка | Обязательно | Код документа продажи. | |
CartLines | IList<CartLine> | Необязательный | Список строк, для которых требуется рассчитать цены и скидки. | |
ИД продукта | длинный | Необходимо указать в области CartLine | Код записи продукта. | |
ItemId | строка | Необязательно | Идентификатор номенклатуры. Если указано значение, оно должно соответствовать значению параметра ProductId. | |
InventoryDimensionId | строка | Необязательно | Код складской аналитики. Если указано значение, сочетание значений ItemId и InventoryDimensionId должно соответствовать значению параметра ProductId. | |
Количество | десятичное | Необходимо указать в области CartLine | Количество продукта. | |
UnitOfMeasureSymbol | строка | Необязательно | Единица измерения продукта. По умолчанию, если значение не указано, в API используется единица измерения продажи продукта. | |
CustomerId | строка | Необязательно | Номер счета клиента. | |
LoyaltyCardId | строка | Необязательно | Код карточки лояльности. Любой счет клиента, связанный со карточкой лояльности, должен соответствовать значению параметра CustomerId (если указано). Карточка лояльности не учитывается, если она не найдена или ее статус Заблокировано. | |
AffiliationLines | IList<AffiliationLoyaltyTier> | Необязательный | Строки уровня лояльности назначения. Если заданы значения CustomerId и/или LoyaltyCardId, соответствующие строки уровня лояльности назначения объединяются со строками, указанными в значении AffiliationLines. | |
AffiliationId | длинный | Необходимо указать в области AffiliationLoyaltyTier | Код записи назначения. | |
LoyaltyTierId | длинный | Необходимо указать в области AffiliationLoyaltyTier | Код записи уровня лояльности. | |
AffiliationTypeValue | int | Необходимо указать в области AffiliationLoyaltyTier | Значение, указывающее тип строки назначения Общий (0) или Лояльность (1). Если параметр имеет значение 0, API принимает в качестве идентификатора значение AffiliationId и игнорирует значение LoyaltyTierId. Если параметр имеет значение 1, API принимает в качестве идентификатора значение LoyaltyTierId и игнорирует значение AffiliationId. | |
ReasonCodeLines | Collection<ReasonCodeLine> | Необходимо указать в области AffiliationLoyaltyTier | Строки кода причины. Этот параметр не влияет на расчет ценообразования, но является обязательным как часть объекта AffiliationLoyaltyTier. | |
CustomerId | строка | Необходимо указать в области AffiliationLoyaltyTier | Номер счета клиента. | |
Купоны | IList<Coupon> | Необязательный | Купоны, которые не применимы (неактивные, просроченные или не найденные), не учитываются в расчете ценообразования. | |
Код | строка | Необходимо указать в области Coupon | Код купона. | |
CodeId | строка | Необязательно | Идентификатор кода купона. Если указано значение, оно должно соответствовать значению параметра Code. | |
DiscountOfferId | строка | Необязательно | Код скидки. Если указано значение, оно должно соответствовать значению параметра Code. |
Образец тела запроса
{
"salesDocument":
{
"Id": "CalculateSalesDocument",
"CartLines":
[
{
"ProductId": 68719491408,
"ItemId": "91003",
"InventoryDimensionId": "",
"Quantity": 1,
"UnitOfMeasureSymbol": "ea"
},
{
"ProductId": 68719493014,
"Quantity": 2,
"UnitOfMeasureSymbol": "ea"
}
],
"CustomerId": "3003",
"AffiliationLines":
[
{
"AffiliationId": 68719476742,
"LoyaltyTierId": 0,
"AffiliationTypeValue": 0,
"ReasonCodeLines": [],
"CustomerId": null
}
],
"LoyaltyCardId": "55103",
"Coupons":
[
{
"CodeId": "CODE-0005",
"Code": "CPN0004",
"DiscountOfferId": "ST100077"
}
]
}
}
Весь объект корзины возвращается в качестве текста ответа. Для проверки цен и скидок следует сосредоточиться на полях в следующей таблице.
ФИО | Вложенное имя | Тип | Описание |
---|---|---|---|
NetPrice | десятичное | Чистая цена всего документа продажи до применения каких-либо скидок. | |
DiscountAmount | десятичное | Общая сумма скидки всего документа продажи. | |
TotalAmount | десятичное | Общая сумма всего документа продажи. | |
CartLines | IList<CartLine> | Рассчитанные строки, содержащие сведения о ценах и скидках. | |
Цена | десятичное | Цена за единицу продукта. | |
NetPrice | десятичное | Чистая цена строки до применения каких-либо скидок (= Цена × Количество). | |
DiscountAmount | десятичное | Сумма скидки. | |
TotalAmount | десятичное | Окончательный итоговый результат ценообразования для строки. | |
PriceLines | IList<PriceLine> | Сведения о цене, включая источник цены (базовая цена, корректировка цены или коммерческое соглашение) и сумму. | |
DiscountLines | IList<DiscountLine> | Сведения о скидке. |
Существуют два схожих API-интерфейса GetAvailablePromotions:
- Корзины/GetAvailablePromotions принимает в качестве параметра список кодов строк корзины.
- GetAvailablePromotions принимает в качестве параметра объект DiscountsRiteria .
При наличии корзины, имеющей несколько строк, API-интерфейс Carts/GetAvailablePromotions возвращает все применимые скидки для строк корзины.
Основным вариантом использования API-интерфейса Carts/GetAvailablePromotions является страница «Корзина», на которой розничные продавцы демонстрируют примененные скидки или доступные купоны для текущей корзины.
В следующей таблице перечислены входные параметры для API-интерфейса Carts/GetAvailablePromotions.
Название | Тип | Обязательно/Необязательно | Наименование |
---|---|---|---|
ключ | строка | Обязательное поле | Код корзины. |
cartLineIds | IEnumerable<string> | Необязательный | Настройте это параметр на возврат скидок только для выбранных строк корзины. |
Тело образцов ответ
{
"value":
[
{
"LineId": "f495ffa507bc4f63a47a409cd8713dd7",
"Promotion": {
"OfferId": "ST100012",
"OfferName": "Loyalty 5% off over $100",
"PeriodicDiscountTypeValue": 4,
"IsDiscountCodeRequired": false,
"ValidationPeriodId": null,
"AdditionalRestrictions": null,
"Description": "All loyalty members get 5% with transaction total above $10 unless some exclusive or best price discounts are already applied on the transaction",
"ValidFromDate": "2022-06-20T06:52:56.2460219Z",
"ValidToDate": "2022-06-20T06:52:56.2460224Z",
"CouponCodes": [],
"ValidationPeriod": null
}
}
]
}
API-интерфейс GetAvailablePromotions возвращает все применимые скидки для определенного канала.
Основным вариантом использования API-интерфейса GetAvailablePromotions является страница «Все скидки», на которой розничные продавцы показывают все скидки для текущего канала.
В следующей таблице перечислены входные параметры для API-интерфейса GetAvailablePromotions.
ФИО | Вложенное имя | Тип | Обязательно/Необязательно | Описание |
---|---|---|---|---|
searchCriteria | DiscountsSearchCriteria | Обязательно | ||
ChannelId | длинный | Обязательно | ||
Ключевое слово | строка | Необязательно | ||
IsDiscountCodeRequired | логический | Необязательно | Указывает, является ли код купона обязательным или нет. Если передано значение null, извлекаются все скидки, независимо от требований кода купона. | |
StartDate | DateTimeOffset | Обязательно | Дата начала (включительно). | |
EndDate | DateTimeOffset | Обязательно | Конечная дата (включительно). |
Образец тела запроса
{
"searchCriteria": {
"ChannelId": 5637144592,
"StartDate": "1900-01-01T00:00:00Z",
"EndDate": "2154-12-31T00:00:00Z"
}
}
Тело образцов ответ
{
"@odata.context": "https://usnconeboxax1ret.cloud.onebox.dynamics.com/Commerce/$metadata#Collection(Microsoft.Dynamics.Commerce.Runtime.DataModel.Promotion)",
"value": [
{
"OfferId": "ST100024",
"OfferName": "Weekly ad",
"PeriodicDiscountTypeValue": 2,
"IsDiscountCodeRequired": true,
"ValidationPeriodId": "",
"AdditionalRestrictions": "",
"Description": "",
"ValidFromDate": "1900-01-01T00:00:00Z",
"ValidToDate": "2154-12-31T00:00:00Z",
"CouponCodes": [],
"ExtensionProperties": [
{
"Key": "DATAAREAID",
"Value": {
"StringValue": "usrt"
}
},
{
"Key": "DATEVALIDATIONTYPE",
"Value": {
"IntegerValue": 1
}
}
]
},
{
"OfferId": "ST100019",
"OfferName": "Take 20 off anything",
"PeriodicDiscountTypeValue": 2,
"IsDiscountCodeRequired": true,
"ValidationPeriodId": "",
"AdditionalRestrictions": "",
"Description": "",
"ValidFromDate": "1900-01-01T00:00:00Z",
"ValidToDate": "2154-12-31T00:00:00Z",
"CouponCodes": [],
"ExtensionProperties": [
{
"Key": "DATAAREAID",
"Value": {
"StringValue": "usrt"
}
},
{
"Key": "DATEVALIDATIONTYPE",
"Value": {
"IntegerValue": 1
}
}
]
},
{
"OfferId": "ST100015",
"OfferName": "Watches",
"PeriodicDiscountTypeValue": 2,
"IsDiscountCodeRequired": false,
"ValidationPeriodId": "",
"AdditionalRestrictions": "",
"Description": "",
"ValidFromDate": "1900-01-01T00:00:00Z",
"ValidToDate": "2154-12-31T00:00:00Z",
"CouponCodes": [],
"ExtensionProperties": [
{
"Key": "DATAAREAID",
"Value": {
"StringValue": "usrt"
}
},
{
"Key": "DATEVALIDATIONTYPE",
"Value": {
"IntegerValue": 1
}
}
]
},
{
"OfferId": "ST100012",
"OfferName": "Loyalty 5% off over $100",
"PeriodicDiscountTypeValue": 4,
"IsDiscountCodeRequired": false,
"ValidationPeriodId": "",
"AdditionalRestrictions": "",
"Description": "All loyalty members get 5% with transaction total above $10 unless some exclusive or best price discounts are already applied on the transaction",
"ValidFromDate": "1900-01-01T00:00:00Z",
"ValidToDate": "2154-12-31T00:00:00Z",
"CouponCodes": [],
"ExtensionProperties": [
{
"Key": "DATAAREAID",
"Value": {
"StringValue": "usrt"
}
},
{
"Key": "DATEVALIDATIONTYPE",
"Value": {
"IntegerValue": 1
}
}
]
},
{
"OfferId": "ST100011",
"OfferName": "Loyalty 50% off sunglasses",
"PeriodicDiscountTypeValue": 1,
"IsDiscountCodeRequired": false,
"ValidationPeriodId": "",
"AdditionalRestrictions": "",
"Description": "Gold tier Loyalty customers get 50% on Sunglasses when purchased with a Top, Scarf or Men's Casual shirts",
"ValidFromDate": "1900-01-01T00:00:00Z",
"ValidToDate": "2154-12-31T00:00:00Z",
"CouponCodes": [],
"ExtensionProperties": [
{
"Key": "DATAAREAID",
"Value": {
"StringValue": "usrt"
}
},
{
"Key": "DATEVALIDATIONTYPE",
"Value": {
"IntegerValue": 1
}
}
]
},
{
"OfferId": "ST100009",
"OfferName": "Student discount",
"PeriodicDiscountTypeValue": 2,
"IsDiscountCodeRequired": false,
"ValidationPeriodId": "",
"AdditionalRestrictions": "",
"Description": "Students get 10% off for on Jeans and Backpacks",
"ValidFromDate": "1900-01-01T00:00:00Z",
"ValidToDate": "2154-12-31T00:00:00Z",
"CouponCodes": [],
"ExtensionProperties": [
{
"Key": "DATAAREAID",
"Value": {
"StringValue": "usrt"
}
},
{
"Key": "DATEVALIDATIONTYPE",
"Value": {
"IntegerValue": 1
}
}
]
},
{
"OfferId": "ST100004",
"OfferName": "Soccer sale",
"PeriodicDiscountTypeValue": 3,
"IsDiscountCodeRequired": false,
"ValidationPeriodId": "",
"AdditionalRestrictions": "",
"Description": "Providing you great discounts ranging from 10% to 20% on all branded Soccer balls. We carry a full line of soccer balls. Buy one for yourself or gift it to someone. We promise you that you won't be disappointed. If you don't see something that you are looking for please call us. This offer is only valid at our Retail Malls.",
"ValidFromDate": "1900-01-01T00:00:00Z",
"ValidToDate": "2154-12-31T00:00:00Z",
"CouponCodes": [],
"ExtensionProperties": [
{
"Key": "DATAAREAID",
"Value": {
"StringValue": "usrt"
}
},
{
"Key": "DATEVALIDATIONTYPE",
"Value": {
"IntegerValue": 1
}
}
]
},
{
"OfferId": "ST100003",
"OfferName": "BMX helmet sale",
"PeriodicDiscountTypeValue": 0,
"IsDiscountCodeRequired": false,
"ValidationPeriodId": "",
"AdditionalRestrictions": "",
"Description": "Get 20% off on all branded youth BMX helmets when you buy two or more. Choose from our great selection of BMX bike helmets from top brands, including ProTec, Giro, Bell and SixSixOne BMX helmets. This offer is only available at our Retail Mall stores",
"ValidFromDate": "1900-01-01T00:00:00Z",
"ValidToDate": "2154-12-31T00:00:00Z",
"CouponCodes": [],
"ExtensionProperties": [
{
"Key": "DATAAREAID",
"Value": {
"StringValue": "usrt"
}
},
{
"Key": "DATEVALIDATIONTYPE",
"Value": {
"IntegerValue": 1
}
}
]
}
]
}
API-интерфейс AddCoupons поддерживает добавление списка купонов в корзину. Он возвращает объект корзины после добавления купонов.
В следующей таблице показаны входные параметры для API-интерфейса AddCoupons.
Имя | Тип | Требуется/Необязательно | Наименование |
---|---|---|---|
ключ | строка | Обязательное поле | Код корзины. |
couponCodes | IEnumerable<string> | Обязательное поле | Коды купонов для добавления в корзину. |
isLegacyDiscountCode | логический | Необязательно | Установите для этого параметра значение true, чтобы указать, что купон является устаревшим кодом скидки. Значение по умолчанию равно false. |
Api-интерфейс RemoveCoupons поддерживает удаление списка купонов из корзины. Он возвращает объект корзины после удаления купонов.
В следующей таблице показаны входные параметры для API-интерфейса RemoveCoupons.
Имя | Тип | Требуется/Необязательно | Наименование |
---|---|---|---|
ключ | строка | Обязательное поле | Код корзины. |
couponCodes | IEnumerable<string> | Обязательно | Коды купонов для удаления из корзины. |
API-интерфейс GetProductPromotions был представлен в версии Commerce 10.0.38. Этот API получает список рекламных продуктов с данными скидками на продукты, а также может принимать список кодов скидок продукта и контекст ценообразования в качестве входных данных и запрашивать связанные рекламные продукты. Основным вариантом использования API-интерфейса GetProductPromotions являются страницы списков продуктов, где розничные торговцы демонстрируют продукты со скидками. Этот API-интерфейс поддерживает как модель цены на основе свойств, так и устаревшую модель ценообразования.
В следующей таблице показаны входные параметры для API-интерфейса GetProductPromotions.
ФИО | Вложенное имя | Тип | Обязательно/Необязательно | Описание |
---|---|---|---|---|
productDiscountIds | IEnumerable<string> | Обязательно | Список кодов скидок для поиска рекламных продуктов. | |
priceLookupContext | PriceLookupContext | Обязательно | Контекст ценообразования. | |
activeDate | DateTimeOffset | Необязательное | Дата, когда учитывается рекламная акция. |
Ограничения и лимиты:
- Может принимать в качестве вводных данных не более пяти кодов скидки на продукты.
- Поддерживаются только простые скидки.
Образец тела запроса
{
{
"productDiscountIds":
[
"ST100009",
"ST100024"
],
"priceLookupContext":
{
"HeaderContext":
{
"AffiliationLoyaltyTierLines":
[
{
"AffiliationId": 5637144577,
"LoyaltyTierId": 0,
"AffiliationTypeValue": 0,
"ReasonCodeLines": [],
"CustomerId": "2001"
}
]
},
"LineContexts": []
},
"activeDate": "2023-08-20T14:40:05.873+08:00",
},
}
Тело образцов ответ
{
"value":
[
{
"ProductId": 68719489871,
"ProductDiscounts":
[
{
"OfferId": "ST100009",
"OfferName": "Student discount",
"PeriodicDiscountTypeValue": 2,
"IsDiscountCodeRequired": false,
"ValidationPeriodId": null,
"AdditionalRestrictions": null,
"Description": "Students get 10% off on Jeans and Backpacks",
"ValidFromDate": "1900-01-01T00:00:00.0000000Z",
"ValidToDate": "2154-12-31T00:00:00.0000000Z",
"CouponCodes": [],
"DateValidationTypeValue": 1
},
{
"OfferId": "ST100024",
"OfferName": "Weekly ad",
"PeriodicDiscountTypeValue": 2,
"IsDiscountCodeRequired": false,
"ValidationPeriodId": null,
"AdditionalRestrictions": null,
"Description": "",
"ValidFromDate": "1900-01-01T00:00:00.0000000Z",
"ValidToDate": "2154-12-31T00:00:00.0000000Z",
"CouponCodes": [],
"DateValidationTypeValue": 1
}
]
},
{
"ProductId": 68719489872,
"ProductDiscounts":
[
{
"OfferId": "ST100009",
"OfferName": "Student discount",
"PeriodicDiscountTypeValue": 2,
"IsDiscountCodeRequired": false,
"ValidationPeriodId": null,
"AdditionalRestrictions": null,
"Description": "Students get 10% off on Jeans and Backpacks",
"ValidFromDate": "1900-01-01T00:00:00.0000000Z",
"ValidToDate": "2154-12-31T00:00:00.0000000Z",
"CouponCodes": [],
"DateValidationTypeValue": 1
}
]
}
]
}
Дополнительные сведения см. в разделе PriceLookupContext.
Класс PriceLookupContext используется для модели ценообразования на базе свойств в API-интерфейсах GetProductPromotions и GetActivePrices.
Структура класса PriceLookupContext показана на следующем примере.
{
HeaderContext: PriceLookupHeaderContext
{
CustomerAccountNumber: string
AffiliationLoyaltyTierLines: IEnumerable<AffiliationLoyaltyTier>
ChannelId: long?
SalesOrderProperties: IEnumerable<AttributeValueBase>
},
LineContexts: IEnumerable<PriceLookupLineContext>
[
{
ProductRecordId: string
UnitOfMeasureSymbol: string
InventorySiteId: string
InventoryLocationId: string
DeliveryMode: string
CatalogId: string
SalesLineProperties: IEnumerable<AttributeValueBase>
},
]
}
Образец тела запроса
"PriceLookupContext":
{
"HeaderContext":
{
"CustomerAccount": 2001,
"AffiliationLoyaltyTierLines":
[
{
"AffiliationId": 5637144577,
"LoyaltyTierId": 0,
"AffiliationTypeValue": 0,
"ReasonCodeLines": [],
"CustomerId": "2001"
}
],
"SalesOrderProperties":
[
{
"@odata.type": "#Microsoft.Dynamics.Commerce.Runtime.DataModel.AttributeTextValue",
"Name": "CalcDate",
"TextValue": "2022-10-10"
}
]
},
"LineContexts": []
}
Примечание
- Группа клиентов не указана в параметре PriceLookupHeaderContext, потому что она должна быть определена по номеру счета клиента.
- Параметр ChannelId может быть указан в параметре PriceLookupHeaderContext. Если он не указан, используется ChannelId из контекста запроса (текущий канал при использовании Store Commerce).