Протокол IGRP

Торговые блоки



8. Торговые блоки



Торговые блоки являются дочерними элементами IOTP-сообщения верхнего уровня, которое послано в форме [XML]-документа от одного партнера торговой операции к другому.

Каждый трговый блок состоит из одного или более торговых компонентов (смотри раздел 7). Это проиллюстрировано на диаграмме.




Блок TPO должен содержать:

  • компонент протокольных опций;
  • компонент Organisation с торговой ролью Продавца;
  • компонент Organisation с торговой ролью Покупателя;
  • опционно, компонент организации торговой ролью DeliverTo, если транзакция предполагает доставку;
  • компоненты списка видов платежа для каждого платежа транзакции;
  • компоненты Organisation для Кассира, включенного в транзакцию;


  • опционно, компоненты Organisation для Агента доставки (если имеется) транзакции;
  • дополнительные компоненты Organisation, которые Продавец захочет включить. Например.
- Агент обслуживания Покупателя;
  - источник сертификатов, который предлагает "коды доверия (Credentials)" Продавца или какую-то другую гарантию на товары или услуги.
8.2. Блок выбора TPO

Блок выбора TPO содержит результаты выбора, сделанного из списка, содержащегося в блоке протокольных опций (смотри раздел 8.1). Определение блока выбора TPO предлагается ниже.

<!ELEMENT TpoSelectionBlk (BrandSelection+) >
<!ATTLIST TpoSelectionBlk ID ID #REQUIRED>

Атрибуты:

ID Идентификатор, который однозначно определяет блок выбора TPO транзакции IOTP.
Cодержимое:

BrandSelection Идентифицирует выбор вида платежаи платежного протокола, которы следует использовать при оплате в транзакции IOTP. Имеется один компонент выбора вида платежа (смотри раздел 7.8) для каждого предстоящего платежа транзакции IOTP.
Блок выбора TPO должен содержать по одному компоненту выбора вида платежа для каждого списка видов платежа блока TPO.

8.3. Блок отклика Offer

Блок отклика Offer содержит подробности о товарах, услугах, сумме, инструкций доставки или финансовых операциях, которые должны быть осуществлоены. Его определение дано ниже.

<!ELEMENT OfferRespBlk (Status, Order?, Payment*, Delivery?, TradingRoleData*)>
<!ATTLIST OfferRespBlk ID ID #REQUIRED>

Атрибуты:

ID Идентификатор, который однозначно определяет блок отклика Offer транзакции.
Cодержимое:

Status Содержит статусную информацию об успехе или неудаче подготовки предложения (смотри раздел 4.2). Заметим, что в блоке отклика Offer, значения ProcessState NotYetStarted или InProgress являются нелегальными.
Order Компонент Order содержит подробности о товарах, услугах или финансовой операции, которая имеет место, смотри раздел 7.5.



Компонент Order должен присутствовать, если только атрибут ProcessState компонента Status не равен Failed.

Payment Компоненты Payment содержат информацию о платежах, которые надлежит произвести, смотри раздел 7.9.
Delivery Компонент Delivery содержит детали предстоящей доставки (смотри раздел 7.13).
TradingRoleData Компонент информации о торговой роли содержит данными должны обменяться торговые роли, вовлеченные в транзакцию (смотри раздел 7.17).
Блок отклика Offer должен содержать:

  • компонент Order транзакции;
  • компоненты Payment для каждой проплаты транзакции;
  • компонент Delivery транзакции (если предусмотрено).
8.4. Блок запроса аутентификации

Блок запроса аутентификации содержит данные, которые используются одной из торговых ролей для получения информации и опционно для аутентификации другой торговой роли. Этот блок содержит:

  • информацию о том, как аутентифицировать себя и/или
  • запрос о дополнительной информации об организации, которую надлежит аутентифицировать.
Его определение предагается ниже.

<!ELEMENT AuthReqBlk (AuthReq*, TradingRoleInfoReq?)>
<!ATTLIST AuthReqBlk ID ID #REQUIRED >

Атрибуты:

ID Идентификатор, который однозначно определяет блок запроса аутентификации транзакции.
Cодержимое:

AuthReq Каждый компонент запроса аутентификации (смотри раздел 7.2) описывет альтернативный путь, с помощью которого получатель запроса аутентификации может себя аутентифицировать, генерируя компонент отклика аутентификации (смотри раздел 7.3).
Если присутствует один компонент запроса аутентификации, тогда именно он и должен использоваться. Если присутствует несколько компонентов запроса аутентификации, тогда получатель должен выбрать один компонент, основываясь на своих предпочтениях и возможностях программного обеспечения.

Если нет ни одного компонента запроса аутентификации, это означает, что блок аутентификационного запроса запрашивает присылку компонентов Organisation, как это специфицировано в компоненте информационного запроса торговой роли.



TradingRoleInfoReq Компонент информационного запроса торговой роли (смотри раздел 7.4) содержит список торговых ролей, данные о которых запрашиваются.
В аутентификационном блоке должен быть по крайней мере один компонент (аутентификационного запроса или информационного запроса торговой роли), в противном случае имеет место ошибка.

8.5. Блок отклика аутентификации

Блок отклика аутентификации содержит отклик, который является результатом обработки блока запроса аутентификации. Его определение представлено ниже.

<!ELEMENT AuthRespBlk (AuthResp?, Org*) >
<!ATTLIST AuthRespBlk ID ID #REQUIRED >

Атрибуты:

ID Идентификатор, который однозначно определяет блок отклика аутентификации транзакции.
Cодержимое:

AuthResp Опционный компонент аутентификационного отклика, который содержит результаты обработки компонента запроса аутентификации – смотри раздел 7.3.
Org Опционные компоненты Organisation, которые содержат информацию, соответствующую торговым ролям, как это запрошено атрибутом TradingRoleList компонента информационного запроса торговой роли.
Компоненты, присутствующие в блоке отклика аутентификации должны согласовываться с требованиями соответствующего блока аутентификационного запроса, в противном случае имеет место ошибка.

8.6. Блок состояния аутентификации

Блок состояния аутентификации индицирует успех или неудачу верификации блока отклика аутентификации аутентификатором. Его определение представлено ниже.

<!ELEMENT AuthStatusBlk (Status) >
<!ATTLIST AuthStatusBlk ID ID #REQUIRED >

Атрибуты:

ID Идентификатор, который однозначно определяет блок состояния аутентификации транзакции.
Cодержимое:

Status Содержит статусную информацию об успехе или неудаче аутентификации (смотри раздел 4.2).
8.7. Блок платежного запроса

Блок платежного запроса содержит информацию, которая запускает процедуру платежа. Его описание представлено ниже.

<!ELEMENT PayReqBlk (Status+, BrandList, BrandSelection,
Payment, PaySchemeData?, Org*, TradingRoleData*)>


Атрибуты:

ID Идентификатор, который однозначно определяет блок платежного запроса транзакции.
Cодержимое:

Status Содержит компоненты Status (смотри раздел 7.13) откликов на шаги (напр., отклика Offer и/или Payment), от которых данный шаг зависит. Он используется чтобы индицировать успех или неудачу этих шагов. Платеж может состояться лишь тогда, когда все предыдущие шаги были успешными.
BrandList Компонент списка видов платежа содержит список из одного или более видов платежа и протоколов, которые могут быть выбраны (смотри раздел 7.7).
BrandSelection Идентифицирует выбор вида платежа, платежного протокола и Кассира, которые должны быть использованы при оплате в данной транзакции. Имеется один компонент выбора вида платежа (смотри раздел 7.8) для каждой проплаты, которую следует выполнить в процессе транзакции.
Payment Компоненты Payment содержит информацию о платеже, который выполняется, смотри раздел 7.9.
PaySchemeData Компонент Payment Scheme содержит специфические данные о платежной схеме, смотри раздел 7.10.
Org Компонент Organisation содержит подробности об организациях, вовлеченных в платеж (смотри раздел 7.6). Присутствие организаций зависит от транзакции и данных, которые должны быть подписаны. Смотри раздел 6.
TradingRoleData Компонент данных о торговой роли содержит информацию, которая нужна для пересылки между торговыми ролями, вовлеченными в транзакцию (смотри раздел 7.17).
Блок платежного запроса должен содержать:

  • Компонент Organisation с торговой ролью продавца;
  • Компонент Organisation с торговой ролью Покупателя;
  • Компонент Payment для платежа;
  • Компонент Brand List;
  • Компонент выбора вида платежа из списка;
  • Компонент Organisation для Кассира, осуществляющего платеж;
  • Компонент Organisation (если такоая имеется) для организации, которая выполнила предыдущий шаг, например другой Кассир;
  • Компонент Organisation для организации, которая выполняет следующий шаг. Это может быть, например, Агент доставки или Кассир;
  • Компонент Organisation для любых дополнительных организаций, которые Продавец включил в блок отклика Offer;
  • Опционный компонент данных платежной схемы, если это требуется методом платежа, определенном в приложении IOTP;
  • Любой компонент информации о платежной роли, который может потребоваться (смотри раздел 7.17.1).
8.8.


Блок платежного обмена

Блок платежного обмена содержит специфические данные о платежной схеме, которыми обмениваются две торговые роли в рамках сделки. Его определение представлено ниже.

<!ELEMENT PayExchBlk (PaySchemeData+)>
<!ATTLIST PayExchBlk ID ID #REQUIRED>

Атрибуты:

ID Идентификатор, который однозначно определяет блок платежного обмена транзакции.
Cодержимое:

PaySchemeData Этот торговый компонент содержит специфические данные о платежной схеме, смотри раздел 7.10.
8.9. Блок платежного отклика

Этот блок платежного отклика содержит информацию о состоянии платежа, опционной платежной расписке и опционные сообщения платежного протокола. Его определение представлено ниже.

<!ELEMENT PayRespBlk (Status, PayReceipt?, PaySchemeData?,
PaymentNote?, TradingRoleData*)>
<!ATTLIST PayRespBlk ID ID #REQUIRED>

Атрибуты:

ID Идентификатор, который однозначно определяет блок платежного отклика транзакции.
Cодержимое:

Status Содержит статусную информацию об успехе или неудаче (смотри раздел 4.2) платежа. Заметим, что в блоке платежного отклика, значения ProcessState NotYetStarted или InProgress являются нелегальными.
PayReceipt Содержит специфические данные о платежной схеме, которые могут быть использованы для верификации произведенного платежа. Смотри раздел 7.11. Он должен присутствовать, если атрибут ProcessState компонента Status равен CompletedOk. Атрибут PayReceipt является опционным.
PaySchemeData Содержит специфические данные о платежной схеме, например, о сообщениях платежного протокола. Смотри также раздел 7.10.
PaymentNote Содержит дополнительную, несвязанную с платежом информацию, которую кассир желает предоставить покупателю. Например, если выполнен отзыв сделки или осуществлен депозит, он может содержать данные о полученном балансе на счету, после того как данная операция завершена. Смотри раздел 7.12.
TradingRoleData Компонент информации о торговой роли содержит данные, которые нужны для обмена между ролями, участвующими в транзакции (смотри раздел 7.17).
8.10.


Блок запроса доставки

Блок запроса доставки содержит подробности о товарах или услугах, которые должны быть предоставлены вместе с подписью, которая позволяет удостовериться, что доставка была авторизована. Его определение приведено ниже.

<!ELEMENT DeliveryReqBlk (Status+, Order, Org*, Delivery,
ConsumerDeliveryData?, TradingRoleData*)>
<!ATTLIST DeliveryReqBlk ID ID #REQUIRED>

Атрибуты:

ID Идентификатор, который однозначно определяет блок запроса доставки транзакции.
Cодержимое:

Status Содержит компоненты Status (смотри раздел 7.13) откликов на шаги (напр., платежный отклик), от которых данный шаг зависит. Он используется чтобы индицировать успех или неудачу этих шагов. Доставку следует осуществлять только если все прдыдущие шаги завершились успешно.
Order Компонент Order содержит подробности о товарах, услугах или финансовых операциях, которые имеют место, смотри раздел 7.5. Комоненты Organisation (смотри раздел 7.6) идентифицируют организации их роли.
Org Транзакция IOTP. Роли и организации, которые должны присутствовать зависят от конкретного типа транзакции. Описания транзакций смотри в разделе 9.
Delivery Компонент Delivery содержит подробности доставки, которую следует осуществить (смотри раздел 7.13).
ConsumerDeliveryData Опционный. Содержит идентификатор, специфицированный Покупателем, который в случае возвращения Агентом доставки позволяет покупателю определить, о какой доставке идет речь.
TradingRoleData Компонент данных о торговой роли содержит информацию, которая нужна при обмене между двумя торговыми ролями в процессе транзакции (смотри раздел 7.17).
Блок запроса доставки содержит:

  • Компонент Organisation с торговой ролью Продавца;
  • Компонент Organisation для торговых ролей Покупателя и DeliverTo;
  • Компонент Delivery;
  • Компонент Organisation для Агента доставки. В частности компонент Organisation, идентифицированный атрибутом ActionOrgRef компонента Delivery;
  • Компонент Organisation (если имеется) для организации, которая осуществила предыдущий шаг, например Кассира;
  • Компоненты Organisation для любой дополнительной организации, которую Продавец включил в блок отклика Offer;
  • Любые компоненты данных о торговой роли, которая может потребоваться (смотри раздел 7.17.1).
8.11.


Блок отклика доставки

Блок отклика доставки содержит Delivery Note, содержащую подробности о том как будут доставляться товары. Его определение представлено ниже. Заметим, что в блоке отклика Delivery элемент состояния доставки с DeliveryStatusCode равным NotYetStarted или InProgress является нелегальным.

<!ELEMENT DeliveryRespBlk (Status, DeliveryNote)>
<!ATTLIST DeliveryRespBlk ID ID #REQUIRED>

Атрибуты:

ID Идентификатор, который однозначно определяет блок отклика доставки транзакции.
Cодержимое:

Status Содержит статусную информацию об успехе или неудаче (смотри раздел 4.2) доставки. Заметим, что в блоке отклика Delivery, ProcessState равный NotYetStarted или InProgress считается нелегальным.
DeliveryNote Компонент Delivery Note содержит подробности о том, как будут доставляться товары или услуги (смотри раздел 7.15).
8.12. Торговый блок информационного запроса

Торговый блок информационного запроса содержит компоненттип запроса и опционно платежной схемы.

<!ELEMENT InquiryReqBlk ( InquiryType, PaySchemeData? ) >
<!ATTLIST InquiryReqBlk ID ID #REQUIRED >

Атрибуты:

ID Идентификатор, который однозначно определяет торговый блок информационного запроса транзакции.
Cодержимое:

InquiryType Компонент тип информационного запроса (смотри раздел 7.18), который содержит код типа запроса.
PaySchemeData Компонент платежная схема (Payment Scheme) (смотри раздел 7.10), который содержит специфические данные конкретных информационных запросов о платежной схеме. Он присутствует, когда атрибут Type компонента типа запроса равен Payment.
8.13. Торговый блок информационного отклика

Торговый блок информационного отклика содержит компонент Status и опционно компонент Payment Scheme. Его целью является осуществление запроса о текущем состоянии транзакции или сервера.

<!ELEMENT InquiryRespBlk (Status, PaySchemeData?)>
<!ATTLIST InquiryRespBlk ID ID #REQUIRED
LastReceivedIotpMsgRef NMTOKEN #IMPLIED
LastSentIotpMsgRef NMTOKEN #IMPLIED >



Атрибуты:

ID Идентификатор, который однозначно определяет торговый блок информационного отклика транзакции.
LastReceivedIotpMsgRef Содержит ссылку элемента (смотри раздел 3.5) на Id-компонент (смотри раздел 3.3.2) последнего сообщения, которое получил данный сервер от покупателя. Если до этого не получено от покупателя ни одного сообщения, этот атрибут должен содержать значение (Null). Данный атрибут предназначен для отладочных целей.
LastSentIotpMsgRef Содержит ссылку элемента (смотри раздел 3.5) на Id-компонент (смотри раздел 3.3.2) последнего сообщения, которое послал данный сервер покупателю. Если до этого не послано ни одного сообщения покупателю, данный атрибут должен содержать значение (Null). Этот атрибут предназначен для отладочных целей.
Cодержимое:

Status Содержит статусную информацию об успехе или неудаче (смотри раздел 4.2) определенного торгового обмена (т.e., предложения, платежа или доставки).
PaySchemeData Компонент Payment Scheme (смотри раздел 7.10), который содержит специфические информационные запросы по поводу платежной схемы. Он присутствует, когда атрибут Type атрибута StatusType компонента Status равен Payment.
8.14. Блок запроса Ping

Блок запроса Ping используется, чтобы определить, работает ли сервер и является ли криптография совместимой.

Определение блока запроса Ping предложено ниже.

<!ELEMENT PingReqBlk (Org*)>
<!ATTLIST PingReqBlk ID ID #REQUIRED>

Атрибуты:

ID Идентификатор, который однозначно определяет запрос Ping торгового блока транзакции.
Cодержимое:

OrgОпционные компоненты Organisation (смотри раздел 7.6).

Если нет ни одного компонента Organisation, тогда запрос Ping является анонимным и служит для проверки, работает ли сейчас сервер.

Однако, если присутствуют компоненты Organisation, это указывает, что отправитель запроса Ping хочет проверить, могут ли быть обработаны цифровые подписи.

В этом случае отправитель включает:

  • Компонент Organisation, который идентифицирует сам себя, специфицируя торговую роль (или роли), которую он исполняет в транзакции (Продавец, Кассир, и т.д.)
  • Компонент Organisation, который идентифицирует получателя сообщения.
Эти компоненты используются для формирования подписи блока отклика Ping.



8.15. Блок отклика Ping

Блок отклика Ping предоставляет результат выполнения запроса Ping. Он содержит компонент Organisation, который идентифицирует отправителя отклика Ping.

Если запрос Ping, для которого этот блок является откликом, содержал компоненты Organisation, тогда он также содержит эти компоненты Organisation.

<!ELEMENT PingRespBlk (Org+)>
<!ATTLIST PingRespBlk ID ID #REQUIRED
PingStatusCode (Ok | Busy | Down) #REQUIRED
SigVerifyStatusCode (Ok | NotSupported | Fail) #IMPLIED
xml:lang NMTOKEN #IMPLIEDPingStatusDesc CDATA #IMPLIED>

Атрибуты:

ID Идентификатор, который однозначно определяет торговый блок запроса Ping транзакции.
PingStatusCode Содержит код, который показывает состояние программы отправителя, которая обрабатывает IOTP-сообщения. Допустимыми значениями являются:
o Ok. Сервис работает нормально, включая проверку подписей.
o Busy. Все идет хорошо, но возможны некоторые задержки.
o Down. Сервер не вполне функционален, но все же может выдать отклик Ping.
SigVerifyStatusCode Заключает в себе код, который показывает состояние проверки подписи. Он присутствует только когда сообщение, содержащее блок запроса Ping имеет также блок Signature. Допустимы следующие значения:
o Ok. Веоификация подписи прощла успешно.
o NotSupported. Получатель блока запроса Ping не поддерживает валидацию подписей.
o Fail. Верификация подписи не прошла.
Xml:lang Определяет язык, использованный в PingStatusDesc. Присутствует тогда, когда имеется PingStatusDesc.
PingStatusDesc Содержит короткое описание состояния сервера, который поылает этот блок отклика Ping. Сервер, если его разработчики хотят, может использовать этот атрибут для посылки более детальной информации, чем содержится в PingStatusCode, он может использоваться, например, для отладрчных целей.
Cодержимое:

Org Компоненты Organisation (смотри раздел 7.6).
Компоненты Organisation отправителя отклика Ping всегда содержат кроме того компоненты Organisation, посланные в запросе Ping.



Значения статусного кода Ping не включают в себя такие значения как Fail, так как, когда программа, получающая сообщение запроса Ping, не работает, не будет послано никакого отклика Ping.

8.16. Блок подписи

Блок Signature содержит один или более компонентов Signature и соответствующих сертификатов (если требуется), которые подтверждают данные в рамках данной транзакции. Определение компонента Signature и сертификатов содержится в статье "Digital Signatures for the Internet Open Trading Protocol", смотри [IOTPDSIG]. Описание их применения в IOTP можно найти в разделах 7.19 и 7.20.

Определение блока Signature представлено ниже:

<!ELEMENT IotpSignatures (Signature+, Certificate*) >
<!ATTLIST IotpSignatures ID ID #IMPLIED >

Атрибуты:

ID Идентификатор, который однозначно определяет блок подписи транзакции.
Cодержимое:

Signature Компонент Signature. Смотри раздел 7.19.
Certificate Компонент Certificate. Смотри раздел 7.20.
Содержимое блока Signature зависит от торгового блока, который содержится в том же сообщении, что и блок Signature.

8.16.1. Блок подписи в отклике предложении

Блок подписи, который содержится в том же сообщении, что и блок отклика Offer, несет в себе только компонент подписи отклика Offer (смотри раздел 7.19.2).

8.16.2. Блок подписи в платежном запросе

Блок Signature, который содержится в том же сообщении, что и блок платежного запроса, содержит в себе:

  • Компонент подписи отклика Offer (смотри раздел 7.19.2) и
  • Если поатеж зависит от предыдущего шага (как указано атрибутом StartAfter компонента Payment), тогда компонент подписи платежной расписки (смотри раздел 7.19.3) генерируется на предыдущем этапе (шаге).
8.16.3. Блок подписи в платежном отклике

Блок подписи, который содержится в том же сообщении, что и блок платежного отклика, содержит только компонент подписи платежной расписки (смотри раздел 7.19.3), сформированной на этом этапе (шаге).

8.16.4. Блок подписи в запросе доставки

Блок подписи, который содержится в том же сообщении, что и блок запроса доставки, содержит:



  • Компонент подписи отклика Offer (смотри раздел 7.19.2) и
  • Компонент подписи платежной расписки (смотри раздел 7.19.3), сформированный на предшествующем шаге.
8.16.5. Блок подписи в отклике доставки

Блок Signature, который содержится в том же сообщении, что и блок отклика доставки, содержит только компонент подписи отклика Delivery (смотри раздел 7.19.4), сформированный на этом шаге.

8.17. Блок ошибки

Торговый блок Error содержит один или более компонентов Error (смотри раздел 7.21), которые несет в себе информацию о технических ошибках (смотри раздел 4.1) в сообщении IOTP, полученном одной из торговых ролей, вовлеченных в сделку.

Ниже представлены две фразы, которые используются в описании торгового блока Error:

  • ошибочное сообщение. Сообщение IOTP, которое содержит или является причиной ошибки какого-то рода;
  • сообщение, опровещающее об ошибке. Сообщение IOTP, которое содержит торговый блок Error, описывающий ошибку, найденную в сообщении.
Торговый блок Error может содержаться в любом сообщении, уведомляющем об ошибке. Реакция на такое сообщение зависит от серьезности (severity) ошибки. Разъяснения различных значений серьезности ошибки (и сопряженных с ними действий) дано в определении компонента Error.

Несмотря на то что торговый блок Error может уведомлять о многих различных ошибках, используя несколько компонентов Error, разработчики приложений могут и не поддерживать такую возможность.

Структура торгового блока Error представлена ниже.

<!ELEMENT ErrorBlk (ErrorComp+, PaySchemeData*) >
<!ATTLIST ErrorBlk ID ID #REQUIRED >

Атрибуты:

ID Идентификатор, который однозначно определяет блок Error транзакции.
Cодержимое:

ErrorComp Компонент Error (смотри раздел 7.21), который содержит информацию об индивидуальной технической ошибке.
PaySchemeData Опционный компонент Payment Scheme (смотри раздел 7.10), который содержит описание платежной схемы.
8.18. Блок Cancel

Блок Cancel используется одной торговой ролью чтобы информировать остальных о том, что транзакция аннулируется.


Пример использования включает в себя:

  • Роль Покупателя, информирующую других о том, что он не собирается продолжать транзакцию. Это позволяет серверу завершить транзакцию, не дожидаясь таймаута.
  • Роль, отличная от покупателя, информирует Покупателя о том, что транзакция останавливается. В этом случае Покупатель вряд ли повторно пошлет предыдущее сообщение в предположении, что оно не было получено.
Его определение имеет вид.

<!ELEMENT CancelBlk (Status) >
<!ATTLIST CancelBlk ID ID #REQUIRED >

Атрибуты:

ID Идентификатор, который однозначно определяет блок Cancel транзакции.
Cодержимое:

Status Содержит статусную информацию, указывающую, что транзакция была аннулирована.


Содержание раздела