Функциональная схема операция IOTP
Рисунок .7. Функциональная схема операция IOTP
На приведенной выше диаграмме Интернет рассматривается в качестве транспортного механизма. Но это не всегда так. Сообщения IOTP могут транспортироваться с использованием различных механизмов.
В этой версии IOTP специфицированы следующие операции IOTP (смотри раздел 9):
- Покупка. Поддерживает предложение, платеж и, опционно, доставку.
- Возврат. Поддерживает возврат денег для сделанной ранее покупки.
- Обмен ценностями. Включает в себя два платежа, которые реализуют обмен ценностями, например валютный обмен.
- Аутентификация. Поддерживает удаленную аутентификацию одной торговой роли другой ролью с помощью различных аутентификационных алгоритмов, и предоставляет информацию об организации – торгового агента, который должен быть аутентифицирован с целью, например, подготовки предложения.
- Отзыв. Поддерживает отзыв электронного платежа из финансовой организации.
- Депозит. Поддерживает депозит электронного платежа в финансовой организации.
- Запрос. Поддерживает запрос состояния транзакции IOTP, которая в данный момент реализуется или уже завершилась.
- Ping. Эта операция поддерживает простой запрос, который позволяет одному приложению IOTP выяснить, работает ли некоторое другое приложение IOTP.
3.2. Сообщение IOTP
Как было описано выше, сообщения IOTP представляют собой [XML] документы, которыми обмениваются торговые роли, участвующие в сделке.
XML-определение сообщения IOTP выглядит следующим образом.
<!ELEMENT IotpMessage
( TransRefBlk,
SigBlk?, | |
ErrorBlk?, | |
( AuthReqBlk | | |
AuthRespBlk | | |
AuthStatusBlk | | |
CancelBlk | | |
DeliveryReqBlk | | |
DeliveryRespBlk | | |
InquiryReqBlk | | |
InquiryRespBlk | | |
OfferRespBlk | | |
PayExchBlk | | |
PayReqBlk | | |
PayRespBlk | | |
PingReqBlk | | |
PingRespBlk | | |
TpoBlk | | |
TpoSelectionBlk | |
)* |
) >
<!ATTLIST IotpMessage
xmlns CDATA
'iotp:ietf.org/iotp-v1.0'
Содержимое:
TransRefBlkсодержит информацию, которая характеризует сообщение IOTP в пределах операции IOTP (смотри раздел 3.3)
AuthReqBlk, AuthRespBlk, | Торговые блоки. |
DeliveryReqBlk | Торговые блоки присутствуют в сообщениях IOTP, а само содержимое |
DeliveryRespBlk | торгового блока зависит от типа выполняемой операции IOTP |
ErrorBlk | смотри определение каждой операции в разделе 9. |
InquiryReqBlk, | |
InquiryRespBlk, | |
OfferRespBlk, PayExchBlk, | |
PayReqBlk | Полные определения каждого торгового блока описаны в разделе 8. |
PayRespBlk, PingReqBlk, PingRespBlk, SigBlk, TpoBlk, TpoSelectionBlk |
Xmlns | Определение [XML Namespace] для сообщений IOTP. |
Сообщение IOTP является корневым элементом XML-документа. Оно, следовательно, должно предшествоваться соответствующим прологом документа XML. Например:
<?XML Version='1.0'?>
<!DOCTYPE IotpMessage >
<IotpMessage>
...
3.3. Блок ссылок операции (Transaction Reference Block)
Блок ссылок транзакции содержит информацию, которая идентифицирует IOTP-транзакцию и сообщение IOTP. Блок ссылок операции включает в себя:
- Компонент ID-операции, который однозначно идентифицирует операцию IOTP. Компоненты ID-операции идентичны для всех сообщений IOTP, относящихся к одной IOTP-операции.
- Компонент ID-сообщения, который предоставляет управляющую информацию о сообщении IOTP, а также однозначно идентифицирует сообщение IOTP в рамках операции IOTP.
- Нуль или более компонентов Related To, которые связывают эту операцию IOTP с другими операциями или другими событиями, используя идентификаторы этих событий.
<!ELEMENT TransRefBlk (TransId, MsgId, RelatedTo*) >
<!ATTLIST TransRefBlk ID ID #REQUIRED >
Атрибуты:
ID | Идентификатор, который однозначно определяет блок ссылок операции в пределах IOTP-процедуры (смотри раздел 3.4). |
TransId | Смотри 3.3.1 Id-компонент операции. |
MsgId | Смотри 3.3.2 Id-компонент сообщения. |
RelatedTo | Смотри 3.3.3 Компонент Related To. |
Идентификационная компонента транзакции
Идентификационная компонента транзакции содержит информацию, которая однозначно задает транзакцию IOTP. Ее определение представлено ниже:
<!ELEMENT TransId EMPTY >
<!ATTLIST TransId ID | ID #REQUIRED |
Version | NMTOKEN #FIXED '1.0' |
IotpTransId | CDATA #REQUIRED |
IotpTransType | CDATA #REQUIRED |
TransTimeStamp | CDATA #REQUIRED > |
ID | Идентификатор, который однозначно определяет Id-компонент транзакции в рамках операции IOTP. |
Version | Определяет версию IOTP и, следовательно структуру сообщений IOTP, которые используются транзакцией IOTP. |
IotpTransId | Содержит данные, которые однозначно определяют транзакцию IOTP. Это атрибут должен отвечать правилам для идентификаторов сообщений [RFC 822]. |
IotpTransTyp | Это тип исполняемой транзакции IOTP. Для базовой версии IOTP он идентифицирует "стандартную" транзакцию IOTP и предполагает определенную последовательность и содержимое сообщений IOTP, которыми обмениваются торговые роли. Корректными значениями атрибута являются: |
о | BaselineAuthentication (Базовая аутентификация) |
o | BaselineDeposit |
o | BaselinePurchase |
o | BaselineRefund |
o | BaselineWithdrawal |
o | BaselineValueExchange |
o | BaselineInquiry |
o | BaselinePing |
TransTimeStamp | Там где система, запускающая транзакцию IOTP, имеет внутренние часы, атрибут устанавливается равным времени старта транзакции IOTP в формате [UTC]. |
Некоторые системы не могут генерировать временные метки.
В этом случае этот атрибут должен содержать значение "NA" (Not Available).
3.3.2. Идентификатор сообщения
Компонент Id-сообщения предоставляет контрольную информацию о сообщении IOTP, а также однозначно идентифицирует сообщение в рамках транзакции IOTP. Его определение выглядит следующим образом.
<!ELEMENT MsgId EMPTY >
<!ATTLIST MsgId ID ID #REQUIRED | RespIotpMsg NMTOKEN #IMPLIED |
xml:lang NMTOKEN #REQUIRED | LangPrefList NMTOKENS #IMPLIED |
CharSetPrefList NMTOKENS #IMPLIED | SenderTradingRoleRef NMTOKEN #IMPLIED |
SoftwareId CDATA #REQUIRED | TimeStamp CDATA #IMPLIED > |
ID | Идентификатор, который однозначно идентифицирует сообщение IOTP в рамках транзакции IOTP (смотри раздел 3.4 ID атрибуты). Заметим, что если сообщение IOTP пересылается повторно, тогда значение этого атрибута остается неизменным. |
RespIotpMsg | Это ID-атрибут содержит Id-компонент сообщения IOTP, откликом на которое оно является. Таким образом все сообщения IOTP в пределах транзакции оказываются связаны. Это поле необходимо каждому сообщению IOTP за исключением первого сообщения IOTP в транзакции. |
SenderTradingRoleRef | Элемент ссылки (смотри раздел 3.5) торговой роли, которая сформировала сообщение IOTP. Он используется, чтобы идентифицировать сетевую позицию (Net Locations) (смотри раздел 3.9) торговой роли, которой требуется сообщить о технических ошибках (смотри раздел 4.1), связанных с торговыми блоками. |
Xml:lang | Определяет язык, используемый атрибутом, или дочерние элементы в пределах этого компонента, если не переписан атрибутом xml:lang в дочернем элементе. Смотри раздел 3.8. |
LangPrefList | Опционный список языковых кодов, который согласуется с идентификацией языков [XML]. Он используется отправителем, чтобы указать порядок предпочтения языков, которые получатель сообщения должен использовать при подготовке отклика. Получатель не обязан использовать один из указанных языков. |
CharSetPrefList | Опционный список идентификаторов символьных наборов, которые соответствуют символам в [XML]. Он используется отправителем для указания порядока предпочтения символьных наборов, которые получатель может применить при формировании отклика. Получатель не обязан использовать один из указанных символьных наборов. |
SoftwareId | Содержит информацию, которая идентифицирует программу, сформировавшую сообщение IOTP. Его целью является помочь разрешить проблему совместной работы различных программ, обменивающихся сообщениями. Это простая текстовая строка на языке, определенном xml:lang. Она должна содержать, по крайней мере: |
TimeStamp | Когда прибор, отправляющий сообщение имеет внутренние часы, атрибут делается равным времени генерации сообщения IOTP в формате [UTC]. |
3.3.3. Компонент Related To
Компонент Related To связывает транзакции IOTP с другими транзакциями или другими событиями с помощью идентификаторов этих событий. Определение этого компонента представлено ниже.
<!ELEMENT RelatedTo (PackagedContent) >
<!ATTLIST RelatedTo ID ID #REQUIRED | xml:lang NMTOKEN #REQUIRED |
RelationshipType NMTOKEN #REQUIRED | Relation CDATA #REQUIRED |
Атрибуты:
ID | Идентификатор, который однозначно jghtltkztn компонент Related To в рамках транзакции IOTP. |
xml:lang | Определяет язык, использованный атрибутом или дочерним элементом в данном компоненте, если не переписан атрибутом xml:lang дочернего элемента. Смотри раздел 3.8. |
RelationshipType | Определяет тип отношения. Корректными значениями являются: |
- IotpTransaction, в случае которого элемент Packaged Content содержит IotpTransId другой транзакции IOTP.
- Ссылка, в случае которой элемент Packaged Content содержит указатель на некоторый другой, не-IOTP документ.
Relation | Атрибут Relation содержит фразу на языке, определенном xml:lang, он определяет природу отношений между транзакцией, которая содержит этот компонент и другой транзакцией или другим событием. Окончательное текстовое выражение оставлено на усмотрение составителей программ IOTP. |
RelnKeyWords | Этот атрибут содержит ключевые слова, которые могут быть использованы, чтобы помочь идентифицировать подобные отношения, например все виды возвратов. Ожидается, что рекомендуемые ключевые слова будут выбраны в процессе практического использования. В этой версии спецификации не содержится никаких специальных рекомендаций по ключевым словам |
PackagedContent | Packaged Content (смотри раздел 3.7) содержит данные, которые идентифицируют связанные транзакции. Его формат варьируется в зависимости от значения атрибута RelationshipType. |
IOTP-сообщения, блоки (т.e. блоки ссылок операции и торговые блоки), торговые компоненты (включая ID-компонент транзакции и компонент подписи) и некоторые их дочерние элементы задаются атрибутом "ID" XML, который служит для идентификации этих XML-элементов. Эти элементы используются так, что один элемент может ссылаться на другой. Всем этим атрибутам присваиваются ID.
Значения каждого ID-атрибута является уникальным в пределах транзакции IOTP т.e. набор IOTP-сообщений, который имеет тот же самый компонент ID транзакции. Однажды присвоенное значение ID-атрибута элемента никогда не меняется. Это означает, что когда элемент копируется, значение ID-атрибута остается неизменным.
Как следствие можно использовать эти идентификаторы для ссылки и нахождения содержимого любого сообщения IOTP, блока или компонента (смотри раздел 3.5).
3.4.1. Определение ID-атрибутов сообщений IOTP
ID-атрибут Id-компонента IOTP-сообщения должен быть уникальным в пределах транзакции IOTP. Его определение представлено ниже:
IotpMsgId_value ::= IotpMsgIdPrefix IotpMsgIdSuffix
IotpMsgIdPrefix ::= NameChar (NameChar)*
о | "M" - Продавец (Merchant) |
о | "C" – Покупатель (Consumer) |
Для сообщений, которые содержат торговый блок отклика на информационный запрос или блок отклика Ping, префикс равен "Q".
Префикс для других торговых ролей в сделке содержится в компоненте Organisation (организации) и прописывается обычно Продавцом. Ниже представлены рекомендуемые значения:
о | "P" - Первый Кассир |
o | "R" – Второй Кассир |
o | "D" – Агент доставки |
o | "C" – Доставка (Deliver To) |
IotpMsgIdSuffix | Суффикс состоит из одной или более цифр. Суффикс должен быть уникальным для данной торговой роли транзакции IOTP. Рекомендации сводятся к следующему: |
o | Первому сообщению IOTP, посланному торговой ролью, присваивается суффикс "1". |
o | Для второго и последующих IOTP-сообщений, посланных той же торговой ролью, суффикс увеличивается на 1 для каждого последующего сообщения. |
o | Суффикс не может содержать начальных нулей. |
3.4.2. Определения ID-атрибута для блока и компонента
ID-атрибут блоков и компонентов в пределах транзакции IOTP также должен быть уникальным. Ниже представлено его определение:
BlkOrCompId_value ::= IotpMsgId_value "." IdSuffix
IdSuffix ::= Digit (Digit)*
IotpMsgId_value | ID-атрибут. ID-компонента сообщения IOTP, где блок или компонент использован впервые. |
IdSuffix | Суффикс состоит из одной или более цифр. Суффикс должен быть уникальным для ID-атрибута ID-компонента сообщения, используемого для генерации ID-атрибута. Рекомендуется здесь следующее: |
o | Первому блоку или компоненту, посылаемому торговой ролью присваивается суффикс "1" |
o | Для второго и далее блоков или компонентов ID-атрибуты увеличивается на 1 для каждого последующего сообщения. |
o | Суффикс не может содержать начальных нулей. |
3.4.3. Пример использования ID-атрибутов
На диаграмме проиллюстрировано, как используются значения ID-атрибутов.