Прочитать на английском

Поделиться через


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 во внешних приложениях.

GetActivePrices

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

Класс 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.

CalculateSalesDocument

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> Сведения о скидке.

GetAvailablePromotions

Существуют два схожих API-интерфейса GetAvailablePromotions:

  • Корзины/GetAvailablePromotions принимает в качестве параметра список кодов строк корзины.
  • GetAvailablePromotions принимает в качестве параметра объект DiscountsRiteria .

Carts/GetAvailablePromotions

При наличии корзины, имеющей несколько строк, 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
            }
        }
    ]
}

GetAvailablePromotions

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
                    }
                }
            ]
        }
    ]
}

AddCoupons

API-интерфейс AddCoupons поддерживает добавление списка купонов в корзину. Он возвращает объект корзины после добавления купонов.

В следующей таблице показаны входные параметры для API-интерфейса AddCoupons.

Имя Тип Требуется/Необязательно Наименование
ключ строка Обязательное поле Код корзины.
couponCodes IEnumerable<string> Обязательное поле Коды купонов для добавления в корзину.
isLegacyDiscountCode логический Необязательно Установите для этого параметра значение true, чтобы указать, что купон является устаревшим кодом скидки. Значение по умолчанию равно false.

RemoveCoupons

Api-интерфейс RemoveCoupons поддерживает удаление списка купонов из корзины. Он возвращает объект корзины после удаления купонов.

В следующей таблице показаны входные параметры для API-интерфейса RemoveCoupons.

Имя Тип Требуется/Необязательно Наименование
ключ строка Обязательное поле Код корзины.
couponCodes IEnumerable<string> Обязательно Коды купонов для удаления из корзины.

GetProductPromotions

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

Класс 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).