Биллинговая система Nodeny
27 Апреля 2024, 08:52:04 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Прекращена поддержка версии Nodeny 49
 
   Начало   Помощь Поиск Войти Регистрация  
Страниц: [1]
  Печать  
Автор Тема: Платежные терминалы Smartpoint  (Прочитано 3989 раз)
Kaylas
NoDeny
Пользователь
*

Карма: 0
Offline Offline

Сообщений: 72


Просмотр профиля Email
« : 26 Апреля 2011, 08:40:51 »

Для работы с терминалом мне выслали руководство по подключению.
Если кто сталкивался покажите как привязать это к Nodeny. Возможно уже есть готовые решения или скажите сколько будет стоить написать модуль?


•   Описание
Протокол взаимодействия реализован на основе интернет протокола HTTPS. Данные передаются в xml-формате, используя метод POST. Для защиты канала передачи данных используется SSL-сертификат на стороне сервера (провайдера). Все запросы и ответы подписываются по алгоритму RSA (SHA1) с длиной ключа 1024, соответственно стороны (Провайдер, EasySoft) обмениваются сертификатами в формате *.PEM. На данный момент подпись является необязательной!
•   Общая структура
Запрос

<Request>
<DateTime>yyyy-MM-ddTHH:mm:ss</DateTime>
<Sign></Sign>
<Operation>
<Parameter1/>
 ...
<ParameterN/>
</Operation>
</Request>

Ответ

<Response>
<StatusCode>int</StatusCode>
<StatusDetail>string</StatusDetail>
<DateTime>yyyy-MM-ddTHH:mm:ss</DateTime>
<Sign></Sign>
   <Parameter1/>
...
<ParameterN/>
</Response>
Где:

DateTime – время создания закпроса(ответа);
Sign – цифровая подпись в виде HEX-строки(AF4ED0…);
Operation – тип операции (список доступных операций приведен ниже);
StatusCode – код состояния (если запрос выполнен успешно то код 0, еcли ошибка то меньше нуля);
StatusDetail – описание результата операции.
 

•   Типы запросов
•   Check (проверка пользователя, счета);
•   Payment (создание заказа);
•   Confirm (подтверждение заказа);
•   Cancel (отмена платежа);
•   Проверка пользователя
Запрос

<Request>
   <DateTime>yyyy-MM-ddTHH:mm:ss</DateTime>
<Sign></Sign>
<Check>
<ServiceId>int</ServiceId>
<Account>string</Account>
</Check>
</Request>

Ответ
<Response>
<StatusCode>int</StatusCode>
<StatusDetail>string</StatusDetail>
<DateTime>yyyy-MM-ddTHH:mm:ss</DateTime>
<Sign></Sign>
<AccountInfo>
<Parameter1>string</Parameter1>

<ParameterN>string</ParameterN>
</AccountInfo>
</Response>
ServiceId – номер вашего сервиса в нашей системе;
Account – идентификатор пользователя (номер телефона, номер договора, …);
AccountInfo – пользовательская информация, которая отображается на экране. Значение параметров – должны быть на английском языке (Эти параметры нам сообщаются при создании сервиса). Ввиду ограничения отображаемой информации, количество параметров не должно быть больше 4-х.
•   Создание заказа
Запрос

<Request>
<DateTime>yyyy-MM-ddTHH:mm:ss</DateTime>
<Sign></Sign>
<Payment>
<ServiceId>int</ServiceId>
<OrderId>long</OrderId>
<Account>string</Account>
<Amount>decimal</Amount>
</Payment>
</Request>

Ответ
<Response>
<StatusCode>int</StatusCode>
<StatusDetail>string</StatusDetail>
<DateTime>yyyy-MM-ddTHH:mm:ss</DateTime>
<Sign></Sign>
   <PaymentId>string</PaymentId>
</Response>
OrderId – это наш уникальный идентификатор транзакции (тип long 8-байт);
Amount – сумма платежа(в формате NN.NN, пример 10.50);
PaymentId – номер платежа в вашей системе.
•   Подтверждение заказа
Запрос

<Request>
<DateTime>yyyy-MM-ddTHH:mm:ss</DateTime>
<Sign></Sign>
<Confirm>
<ServiceId>int</ServiceId>
<PaymentId>string</PaymentId>
</Confirm>
</Request>

Ответ
<Response>
<StatusCode>int</StatusCode>
<StatusDetail>string</StatusDetail>
<DateTime>yyyy-MM-ddTHH:mm:ss</DateTime>
<Sign></Sign>
   <OrderDate>yyyy-MM-ddTHH:mm:ss</OrderDate>
</Response>
OrderDate – дата, которая фиксируется у вас как дата совершения платежа (списание денег), она же проходит по бухгалтерии и финансовым документам.
•   Отмена заказа
Запрос

<Request>
<DateTime>yyyy-MM-ddTHH:mm:ss</DateTime>
<Sign></Sign>
<Cancel>
<ServiceId>int</ServiceId>
<PaymentId>string</PaymentId>
</Cancel>
</Request>

Ответ
<Response>
<StatusCode>int</StatusCode>
<StatusDetail>string</StatusDetail>
<DateTime>yyyy-MM-ddTHH:mm:ss</DateTime>
<Sign></Sign>
   <CancelDate>yyyy-MM-ddTHH:mm:ss</CancelDate>
</Response>
CancelDate – дата отмены заказа.
Записан
Kaylas
NoDeny
Пользователь
*

Карма: 0
Offline Offline

Сообщений: 72


Просмотр профиля Email
« Ответ #1 : 26 Апреля 2011, 08:42:20 »

•   Сверка платежей
Поставщику услуг раз в сутки отправляется на email(указанный при подключении) реестр платежей в формате .csv.
Формат файла:

OrderId;PaymentId;ServiceId;Account;Amount;OrderDate;
11;7891123;223;4589687;45.50;2010-05-02T14:05:30;
12;4139874;497;3257879;5.00;2010-05-02T20:05:30;
14;5478877;544;1121458;15.00;2010-05-02T21:08:30;


 

•   Цифровая подпись
Для подписи запроса вы должны использовать все тело запроса с пустым тегом <Sign></Sign>:

Запрос:

<Request>
   <DateTime>yyyy-MM-ddTHH:mm:ss</DateTime>
<Sign></Sign>
<Check>
<ServiceId>int</ServiceId>
<Account>string</Account>
</Check>
</Request>

Подпись: RSA1024(SHA1(Запрос))
 
Для проверки подписи используется аналогичная процедура:

Ответ:

<Response>
<StatusCode>int</StatusCode>
<StatusDetail>string</StatusDetail>
<DateTime>yyyy-MM-ddTHH:mm:ss</DateTime>
<Sign></Sign>
</Response>

 

•   Схемы оплаты
•   Прямое пополнение
1 Проверка возможности платежа(проверка абонента)
<Request>
   <DateTime>2010-09-01T12:00:00</DateTime>
<Sign>94C8682CABCF1D…</Sign>
<Check>
<ServiceId>100</ServiceId>
<Account>12345678</Account>
</Check>
</Request>

<Response>
<StatusCode>0</StatusCode>
<StatusDetail>OK</StatusDetail>
<DateTime>2010-09-01T12:00:05</DateTime>
<Sign>47EDE8324D05CC1…</Sign>
<AccountInfo>
<Name>Иванов А.А.</Name>
<Address>ул. Садовая 5, кв. 16</Address>
<Balance>125.00</Balance>
</AccountInfo>
</Response>
Если проверка выполнена успешно переходим на шаг 2
2 Создание заказа
<Request>
   <DateTime>2010-09-01T12:00:10</DateTime>
<Sign>2EE9485D8747963E…</Sign>
<Payment>
<ServiceId>100</ServiceId>
<OrderId>11</OrderId>
<Account>12345678</Account>
<Amount>25.00</Amount>
</Payment>
</Request>

<Response>
<StatusCode>0</StatusCode>
<StatusDetail>Order Created</StatusDetail>
<DateTime>2010-09-01T12:00:15</DateTime>
<Sign>D3479BB615EFF…</Sign>
<PaymentId>145</PaymentId>
</Response>
В случае успеха переходим на подтверждение платежа.
3 Подтверждение заказа
<Request>
   <DateTime>2010-09-01T12:00:20</DateTime>
<Sign>615EFFD1D9E02BD…</Sign>
<Confirm>
   <PaymentId>145</PaymentId>
</Confirm>
</Request>

<Response>
<StatusCode>0</StatusCode>
<StatusDetail>Payment Confirmed</StatusDetail>
<DateTime>2010-09-01T12:00:25</DateTime>
<Sign>E4E54DD77C157F…</Sign>
   <OrderDate>2010-09-01T12:00:25</OrderDate>
</Response>
При подтверждении происходит списание средств со счета партнера. Если во время подтверждения произошол timeout – подтверждение может повторится, при этом должно возвращатся то же, что и в первый раз(OrderDate – при этом не изменяется).
 

•   Офлайновые платежи
•   Формат данных
Информацию о своих абонентах (если такая имеется) провайдер должен передавать в следующем формате:
<Clients>
<Client>
<Account>string</Account>
<AccountInfo>
<Name>string</Name>
<Address>string</ Address >

</AccountInfo>
</Client>

</ Clients>

Account – параметр, по которому осуществляется поиск в базе абонентов;
AссountInfo – любая информация о пользователе, необходимая, например, для вывода на терминале

Файл именуется как clients-304.xml, где 304 – номер сервиса (услуги), который сообщается провайдеру при заведении сервиса в системе.

 

•   Дополнительные параметры
•   Банковские реквизиты
Дополнительный параметр в операции Check. Возвращается провайдером, когда платежи на один сервис имеют разные банковские реквизиты.
<BankingDetails>
<Payee>
<Id>ЕГРПОУ или ИНН получателя</Id>
<Name>Название или имя получателя</Name>
<Bank>
<Name>Название банка получателя</Name>
<Mfo>МФО получателя</Mfo>
<Account>счет получателя</Account>
</Bank>
</Payee>
<Payer>
<Id>ЕГРПОУ или ИНН плательщика</Id>
<Name>Название или имя плательщика</Name>
<Bank>
<Name>Название банка плательщика</Name>
<Mfo>МФО плательщика</Mfo>
<Account>счет плательщика</Account>
</Bank>
</Payer>
<Narrative>
<Name>Назначение платежа в формате точно из договора</Name>
<Vat>20</Vat> <!--НДС, если не берется то 0-->
</Narrative>
</BankingDetails>
•   Оригинальный номер сервиса
Дополнительный параметр в операции Check, возвращается, если для данного пользователь сервис пополнения отличный от того, который указан в запросе(можно указывать только те сервиса, которые заведены у нас в системе). Это бывает необходимо в ситуациях когда например в терминале сервис один, а у нас в системе для каждого города или филиала заведен свой(разные договора, банковские реквизиты).  В этом случае операция покупки пройдет с новым ServiceId.
<OriginalServiceId>int</OriginalServiceId>
Пример:
<Request>
   <DateTime>2010-09-01T12:00:00</DateTime>
<Sign>94C8682CABCF1D…</Sign>
<Check>
<ServiceId>100</ServiceId>
<Account>12345678</Account>
</Check>
</Request>

<Response>
<StatusCode>0</StatusCode>
<StatusDetail>OK</StatusDetail>
<DateTime>2010-09-01T12:00:05</DateTime>
<Sign>47EDE8324D05CC1…</Sign>
<AccountInfo>
<Name>Иванов А.А.</Name>
<Address>ул. Садовая 5, кв. 16</Address>
<Balance>125.00</Balance>
</AccountInfo>
<OriginalServiceId>101</OriginalServiceId>
</Response>

 

•   Дополнение A
•   Создание сертификата
openssl genrsa -out provider.ppk 1024
openssl req -new -key provider.ppk -out provider.req
openssl ca -in provider.req -out provider.cer
openssl x509 -req -days 730 -in provider.req -signkey provider.ppk -out provider.cer

При создании сертификата подписи используется CN=ProviderSign-ProviderName, где ProviderName – название провайдера латинскими буквами (например, CN=ProviderSign-TopNet)
•   Подпись данных
Пример подписи на C#:

string path = "Provider-Test.pfx";
X509Certificate2 cert = new X509Certificate2(path,"test");
RSACryptoServiceProvider rsa = (RSACryptoServiceProvider)cert.PrivateKey;

byte[] signature = rsa.SignData(Encoding.UTF8.GetBytes(data), new SHA1CryptoServiceProvider());
string result = Utilities.BytesToHex(signature);
•   Тестовый хост
Перед боевым запуском, Вы должны пройти тестирование на странице:
http://easysoft.com.ua/ProviderProtocolTest
•   Авторизационные данные на стороне провайдера
Провайдер должен заранее проинформировать о том, какого типа авторизация предусмотрена на их сервере (сертификаты, логин и пароль и т.д.)

Записан
blackjack
NoDeny
Старожил
*

Карма: 24
Offline Offline

Сообщений: 352


Просмотр профиля Email
« Ответ #2 : 26 Апреля 2011, 08:52:12 »

Вы бы поискали для начала что-ли  Улыбающийся
Модуль "Платіжні термінали EasySoft"
Записан
Kaylas
NoDeny
Пользователь
*

Карма: 0
Offline Offline

Сообщений: 72


Просмотр профиля Email
« Ответ #3 : 26 Апреля 2011, 09:05:48 »

О спасибо. Виноват недосмотрел искал Smartpoint...
Записан
Страниц: [1]
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.20 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!