Вы находитесь на странице: 1из 25

Paynet Api.

e-com

Тип документа:

Техническая спецификация

Версия:

вер. 0.5 Ру / 08.05.2019

WWW.PAYNET.MD
Paynet Api.e-com

вер. 0.5 Ру / 08.05.2019

История изменений

Дата Версия Описание


08.05.2019 0.5 Добавлена возможность передать данные о клиенте для
заполнения анкеты
Добавлена возможность указывать чем клиент должен
оплатить
Расширен блок подписания данных (продукты, инструмент
оплаты, данные о клиенте)

стр. 2 / 25
Paynet Api.e-com

вер. 0.5 Ру / 08.05.2019

Оглавление
Введение.......................................................................................................................................................4
Перевод клиента на страницу выбора метода оплаты......................................................................8
(Send)Передача информации о платеже..........................................................................................8
(Redirect) Перевод клиента в платёжную форму.............................................................................9
Аутентификация и авторизация к Web - сервису Paynet.................................................................11
(Auth) Аутентификация и получение token - а авторизации......................................................11
Описание web – сервиса Payments.......................................................................................................12
(Send) Отправка платёжного документа в систему Paynet.........................................................13
(Get) Получение информации о зарегистрированном платеже...............................................16
(Search) Поиск платежей по заданным критериям......................................................................19
Нотификации системы Paynet................................................................................................................21
(Paid Notification) Нотификация системы Партнёра о завершённой операции оплаты.....21
Формирование подписи..........................................................................................................................23
(SignNotification) Пример формирования строки к подписанию данных о нотификации..24
(SignPayment)Пример подписания данных о платеже................................................................24

стр. 3 / 25
Paynet Api.e-com

вер. 0.5 Ру / 08.05.2019

Введение
Paynet Api - представляет собой программный интерфейс для взаимодействия с системой Paynet,
предоставляющей своим Клиентам возможность завести электронный кошелек, осуществлять платежи и
переводы, а также принимать участие в программах лояльности.

Запросы осуществляются посредством протокола HTTPS (HyperText Transfer Protocol Secure), что есть расширение
протокола HTTP, поддерживающее шифрование. Данные, передаваемые по протоколу HTTPS, «упаковываются»
в криптографический протокол TLS.
Запросы осуществляются на адрес:
для проведения тестов: https://test-provided_api_host/api/Payments
для полноценного взаимодействия: https://provided_api_host/api/Payments

Paynet Api состоит из набора сервисов, разбитых по принципу реализуемой ими функциональности.
Paynet Api.e-com предоставляет возможность Юр.лицам организовать на своих интернет-сайтах прием
платежей за товары или услуги электронными деньгами клиента через систему Paynet.
Для того чтобы получить возможность организовать на своих интернет-сайтах прием платежей за товары или
услуги электронными деньгами клиента через систему Paynet., юр.лицо должно стать Партнёром системы
Paynet и выбрать сценарий по которому желает интегрироваться с системой Paynet.

Чтобы стать Партнёром системы Paynet, следует пройти этап регистрации торговца в системе Paynet.
В результате Партнёр получит идентификатор торговца и пользователя для доступа в свой кабинет.

Клиент сможет оплатить электронными деньгами непосредственно в платёжной форме эмитента.


Партнёр, при переводе клиента в платёжную форму, имеет возможность указать адреса перенаправления
клиента в случае успешной оплаты либо отказа от оплаты платежа.

стр. 4 / 25
Paynet Api.e-com

вер. 0.5 Ру / 08.05.2019

Сценарий приёма платежей за товары и указанные услуги на страницах партнёра

1. Клиент находится на сайте партнёра и желает оплатить корзину товаров/услуг партнёра, используя
электронный кошелёк системы Paynet либо другими согласованными инструментами оплаты
электронными деньгами

стр. 5 / 25
Paynet Api.e-com

вер. 0.5 Ру / 08.05.2019

2. Партнёр может собрать всю необходимую информацию от клиента (адресные контактные общие
данные о клиенте, желаемый инструмент оплаты), необходимых в процессе оплаты через систему
Paynet (PSP).

3. Система партнёра направляет системе Paynet данные о платеже (товар(ы)/услуга(и), анкету клиента,
метод оплаты) и переводит клиента в системы Paynet

4. В случае недостатка данных от партнёра в Paynet системе клиенту будет предложено выбрать метод
оплаты, в случае его отсутствия, заполнить анкету, в случае необходимости в анкете и недостатка
данных о клиенте, и продолжить либо отказаться от оплаты.

стр. 6 / 25
Paynet Api.e-com

вер. 0.5 Ру / 08.05.2019

5. В зависимости от выбранного метода оплаты, клиент будет переведён на платёжную форму эмитента
электронных денег клиента для дальнейших действий (аутентификации и завершения покупки).

6. После завершения оплаты платежа, клиент будет извещён о статусе платежа в системе Paynet и будет
предложена ему возможность вернуться в магазин торговца ,

7. Клиент будет переведён по адресам указанным партнёром при переводе клиента на страницу Paynet
8. Система Paynet имеет возможность извещать систему Партнёра по предустановленному URL (Смотрим

пунк о нотификации системы Партнёра)


9. Система Партнёра имеет возможность проверить состояние платежа, используя сервис-методы Get,
Search

стр. 7 / 25
Paynet Api.e-com

вер. 0.5 Ру / 08.05.2019

Перевод клиента на страницу выбора метода


оплаты

(Send)Передача информации о платеже


Система Paynet предоставляет 2 модели передачи данных о платеже:
• (server -> server) В данной модели обязательна идентификация и установка связи между серверами
Партнёра и компании Paynet. Подпись данных не обязательна. Система Партнёра передаст
информацию о платеже, обратившись к сервису Payments. В результате Партнёр получит
идентификатор платежа, при помощи которого у Партнёра будет возможность направить клиента в
платёжную форму системы Paynet для подтверждения и оплаты платежа.
Необходимы сопутсвующие данные для интеграции по данной модели
- Технического пользователь с доступом к сервису Payments
- ID Партнёра в системе Paynet

• (client -> server) В данной модели информация о платеже передаётся с клиентского интерфейса, что
требует дополнительной защиты данных. Соответственно для защиты данных принято подписывать
информацию о платеже перед отправкой в платёжную форму. (смотрим алгоритм подписания)
Необходимы сопутсвующие данные для интеграции по данной модели
- Секретный ключ учавствующий в подписании. Известен обоим системам
- ID Партнёра в системе Paynet

стр. 8 / 25
Paynet Api.e-com

вер. 0.5 Ру / 08.05.2019

(Redirect) Перевод клиента в платёжную форму


Чтоб перенаправить клиента на страницу выбора метода оплаты системы Paynet, следует передать
определённый набор данных, в зависимости от выбранной модели передачи данных о платеже.
Общие данные для запроса к платёжной форме
Method POST

Host provided_portal_host

Дополнительные данные для запроса к платёжной форме


в рамках модели server -> server

Url Acquiring/GetEcom

Тело запроса в формате json


{
"operation": PaymentID from Payment Service,
"LinkUrlCancel”:”http://url_cancel”,
"LinkUrlSucces”:”http://url_succes”,
"Lang”:”en-US”
"Signature”: ”Hash Provided by Payment Service”
}

в рамках модели client -> server

Url Acquiring/SetEcom

Тело запроса в формате json


{
"ExternalID": 20160622010101,
"Currency": 498,
"Merchant": "MerchantCode"
"Customer": {
"Code": "Customer Code",
"NameFirst": "payer first name",
"NameLast": "payer last name",
"PhoneNumber": "customer/payer phone number",
"email" : "customer/payer email",
"Country": "customer country",
"City": "customer city",
"Address": "Address description"
},
"ExpiryDate": "2016-01-01T00:00:00",
"Services": [{
"Name": "Service Name 1",
"Description": "Service Name Decription1"
"Amount": 100,
"products":[{
"Amount" : 100,
"Barcode" : 13243546,
"Code" : "PRODUCT1",

стр. 9 / 25
Paynet Api.e-com

вер. 0.5 Ру / 08.05.2019

"Description" : "description of PRODUCT1",


"GroupId" : "22",
"GroupName" : "a group name of this product",
"LineNo" : 1,
"Name" : "product 1",
"UnitPrice" : 100,
"UnitProduct" : 1
}],
}],
"LinkUrlCancel”:”http://url_cancel”,
"LinkUrlSuccess”:”http://url_success”,
"Lang”:”en-US”,
"Signature”:”xxxxxxxxxxxxxxxxxxxxxxxxxxxx”,
"SignVersion":"v05",
"MoneyType":"PAYNET"
}

стр. 10 / 25
Paynet Api.e-com

вер. 0.5 Ру / 08.05.2019

Аутентификация и авторизация к Web -


сервису Paynet
Для обращения к сервису Paynet и прохождения авторизации, требуется получить token авторизации.
Получить данный tоken можно вызвав нижеописанный сервис-метод, указав параметры(имя пользователя и
пароль), полученные при регистрации партнера.

(Auth) Аутентификация и получение token - а авторизации


Для вызова данного метода необходим пользователь и пароль, выданный владельцем системы Paynet.
Запрос
Method POST

Host provided_api_host

Url /auth

Content-Type application/x-www-form-urlencoded

Body grant_type=password&username=username&password=password

Ответ в формате JSON


{
"access_token": "provided_token_for_you",
"token_type": "bearer",
"expires_in": number_of_seconds
}

стр. 11 / 25
Paynet Api.e-com

вер. 0.5 Ру / 08.05.2019

Описание web – сервиса Payments


Данный сервис предназначен для регистрации, поиска и получения информации о зарегистрированных
платежах в системе Paynet. В случае успеха (HTTP Response Code -> 200), сервис-метод возвращает JSON
документ, содержащий объект либо список объектов Payments (представлен ниже)

Справочник полей объекта Payment


Поле Тип Описание

PaymentID long Идентификатор платежа системы Paynet

Invoice long Идентификатор платежа системы партнёра

MerchantCode string Код партнёра в рамках которого совершается платёж

MoneyType string Код инструмента оплаты из списка инструментов оплаты, устанавливаемый контрактом.
В качестве примера используется код «PAYNET»

Customer – Информация о Клиенте на стороне партнёра

Code string Код клиента на стороне системы партнёра

Address string Адрес клиента

FirstName string Имя клиента на стороне партнёра

LastName string Фамилия клиента на стороне партнёра

email string Электронный адрес клиента на стороне партнёра

PhoneNumber string Телефон клиента на стороне партнёра

Country string Страна клиента на стороне партнёра

City string Город клиента на стороне партнёра

Registered DateTime Дата регистрации платежа. Значение согласно стандарту ISO 8601

Confirmed DateTime Дата подтверждения платежа клиентом. Значение согласно стандарту ISO 8601

Processed DateTime Дата оплаты платежа клиентом. Значение согласно стандарту ISO 8601

Canceled DateTime Дата отмены платежа. Значение согласно стандарту ISO 8601

Currency int Код валюты, значение согласно стандарту ISO 4217

ExpiryDate DateTime Срок оплаты платежа клиентом. Значение согласно стандарту ISO 8601

Amount long Сумма к оплате, приведённая к целочисленному значению. Пример: 12.01 => 1201.

Signature string Hash сопровождающий клиента в системе Paynet

Status enum 1 – Registered


2 – Customer Verified
3 – Initialized to be Paid
4 – Paid

SignVersion string Версия API подписания. На данный момент используется версия 0.5 ("v05")

стр. 12 / 25
Paynet Api.e-com

вер. 0.5 Ру / 08.05.2019

Services — Список услуг предоставляемых партнёром

Name string Наименование услуги

Description string Описание услуги

Products

Amount long Стоимость продукта в целочсленном формате… Пример


12.34 => 1234

Barcode long Бар код продукта

LineNo int Порядковый номер продукта

GroupId long Идентификатор группы продукта

Code string Код продукта

Name string Наименовние продукта

Description string Расширенное Описание продукта

Quantity long Количество продукта в целочисленном формате… Пример


12.01 ->1201

UnitPrice long Стоимость одной единицы продукта в целочисленном


формате… Пример 12.01 ->1201

UnitProduct string Тип единицы продукта

Amount Int Сумма к оплате, приведённая к целочисленному значению.


Пример: 12.01 => 1201.

В случае выявления ошибки сервис метод возвращает JSON документ который содержит объект Error
(представлен ниже)
Справочник полей объекта Error
Поле Тип Описание

Code string Код ошибки

Message string Описание ошибки

(Send) Отправка платёжного документа в систему Paynet


Данный сервис-метод предназначен для отправки платёжного документа в систему Paynet. В результате
Партнёр получает идентификатор платёжного документа на стороне Paynet и имеет возможность направить
клиента на страницу системы Paynet для выбора эмитента где будет оплачена покупка
Справочник полей, участвующих в сервис-методе
Поле Тип Описание

Invoice long Идентификатор платежа системы партнёра

Customer – Информация о Клиенте на стороне партнёра

Code string Код клиента на стороне системы партнёра

Address string Адрес клиента

стр. 13 / 25
Paynet Api.e-com

вер. 0.5 Ру / 08.05.2019

FirstName string Имя клиента на стороне партнёра

LastName string Фамилия клиента на стороне партнёра

email string Электронный адрес клиента на стороне партнёра

PhoneNumber string Телефон клиента на стороне партнёра

Country string Страна клиента на стороне партнёра

City string Город клиента на стороне партнёра

Currency int Код валюты, значение согласно стандарту ISO 4217

ExpiryDate DateTime Срок оплаты платежа клиентом. Значение согласно стандарту ISO 8601

Services – набор услуг включённых в платёж

Name string Наименование услуги

Description string Описание услуги

Products – набор продуктов к получению в результате оплаты услуги

Amount long Стоимость продукта в целочсленном формате… Пример


12.34 => 1234

Barcode long Бар код продукта

LineNo int Порядковый номер продукта

GroupId long Идентификатор группы продукта

Code string Код продукта

Name string Наименовние продукта

Description string Расширенное Описание продукта

Quantity long Количество продукта в целочисленном формате… Пример


12.01 ->1201

UnitPrice long Стоимость одной единицы продукта в целочисленном


формате… Пример 12.01 ->1201

UnitProduct string Тип единицы продукта

Amount Int Сумма к оплате, приведённая к целочисленному значению.


Пример: 12.01 => 1201.

MerchantCode string Код партнёра в рамках которого совершается платёж

SignVersion string Версия API подписания. На данный момент используется версия 0.5 ("v05")

MoneyType string Код инструмента оплаты из списка инструментов оплаты, устанавливаемый контрактом.

Запрос

Method POST

Host provided_api_host

Url /api/Payments

Content-Type application/json

стр. 14 / 25
Paynet Api.e-com

вер. 0.5 Ру / 08.05.2019

Header(Authorization) bearer provided_token_for_you

{
"Invoice": 20160622010101,
"Currency": 498,
"MerchantCode": "MerchantCode"
"Customer": {
"Code": "Customer Code",
"NameFirst": "payer first name",
"NameLast": "payer last name",
"PhoneNumber": "customer/payer phone number",
"email" : "customer/payer email",
"Country": "customer country",
"City": "customer city",
"Address": "Address description"
},
"ExpiryDate": "2016-01-01T00:00:00",
"Services": [{
"Name": "Service Name 1",
"Description": "Service Name Decription1",
"products": [{
"Amount" : 100,
"Barcode" : 13243546,
"Code" : "PRODUCT1",
"Description" : "description of PRODUCT1",
"GroupId" : "22",
"GroupName" : "a group name of this product",
"LineNo" : 1,
"Name" : "product 1",
"UnitPrice" : 100,
"UnitProduct" : 1
}],
"amount": 100
}],
"SignVersion":"v05",
"MoneyType":"PAYNET"
}

Ответ в формате JSON


{
"PaymentID": 45678901011,
"Invoice": 20160622010101,
"Customer": {
"Code": "Customer Code",
"Name": "payer full name",
"Address": "Address description",
"NameFirst": "payer first name",
"NameLast": "payer last name",
"PhoneNumber": "customer/payer phone number",
"email" : "customer/payer email",

стр. 15 / 25
Paynet Api.e-com

вер. 0.5 Ру / 08.05.2019

"Country": "customer country",


"City": "customer city"
},
"MerchantCode": "MerchantCode",
"Registered": "2016-01-01T00:00:00",
"Currency": 498,
"ExpiryDate": "2016-01-01T00:00:00",
"Services": [{
"Name": "Service Name 1",
"Description": "Service Name Decription1",
"products": [{
"Amount" : 100,
"Barcode" : 13243546,
"Code" : "PRODUCT1",
"Description" : "description of PRODUCT1",
"GroupId" : "22",
"GroupName" : "a group name of this product",
"LineNo" : 1,
"Name" : "product 1",
"UnitPrice" : 100,
"UnitProduct" : 1
}],
"amount": 100
}],
"Status": 1
}

Варианты кодов ошибок


HTTP Response Code Детальный Код Общее описание ошибки Действия
ошибки системы
Paynet

401- Unauthorized 3 Пользователь не обнаружен Предлагается ещё раз пройти


request аутентификацию и получить новый
3080
token

14 Неверный набор параметров либо Укажите соответствующие данные


400- Validation error
их значений
25

500- Paynet server 82 Ошибка полученная в процессе Методом Search попробуйте найти
error совершения операции Init платёж и проверить его состояние
2

11

73

201- Resource created 10 Платёжный документ Сервис- методом Search проверьте


зарегистрирован уже наличие зарегистрированного платежа
202

404- Resource was not 68 Килент не учавствует в программе Убедитесь что всё верно указано
found лояльности.

(Get) Получение информации о зарегистрированном платеже


Данный сервис метод предназначен для получения информации о платеже. Может использоваться в случае

стр. 16 / 25
Paynet Api.e-com

вер. 0.5 Ру / 08.05.2019

проблем связи на момент оплаты либо использовании информации об операции на стороне системы
партнёра.
Запрос
Method Get

Host provided_api_host

Url /api/Payments/id

Content-Type application/json

Header(Authorization) bearer provided_token_for_you

Ответ в формате JSON


{
"PaymentID": 45678901011,
"Invoice": 20160622010101,
"MerchantCode": "MerchantCode",
"Customer": {
"Code": "Customer Code",
"Address": "Address description",
"NameFirst": "payer first name",
"NameLast": "payer last name",
"PhoneNumber": "customer/payer phone number",
"email" : "customer/payer email",
"Country": "customer country",
"City": "customer city"
},
"Registered": "2016-01-01T00:00:00",
"Confirmed": "2016-01-01T00:00:00",
"Processed": "2016-01-01T00:00:00",
"Canceled": "2016-01-01T00:00:00",
"Currency": 498,
"ExpiryDate": "2016-01-01T00:00:00",
"Services": [{
"Name": "Service Name 1",
"Description": "Service Name Decription1",
"products": [{
"Amount" : 100,
"Barcode" : 13243546,
"Code" : "PRODUCT1",
"Description" : "description of PRODUCT1",
"GroupId" : "22",
"GroupName" : "a group name of this product",
"LineNo" : 1,
"Name" : "product 1",
"UnitPrice" : 100,
"UnitProduct" : 1
}]
"amount": 100
}],
"Status": 4
}

Варианты кодов ошибок


HTTP Response Code Детальный Код Общее описание ошибки Действия
ошибки

стр. 17 / 25
Paynet Api.e-com

вер. 0.5 Ру / 08.05.2019

системы Paynet

401- Unauthorized 3 Пользователь не обнаружен Предлагается ещё раз пройти аутентификацию и


request получить новый token
3080

14 Неверный набор параметров Укажите соответствующие данные


400- Validation error
либо их значений
25

500- Paynet server 82 Ошибка полученная в Попробуйте ещё раз вызвать данный метод
error процессе поиска
2

11

73

404- Resource was not 64 Ненайдена платёж Воспользуйтесь расширенным методом поиска
found Search.
Перепроверьте идентификатор платежа

стр. 18 / 25
Paynet Api.e-com

вер. 0.5 Ру / 08.05.2019

(Search) Поиск платежей по заданным критериям


Данный сервис-метод предназначен для поиска платежей по указанным критериям. Доступные критерии
указаны ниже. Может использоваться в случае проблем связи на момент регистрации либо использования
информации о платеже на стороне системы партнёра.
Запрос
Method GET

Host provided_api_host

Url /api/Payments?QueryString

Content-Type application/json

Header(Authorization) bearer provided_token_for_you

Критерии поиска :
Параметр Тип Описание

Invoice long идентификатор платежа на стороне внешней системы

from string Дата начала периода в котором был проведен платёж. Значение согласно стандарту ISO 8601

to string Дата окончания периода в котором был проведен платёж. Значение согласно стандарту ISO
8601

Ответ в формате JSON


[{
"PaymentID": 45678901011,
"Invoice": 20160622010101,
"MerchantCode": "MerchantCode",
"Customer": {
"Code": "Customer Code",
"Name": "Customer full name",
"Address": "Address description",
"NameFirst": "payer first name",
"NameLast": "payer last name",
"PhoneNumber": "customer/payer phone number",
"email" : "customer/payer email",
"Country": "customer country",
"City": "customer city"
},
"Registered": "2016-01-01T00:00:00",
"Confirmed": "2016-01-01T00:00:00",
"Processed": "2016-01-01T00:00:00",
"Canceled": "2016-01-01T00:00:00",
"Currency": 498,
"ExpiryDate": "2016-01-01T00:00:00",
"Services": [{
"Name": "Service Name 1",
"Description": "Service Name Decription1",
"products": [{
"Amount" : 100,
"Barcode" : 13243546,
"Code" : "PRODUCT1",
"Description" : "description of PRODUCT1",

стр. 19 / 25
Paynet Api.e-com

вер. 0.5 Ру / 08.05.2019

"GroupId" : "22",
"GroupName" : "a group name of this product",
"LineNo" : 1,
"Name" : "product 1",
"UnitPrice" : 100,
"UnitProduct" : 1
}]
"amount": 100
}],
"Status": 4
}]

Варианты кодов ошибок


HTTP Response Code Детальный Код Общее описание ошибки Действия
ошибки системы
Paynet

401- Unauthorized 3 Пользователь не обнаружен Предлагается ещё раз пройти аутентификацию


request и получить новый token
3080

14 Неверный набор параметров Укажите соответствующие данные


400- Validation error
либо их значений
25

500- Paynet server 82 Ошибка полученная в Попробуйте ещё раз вызвать данный сервис-
error процессе поиска метод
2

11

73

404- Resource was not 64 Ненайден ни один платёж Перепроверьте критерии поиска
found

стр. 20 / 25
Paynet Api.e-com

вер. 0.5 Ру / 08.05.2019

Нотификации системы Paynet


Paynet система способна извещать систему Партнёра о статусе платежа. Для этого следует передать адрес
сервиса системы Партнёра, куда будут отправляться нотификации.

Paynet система подписывает нотификацию секретным ключом, известным обоим системам.

Справочник полей нотификации


Поле Тип Описание

Eventid long Идентификатор нотификации

EventType string PAID

EventDate DateTime Дата нотификации. Значение согласно стандарту ISO 8601

Payment – информация оплатеже


ID long Идентификатор платежа системы Paynet

ExternalID long Идентификатор платежа системы партнёра

Merchant string Код партнёра в рамках которого совершается платёж

Customer string Идентификатор кошелька клиента

StatusDate DateTime Дата перевода в указанное состояние платежа. Значение


согласно стандарту ISO 8601

Amount long Сумма к оплате, приведённая к целочисленному значению.


Пример: 12.01 => 1201.

(Paid Notification) Нотификация системы Партнёра о завершённой


операции оплаты
Данный сервис-метод предназначен для отправки состояния платёжного документа в систему Партнёра. В
результате Партнёр получает общую информацию о платёжном документе с его статусом и может принять
решение предусмотренное системой Партнёра.
Данные о нотификации подписываются секретным ключом(SecretKey). Секретный ключ согласован между
системой Партнёра и системой Paynet. И не должен передаваться 3-ей стороне.
Нотификация будет отправлена после передачи информации Эмитентом об успешной оплате клиента . В
случае проблем связи, система Paynet в итоге попробует 3 раза обратиться к системе Партнёра и в случае
«неудачи» завершит попытки нотификации. Для получения информации о проведённых платежах
разработаны специальные сервис методы в сервисе Payments

Система Paynet считает что на стороне системы Партнёра самостоятельно выстраивается логика обработки
дублирующих нотификаций. Уникальным ключом считается иднентификатор платежа «Payment.ID»

стр. 21 / 25
Paynet Api.e-com

вер. 0.5 Ру / 08.05.2019

Справочник полей, участвующих в сервис-методе

Запрос

Method POST

Host provided_api_host

Url MerchantSystemUrl

Content-Type application/json

Header(Authorization) bearer provided_token_for_you

Header(Hash) HashValue

{
"Eventid": 20160622010101,
"EventType": "Paid",
"EventDate": "2016-01-01T00:00:00",
"Payment": {
"ID": 1234567,
"ExternalID": 7676766,
"Merchant": "123123",
"Customer": "37369XXX111",
"StatusDate": "2016-01-01T00:00:00",
"Amount": 123
}
}

Ответ
В качестве успешного ответа, система Paynet ожидает http статус равный 200. Что считается успешным. При
любом другом статусе система Paynet попробует до 3-х раз обратиться с нотификацией, в случае отсутствия
успеха завершит свои попытки отправлять данную нотификацию.
{
"Eventid": 20160622010101,
"EventType": "Paid",
"EventDate": "2016-01-01T00:00:00",
"Payment": {
"ID": 1234567,
"ExternalID": 7676766,
"Merchant": "123123",
"Customer": "37369XXX111",
"StatusDate": "2016-01-01T00:00:00",
"Amount": 123
}
“ResultCode”:”SUCCESS”,
“ResultMessage”:”Success Message”,
}

стр. 22 / 25
Paynet Api.e-com

вер. 0.5 Ру / 08.05.2019

Формирование подписи
Чтоб гарантировать целостность данных и проверить их подлинность решено защитить данные подписью.
Для формирования подписи выбран метод шифрования MD5 с последующим кодированием в Base64

signature = ToBase64String(MD5(PreparedString + secretKey))

Пример кода формирования подписи (C#)

var paramsDictionary = new SortedDictionary<string, string>();

paramsDictionary.Add("EVENTDATE", "????????????");
paramsDictionary.Add("EVENTID", "????????????");
paramsDictionary.Add("EVENTTYPE", "????????????");
paramsDictionary.Add("PAYMENT.AMOUNT", "???"); Целочисленное значение. В копейках 100 = 1 лей
paramsDictionary.Add("PAYMENT.CUSTOMER", "?????");
paramsDictionary.Add("PAYMENT.EXTERNALID", "????????????");
paramsDictionary.Add("PAYMENT.ID", "????????????");
paramsDictionary.Add("PAYMENT.MERCHANT", "????????????");
paramsDictionary.Add("PAYMENT.STATUSDATE", "????????????");

var signatureData = new StringBuilder();

foreach (string key in paramsDictionary.Keys)


{
signatureData.Append(paramsDictionary[key]);
}

string secretKey = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"; //Секретный ключ известный обеим


системам, но не передаваемый в открытом виде в процессе взаимодействия систем. И не передаётся
3-ей стороне

string message = signatureData + secretKey;


Byte[] bytes = Encoding.GetEncoding(1251).GetBytes(message);
Byte[] hash = new MD5CryptoServiceProvider().ComputeHash(bytes);

string signature = Convert.ToBase64String(hash);

стр. 23 / 25
Paynet Api.e-com

вер. 0.5 Ру / 08.05.2019

(SignNotification) Пример формирования строки к подписанию


данных о нотификации

Обект Нотификация:
{
"Eventid": 20160622010101,
"EventType": "Paid",
"EventDate": "2016-01-01T00:00:00",
"Payment": {
"ID": 1234567,
"ExternalID": 7676766,
"Merchant": "123123",
"Customer": "37369XXX111",
"StatusDate": "2016-01-01T00:00:00",
"Amount": 123
}
}

Строка к подписанию формируется следующим образом:

PreparedString = EventDate + Eventid + EventType + Payment.Amount


Payment.Amount + Payment.Customer +
Payment.ExternalID + Payment.ID + Payment.Merchant + Payment.StatusDate

(!)Последовательность строго определена. По принципу отсортированного справочника полей в алфавитном


(!)Последовательность
порятке.

(SignPayment)Пример подписания данных о платеже

Объект Payment
{
"ExternalID": 20160622010101,
"Currency": 498,
"Merchant": "MerchantCode",
"Customer": {
"Code": "CUSTOMERCODE",
"NameFirst": "payer first name",
"NameLast": "payer last name",
"PhoneNumber": "customer/payer phone number",
"email" : "payer@paynet.md",
"Country": "customer country",
"City": "customer city",
"Address": "Address description"
},
"ExpiryDate": "2016-01-01T00:00:00",
"Services": [{
"Name": "Service Name 1",
"Description": "Service Name Decription1"
"amount": 100,
"Products": [{
"Amount" : 100,

стр. 24 / 25
Paynet Api.e-com

вер. 0.5 Ру / 08.05.2019

"Barcode" : 13243546,
"Code" : "PRODUCT1",
"Description" : "description of PRODUCT1",
"GroupId" : "22",
"GroupName" : "a group name of this product",
"LineNo" : 1,
"Name" : "product 1",
"UnitPrice" : 100,
"UnitProduct" : 1
}]
}],
"MoneyType":"PAYNET"
}

Строка к подписанию формируется следующим образом:

PreparedString = Currency + Customer.Address + Customer.City +Customer.Code + Customer.Country +


Customer.email + Customer.NameFirst + Customer.NameLast + Customer.PhoneNumber+ ExpiryDate +
ExternalID + Merchant + MoneyType
foreach(var service in Services)
{
PreparedString = PreparedString + service.Amount + service.Name + service.Description
foreach(var product in Products)
{
PreparedString = PreparedString + product.Amount + product.Barcode + product.Code
+ product.Description + product.GroupId + product.GroupName
+ product.LineNo + product.Name + product.UnitPrice + product.UnitProduct
}
}

стр. 25 / 25