Search
Write a publication
Pull to refresh

«Проблема 2000» в WebMoney WMClasses

Reading time1 min
Views6.3K
В .Net для работы с интерфейсами WebMoney существует замечательная OpenSource библиотека WMClasses. За что большое спасибо kazkad.

Внезапно :) в пятницу вечером в этой библиотеке обнаружился неприятный баг, напоминающий «проблему 2000». В ответ на запрос осуществить WM перевод средств, сервис WebMoney начал выдавать код — 102 — не выполнено условие постоянного увеличения значения параметра w3s.request/reqn. Ниже описание, почему так происходит и как это исправить.


Дело в том, что при запросах на интерфейсы Webmoney необходимо использовать номер запроса reqn, который должен быть постоянно возрастающим. (целое без знака, макс. количество цифр — 15; всегда должен быть больше номера предыдущего запроса на перевод средств!!! Монотонность номера учитывается в привязке к WMID, подписывающему запрос.)

Смотрим в код WmXmlCmd.cs
 public static long GenerateReqNo(int maxlen)
        {
            long reqn = DateTime.Now.ToFileTimeUtc();
            string data = reqn.ToString();

            if (data.Length > maxlen)
            {
                data = data.Remove(0, data.Length - maxlen); // <- удаляет первые 3 символа из строки
            }

            reqn = long.Parse(data);

            return reqn;
        }


В результате 14.12.2012 в 23.06 значение reqn достигло 999999999999999 и началось с 0. Требование возрастания нарушилось и работа сервиса остановилась. Решить удалось только обращением в службу поддержки WebMoney с просьбой сбросить значение reqn.

В этой истории радует то, что в следующий раз эта проблема возникнет 15.02.2016 8:53:20. Так что, еще есть 4 года, чтобы изменить способ генерации reqn.

Будьте внимательны.
Tags:
Hubs:
Total votes 31: ↑25 and ↓6+19
Comments5

Articles