Протокол работы с сервером биллинга провайдера Коммуникация с сервером биллинга происходит по протоколу HTTPS или HTTP. Параметры передаются методом GET в строке URL или POST. Существует 3 типа запросов: проверка номера, создание сессии проведения платежа, подтверждение платежа. Параметры запросов time_p – UNIX время по часам Платежки acc – номер лицевого счета sum – сумма платежа id_p – идентификатор транзакции в системе Платежка id_v – идентификатор транзакции в системе провайдера md5 – подпись запроса Параметр md5 содержит цифровую подпись запроса и представляет собой MD5-хэш от строки, образованной конкатенацией значений всех параметров запроса (исключая сам параметр md5) плюс секретный ключ клиента. Порядок конкатенации значений параметров при вычислении цифровой подписи определяется отдельно для каждого типа запроса. По выполнению запроса сервером биллинга возвращается XML-документ (utf-8), содержащий статус обработки и запрошенные значения. Общая структура возвращаемого XML-документа: <?xml version="1.0" ?> <response> <time_v>UNIX-time ответа</time_v> <параметр1>значение1</параметр1> ... <параметрN>значениеN</параметрN> <status>целочисленный код возврата</status> <md5>цифровая подпись ответа</md5> </response> Параметр time_v устанавливается в текущее время сервера в момент начала обработки запроса. Аналогично параметру time запроса, значение представляется в виде UNIX-time (количество секунд, прошедших с 1 января 1970 года). При успешном завершении обработки запроса код возврата status равен 0 (полный список кодов возврата приведен ниже ) Цифровая подпись ответа md5 вычисляется аналогично цифровой подписи запроса, при этом список используемых для этого значений параметров, а также порядок их конкатенации, определяются отдельно для каждого типа запроса. Для проведения платежа осуществляется в два этапа: вызывается запрос типа 2, а затем запрос типа 3 с номером транзакции полученным на первом этапе от биллинга. Не подтвержденные сессии аннулируются биллингом автоматически. При повторном получении номера транзакции (id_p) необходимо выдать результат первой обработки. 1. Проверка номера Имя скрипта: check.php Параметры: time_p - время начала обработки запроса сервером acc - счет пользователя, для проверки md5 - цифровая подпись запроса Вычисление цифровой подписи запроса: md5 = MD5(time_p + acc + client_secret_key) Возвращаемый XML-документ: <?xml version="1.0" ?> <response> <time_v>UNIX-time ответа</time_v> <fio> ФИО абонента </fio> <number> номер </number> <balance> сумма остатка на счете </balance> <param> например, адрес абонента <param> <status>целочисленный код возврата</status> <md5>цифровая подпись ответа</md5> </response> Вычисление цифровой подписи ответа: md5 = MD5(time_v + fio + server_secret_key) 2. Создание сессии проведения платежа Имя скрипта: payment.php Параметры: time_p - время начала обработки запроса сервером acc - счет пользователя, на который будет производиться платеж sum - сумма платежа id_p - уникальный номер транзакции в системе Платежка md5 - цифровая подпись запроса Вычисление цифровой подписи запроса: md5 = MD5(time_p + acc + sum + id_p + client_secret_key) Возвращаемый XML-документ: <?xml version="1.0" ?> <response> <time_v>UNIX-time ответа</time_v> <id_v> уникальный номер транзакции в системе провайдера </id_v> <status>целочисленный код возврата</status> <md5>цифровая подпись ответа</md5> </response> Вычисление цифровой подписи ответа: md5 = MD5(time_v + id_v + server_secret_key) 3. Подтверждение платежа Имя скрипта: commit_pay.php Параметры: time_p - время начала обработки запроса сервером id_v - уникальный номер транзакции в системе провайдера (берется из ответа на запрос создания сессии) md5 - цифровая подпись запроса Вычисление цифровой подписи запроса: md5 = MD5(time_p + id_v + client_secret_key) Возвращаемый XML-документ: <?xml version="1.0" ?> <response> <time_v>UNIX-time ответа</time_v> <status>целочисленный код возврата</status> <md5>цифровая подпись ответа</md5> </response> Вычисление цифровой подписи ответа: md5 = MD5(time_v + server_secret_key) Коды возврата: 0 - запрос завершен успешно 1 – неверное значение параметра time_p 2 – неверное значение параметра id_p 3 – неверное значение параметра acc, либо такой счет не существует 4 - неверное значение параметра sum 5 – неверная цифровая подпись 6 – транзакция с таким номером (id_v) уже была обработана ранее 99 – внутренняя ошибка сервера Внимание!!! После проверки номера может возвращаться до 4 параметров, которые могут отображаться на экране пользователю после проверки (например, ФИО, адрес, состояние счета и т.п.) Коды возврата необходимо уточнить