Выставление инвойса через WSDL

Сценарий:

  1. Авторизация
  2. Создание инвойса
  3. Проверка статуса операции

Доступ к функциям предоставляется посредством технологии веб-сервисов, что позволяет обращаться к данным функциям из программ, построенных на различных технологиях.

WSDL файл, который предоставляет описание всех используемых функций и структур, расположен по адресу:

Выставление счета в платежной системе Wooppay осуществляется выполнением методов веб-сервиса по SOAP протоколу. Все запросы должны быть в кодировке UTF-8.

1. Авторизация

Авторизация в системе выполняется командной core_login. В передаваемых параметрах необходимо указать логин с паролем от кошелька субъекта. Если авторизация на стороне сервера прошла успешно – в ответе на выполнение метода вернется информация о пользователе и ключ сессии (ключ сессии становится не действительным при повторной авторизации, либо в случае, когда некоторое время не совершается никаких действий), а параметр error_code должен иметь значение «0». Для дальнейшей работы с сервером необходимо после каждого последующего выполнения команд API передавать ключ сессии в заголовке HTTP запроса.

Cookie: session=<ключ сессии>

Входные параметры:

Параметр Тип Описание
username xsd:string Логин
password xsd:string Пароль

Возвращаемые параметры:

Параметр Тип Описание
session xsd:string Идентификатор сессии
id xsd:int Id пользователя
username xsd:string Имя пользователя
login xsd:string Логин
type xsd:int Тип пользователя
roles tns:stringArray Массив ролей пользователя
error_code xsd:int Если операция прошла успешно, имеет значение "0"

Пример запроса:

<soapenv:Envelope
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:urn="urn:XmlControllerwsdl">
    <soapenv:Header/>
    <soapenv:Body>
        <urn:core_login soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
            <coreLoginRequest xsi:type="urn:CoreLoginRequest" xs:type="type:CoreLoginRequest"
                xmlns:xs="http://www.w3.org/2000/XMLSchema-instance">
                <username xsi:type="xsd:string" xs:type="type:string">login</username>
                <password xsi:type="xsd:string" xs:type="type:string">password</password>
                <captcha xsi:type="xsd:string" xs:type="type:string"/>
            </coreLoginRequest>
        </urn:core_login>
    </soapenv:Body>
</soapenv:Envelope>

Пример ответа:

<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:ns1="urn:XmlControllerwsdl"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
    <SOAP-ENV:Body>
        <ns1:core_loginResponse>
            <return xsi:type="ns1:CoreLoginResponse">
                <response xsi:type="ns1:CoreLoginResponseData">
                    <session xsi:type="xsd:string">9e36ba0f5770b4b2a0a9fe51e79bb22c</session>
                    <id xsi:type="xsd:int">123456</id>
                    <username xsi:type="xsd:string">UserName</username>
                    <login xsi:type="xsd:string">login</login>
                    <type xsi:type="xsd:int">1234</type>
                    <roles SOAP-ENC:arrayType="xsd:string[3]" xsi:type="ns1:stringArray">
                        <item xsi:type="xsd:string">someRole</item>
                        <item xsi:type="xsd:string">someRole</item>
                    </roles>
                </response>
                <error_code xsi:type="xsd:int">0</error_code>
            </return>
        </ns1:core_loginResponse>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

2. Создание инвойса

Создание инвойса выполняется командой cash_createInvoice2Extended

Входные параметры:

Параметр Тип Описание
cardForbidden xsd:int Доступность оплаты с карты (0 - доступно, 1 - запрещено)
userEmail xsd:string Электронная почта клиента
userPhone xsd:string Номер телефона клиента
referenceId xsd:string Идентификатор инвойса в системе мерчанта. Должен быть уникальным для этого мерчанта
backUrl xsd:string Адрес, на который перенаправляется пользователь после оплаты
requestUrl xsd:string Адрес, на котором сервер мерчанта ждет уведомления об успешной оплате инвойса
addInfo xsd:string Дополнительная информация - необязательный параметр, в дальнейшем функционал поля расширили. Теперь в addInfo передается код подтверждения, указанный в СМС
amount xsd:float Сумма инвойса
deathDate xsd:string Дата, после которой инвойс считается устаревшим и оплата не принимается. Дата принимается в формате ГГГГ-ММ-ДД ЧЧ:ММ:СС
serviceType xsd:int В данном примере тип 9 - узбекский инвойс
description xsd:string Описание инвойса для пользователя
orderNumber xsd:int Идентификатор заказа (Не используется)

Возвращаемые параметры:

Параметр Тип Описание
operationId xsd:int Id операции
operationUrl xsd:string Адрес для оплаты

Пример запроса:

<soapenv:Envelope
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:urn="urn:XmlControllerwsdl">
    <soapenv:Header/>
    <soapenv:Body>
        <urn:cash_createInvoice2Extended soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
            <cashCreateInvoiceExtended2Request xsi:type="urn:CashCreateInvoiceExtended2Request" xs:type="type:CashCreateInvoiceExtended2Request"
                xmlns:xs="http://www.w3.org/2000/XMLSchema-instance">
                <cardForbidden xsi:type="xsd:int" xs:type="type:int">0</cardForbidden>
                <userEmail xsi:type="xsd:string" xs:type="type:string">test@example.com</userEmail>
                <userPhone xsi:type="xsd:string" xs:type="type:string">998901234567</userPhone>
                <referenceId xsi:type="xsd:string" xs:type="type:string">32135136</referenceId>
                <backUrl xsi:type="xsd:string" xs:type="type:string">https://www.test.wooppay.com/</backUrl>
                <requestUrl xsi:type="xsd:string" xs:type="type:string">https://www.test.wooppay.com/</requestUrl>
                <addInfo xsi:type="xsd:string" xs:type="type:string"/>
                <amount xsi:type="xsd:float" xs:type="type:float">500</amount>
                <deathDate xsi:type="xsd:string" xs:type="type:string"/>
                <serviceType xsi:type="xsd:int" xs:type="type:int">9</serviceType>
                <description xsi:type="xsd:string" xs:type="type:string">Description</description>
                <orderNumber xsi:type="xsd:int" xs:type="type:int"/>
            </cashCreateInvoiceExtended2Request>
        </urn:cash_createInvoice2Extended>
    </soapenv:Body>
</soapenv:Envelope>

Пример ответа:

<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:ns1="urn:XmlControllerwsdl"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
    <SOAP-ENV:Body>
        <ns1:cash_createInvoice2ExtendedResponse>
            <return xsi:type="ns1:CashCreateInvoiceResponse">
                <response xsi:type="ns1:CashCreateInvoiceResponseData">
                    <operationId xsi:type="xsd:int">12312312</operationId>
                    <operationUrl xsi:type="xsd:string">https://invoice.test.wooppay.com/?id=132460&amp;key=03677bdba79ceb93fc2f3152820f8a16</operationUrl>
                </response>
                <error_code xsi:type="xsd:int">0</error_code>
            </return>
        </ns1:cash_createInvoice2ExtendedResponse>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

После выставления счёта будет выполняться GET запрос (по умолчанию) на адрес, указанный в параметре requestUrl до тех пор, пока не будет возвращена строка JSON формата {"data":1}. В случае отличного ответа от {"data":1}, запросы будут отправляться повторно - 100 запросов, 1 запрос в 5 минут. Если необходимо передать запрос, отличный от GET, следует передавать строку JSON формата с параметрами url и type, где url - адрес, на котором сервер мерчанта ждет уведомления об успешной оплате инвойса, type - тип запроса.

Пример:

<requestUrl xsi:type="xsd:string">{"url":"https:\/\/www.test.com\/test.php","type":"POST"}</requestUrl>

После получения уведомления по requestUrl в системе мерчанта желательно запросить статус операции методом cash_getOperationData. Если статус имеет значение «4», то операция успешно проведена.

3. Проверка статуса операции

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

Входные параметры:

Параметр Тип Описание
operationId xsd:int Id операции

Возвращаемые параметры:

Параметр Тип Описание
id xsd:int Id операции
type xsd:int Тип операции
lotId xsd:int Id лота, если операция связана с приобретением лота; иначе имеет значение 0
sum xsd:float Сумма
fee xsd:float Комиссия
date xsd:string Дата проведения
status xsd:int Статус операции
comment xsd:string Комментарий
fromSubject xsd:string Логин отправителя
toSubject xsd:string Логин получателя
fromFullName xsd:string Имя отправителя
toFullName xsd:string Имя получателя

Пример операции со статусом 4 - Проведена

Пример запроса:

<soapenv:Envelope
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:urn="urn:XmlControllerwsdl">
    <soapenv:Header/>
    <soapenv:Body>
        <urn:cash_getOperationData soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
            <cashGetOperationDataRequest xsi:type="urn:CashGetOperationDataRequest">
                <operationId xsi:type="xsd:int">50338338</operationId>
            </cashGetOperationDataRequest>
        </urn:cash_getOperationData>
    </soapenv:Body>
</soapenv:Envelope>

Пример ответа:

<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:ns1="urn:XmlControllerwsdl"
    xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <SOAP-ENV:Body>
        <ns1:cash_getOperationDataResponse>
            <return xsi:type="ns1:CashGetOperationDataResponse">
                <response xsi:type="ns1:CashGetOperationDataResponseData">
                    <records SOAP-ENC:arrayType="ns1:CashGetOperationDataResponseDataRecord[1]" xsi:type="ns1:CashGetOperationDataResponseDataRecordArray">
                        <item xsi:type="ns1:CashGetOperationDataResponseDataRecord">
                            <id xsi:type="xsd:int">50338338</id>
                            <type xsi:type="xsd:int">2</type>
                            <lotId xsi:type="xsd:int">0</lotId>
                            <sum xsi:type="xsd:float">500</sum>
                            <fee xsi:type="xsd:float">0</fee>
                            <date xsi:type="xsd:string">2019-05-15 10:40:11</date>
                            <status xsi:type="xsd:int">4</status>
                            <comment xsi:type="xsd:string">nothing</comment>
                            <fromSubject xsi:type="xsd:string">Z998901234567</fromSubject>
                            <toSubject xsi:type="xsd:string">eventum</toSubject>
                            <fromFullName xsi:type="xsd:string">Z998901234567</fromFullName>
                            <toFullName xsi:type="xsd:string">eventum</toFullName>
                        </item>
                    </records>
                </response>
                <error_code xsi:type="xsd:int">0</error_code>
            </return>
        </ns1:cash_getOperationDataResponse>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Пример ответа операции со статусом 1 - Новая операция

<SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:ns1="urn:XmlControllerwsdl"
    xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <SOAP-ENV:Body>
        <ns1:cash_getOperationDataResponse>
            <return xsi:type="ns1:CashGetOperationDataResponse">
                <response xsi:type="ns1:CashGetOperationDataResponseData">
                    <records SOAP-ENC:arrayType="ns1:CashGetOperationDataResponseDataRecord[1]" xsi:type="ns1:CashGetOperationDataResponseDataRecordArray">
                        <item xsi:type="ns1:CashGetOperationDataResponseDataRecord">
                            <id xsi:type="xsd:int">50703316</id>
                            <type xsi:type="xsd:int">2</type>
                            <lotId xsi:type="xsd:int">0</lotId>
                            <sum xsi:type="xsd:float">501</sum>
                            <fee xsi:type="xsd:float">0</fee>
                            <date xsi:type="xsd:string">2019-12-04 03:46:02</date>
                            <status xsi:type="xsd:int">1</status>
                            <comment xsi:type="xsd:string">Payment</comment>
                            <fromSubject xsi:type="xsd:string">invoice_user</fromSubject>
                            <toSubject xsi:type="xsd:string">eventum</toSubject>
                            <fromFullName xsi:type="xsd:string">invoice_user</fromFullName>
                            <toFullName xsi:type="xsd:string">eventum</toFullName>
                        </item>
                    </records>
                </response>
                <error_code xsi:type="xsd:int">0</error_code>
            </return>
        </ns1:cash_getOperationDataResponse>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Возможные статусы операций
Статус Описание
1 Новая
2 На рассмотрении
4 Проведена
7 Отменена
9 Ожидает проведения
10 Удалена
Возможные типы ошибок
Код ошибки Описание
1 Неверный формат пакета
2 Неизвестная команда
3 Ошибка на стороне сервера
4 Доступ запрещен
5 Необходимо войти в систему
7 Переданы некорректные параметры
8 Превышен лимит запросов
11 Не удалось подтвердить операцию
12 Перевод не удался
13 Не удалось отменить операцию
14 Не удалось произвести возврат платежа
101 Неверные данные при входе в систему
102 Недостаточно средств на счету
103 Пользователь не найден
109 Не удалось отправить запрос на перевод
111 Не удалось выставить счёт
112 БД недоступна
113 Ошибка на стороне БД
160 Не удалось получить ссылку для проверки возможности платежа
161 Не удалось получить ссылку для платежа
162 Не удалось получить метод запроса к мерчанту
163 Не удалось получить метод ответа от мерчанта
164 Не удалось произвести проверку возможности платежа
165 Не удалось провести платёж
168 Неизвестный тип взаимодействия с мерчантом
176 У мерчанта не задан тип запроса к нему
177 У мерчанта не задан тип ответа от него
187 Не удалось подтвердить запрос платежа
213 Нет такого сервиса в базе
215 Нулевая сумма операции
216 Перевод самому себе
308 IP пользователя заблокирован
402 Неизвестный тип пакета
403 Разбор пакета не удался
408 Неизвестная денежная операция
410 Некорректная структура пакета
411 Пустое обязательное поле
413 Неверный формат номера
415 Операция по выводу средств уже была проведена
419 Неизвестный тип платежа/перевода
420 Передано отрицательное число
801 Неклассифицированная ошибка
802 Не найден счёт/аккаунт/etc
803 В биллинг передан некорректный параметр
804 Не удалось найти поля биллинга, соответствующие переданным параметрам
805 Не прошла проверка аккаунта на стороне мерчанта
806 Указан неактивный аккаунт
807 Платёж запрещён
808 Платёж не окончен
809 Технические проблемы на стороне мерчанта
810 Мерчант временно недоступен
811 Слишком маленькая сумма платежа
812 Слишком большая сумма платежа
417 Данная операция отменена пользователем