1C-Company / DirectBank

DirectBank (прямой обмен с банком) – новая технология системы "1С:Предприятие 8"
51 stars 22 forks source link

Timestamp, GetPackList временные зоны. #76

Closed TrunovS closed 11 months ago

TrunovS commented 3 years ago

Добрый день.

В документации есть такая фраза:

Если в запросе из «1С:Предприятия 8» о готовых к передаче транспортных контейнерах указать «Отметку времени» (указывается значение даты и времени сервера Банка с точностью до секунды), то именно с этого момента времени будет формироваться список уникальных идентификаторов (в формате GUID), подготовленных к передаче в хронологическом порядке.

Правильно ли я понимаю, что если сервер банка находится в отличной временной зоне от клиента делающего запрос, то клиенту для корректности "GetPackList с отметкой времени" необходимо производить нужное смещение.

Если это так, то возможно ли каким-либо автоматическим способом получать временную зону сервера банка? Насколько я понял, в GetSettings такая информация не содержится?

SevDmitry commented 3 years ago

Эта дата копируется из поля TimeStampLastPacket "как есть" https://github.com/1C-Company/DirectBank/blob/master/doc/common-section/type-tables.md#edo-GetPacketListResponseType Таким образом, реальное время клиента никак не участвует во взаимодействии и банк всегда получит свою дату. Обязательно обратите внимание на условие "Значение не должно содержать информацию о часовом поясе", в противном случае 1С при чтении XML выполнит приведение даты и в следующий запрос дата уйдет со смещением.

TrunovS commented 3 years ago

Но для того чтобы взять "TimeStampLastPacket" необходимо сначала сделать первоначальный запрос GetPackList с какой-то датой и временем в поле date? GET https://dbogate.demobank.ru/GetPackList?date=16.02.2015%2011:25:32 И если время в поле date не будет соответствовать часовому поясу сервера возможны разного рода ошибки. Как например в городе N - date=16.02.2015%2011:25:32 А на сервере банка в другой временной зоне - date=16.02.2015%2010:25:32 И выходит если пользователь не знает о текущей временной зоне сервера, то его запрос GET https://dbogate.demobank.ru/GetPackList?date=16.02.2015%2011:25:32 Потребует списка готовых пакетов из будущего.

Насколько я понимаю:

SevDmitry commented 3 years ago

В самый первый запрос подставляется начало текущего дня.

MTigra commented 2 years ago

В самый первый запрос подставляется начало текущего дня.

А разъясните, пожалуйста этот момент. Получается, в самом первом запросе должна быть информация о начале текущего дня по часовому поясу банка, но ведь при первом запросе клиент direct банк ничего не знает о том в каком поясе живет банк и кажется что могут возьникнуть проблемы уже не с интервалами в часы, а с интервалами в дни.

Например, первый контакт клиента с банком происходит в 23:00 01.01 по GTM, клиент тоже находится в этом часовом поясе, а вот банк например находится в GTM+3 и у него на момент первого контакта время 02:00 02.01 GTM+3 какое содержание должно быть у первого запроса getPackList и ответа на него?

MTigra commented 2 years ago

также хочется понять что должно содержаться в TimeStampLastPacket, в случае если в ответе на GetPacketList банк вернул пустой список