Последнее обновление: 23-11-2022
Общие сведения
API предназначен для проведения идентификации физических лиц. Подробности см. на explain.qiwi.com.
Используемые в тексте термины описаны в этой статье.
Доступ к API
Для успешного вызова методов API необходимы:
- Корректные заголовки
Accept
иContent-Type
. API поддерживает только один MIME-тип:application/json
. Любое другое значение приведет к ошибке формата данных. - URL, составленный согласно требованиям к нужному запросу.
- Bearer-токен, выданный вам для доступа к API.
Авторизация
Авторизация должна передаваться во всех запросах в заголовке Authorization
:
Authorization: Bearer {token}
Для получения токенов обращайтесь к своему контактному менеджеру.
Шифрование запросов с персональными данными
Для запросов, в которых передаются персональные данные, нужно использовать HTTPS-протокол со специально настроенным шифрованием в соответствии с ГОСТ Р 34.10-2012 и 34.11-2012. Такие запросы нужно отправлять на соответствующие URL-адреса.
Формирование URL запроса
URL-адрес любого запроса к API складывается из двух компонент: server URL
и путь конкретного запроса.
Значения server URL
перечислены далее. Эндпоинты запросов указаны в их описании.
Запросы, в которых передаются персональные данные
К ним относятся запросы разделов Упрощенная онлайн-идентификация и Получение персональных данных клиента.
Адреса server URL
:
-
В тестовой среде:
https://api-gost-test.qiwi.com/partner/openapi-identification
-
В производственной среде:
https://api-gost.qiwi.com/partner/openapi-identification
Запросы, в которых не передаются персональные данные
Адреса server URL
:
-
В тестовой среде:
https://api-test.qiwi.com/partner/openapi-identification
-
В производственной среде:
https://api.qiwi.com/partner/openapi-identification
Упрощенная онлайн-идентификация
Процесс упрощённой идентификации описан на explain.qiwi.com.
Создание заявки
Запрос → POST
-
URL /v1/products/{productId}/persons/{personId}/simplified-identification/applications
- productId — ID продукта
- personId — ID клиента
Атрибуты тела запроса
Создание заявки (тело запроса)
{
"firstName" : "Имя",
"lastName" : "Фамилия",
"middleName" : "Отчество",
"birthDate" : "11.01.1996",
"citizenshipCountryId" : "RU",
"contacts" : {
"mobilePhoneNumber" : "+79271234567",
"email" : "email@email.com"
},
"identifyingDocument" : {
"type" : "RUSSIAN_INNER_PASSPORT",
"series" : "9208",
"number" : "556900"
},
"secondaryDocuments" : [ {
"type" : "INN",
"number" : "33701000015"
} ],
"clientDeviceFingerprint" : {
"IPv4" : "10.12.11.290"
}
}
Имя | Тип | Описание |
---|---|---|
birthDate | String | Дата рождения. Формат: ДД.ММ.ГГГГ . Допустимый диапазон: от 14 до 100 лет включительно |
citizenshipCountryId | String | Гражданство. Всегда значение RU |
clientDeviceFingerprint | object | Сведения о клиентском устройстве, с которого поступил запрос |
clientDeviceFingerprint.IPv4 | String | IP-адрес клиентского устройства, с которого поступил запрос |
contacts | object | Контактные данные клиента |
contacts.email | String | |
contacts.mobilePhoneNumber | String | Номер мобильного телефона в международном формате |
firstName | String | Имя. Минимум две буквы, допустимо использование тире |
lastName | String | Фамилия. Минимум две буквы, допустимо использование тире |
middleName | String | Отчество. Минимум две буквы, допустимо использование тире |
identifyingDocument | object | Сведения о документе, удостоверяющем личность |
identifyingDocument.type | String | Тип документа. Всегда значение RUSSIAN_INNER_PASSPORT |
identifyingDocument.number | String | Номер документа. Формат: 6 цифр |
identifyingDocument.series | String | Серия документа. Формат: 4 цифры |
secondaryDocuments | array | Дополнительные документы. В массиве можно передавать объекты ИНН или СНИЛС |
Атрибуты ответа
Ответ на создание заявки
{
"firstName" : "Имя",
"lastName" : "Фамилия",
"middleName" : "Отчество",
"birthDate" : "11.01.1996",
"citizenshipCountryId" : "RU",
"contacts" : {
"mobilePhoneNumber" : "+79271234567",
"email" : "email@email.com"
},
"identifyingDocument" : {
"type" : "RUSSIAN_INNER_PASSPORT",
"series" : "9208",
"number" : "556900"
},
"secondaryDocuments": [
{
"type" : "INN",
"number" : "500100732259"
}
],
"id" : "1234ABCD4321",
"creationDateTime" : "2019-01-11T17:16:05.743+03:00",
"applicationStatus" : "IN_PROGRESS",
"identificationLevel" : "NOT_VERIFIED",
"productId" : "111222",
"personId" : "1"
}
Имя | Тип | Описание |
---|---|---|
applicationStatus | String | Статус (состояние) заявки. Возможные значения |
birthDate | String | Дата рождения. Формат см. в описании запроса |
citizenshipCountryId | String | Гражданство. ID из справочника стран |
contacts | object | Контактные данные клиента |
contacts.email | String | |
contacts.mobilePhoneNumber | String | Номер мобильного телефона |
creationDateTime | String | Дата создания заявки |
firstName | String | Имя |
lastName | String | Фамилия |
middleName | String | Отчество |
id | String | ID заявки |
identificationLevel | String | Текущий уровень идентификации. Возможные значения |
identificationLevelReasonCode | String | Код причины полученного уровня идентификации |
identifyingDocument | object | Сведения о документе, удостоверяющем личность |
identifyingDocument.number | String | Номер документа |
identifyingDocument.series | String | Серия документа |
identifyingDocument.type | String | Тип документа |
personId | String | ID клиента |
productId | String | ID продукта |
secondaryDocuments | array | Массив дополнительных документов |
Получение статуса заявки
Запрос → GET
-
URL /v1/products/{productId}/persons/{personId}/simplified-identification/applications/{applicationId}
- productId — ID продукта
- personId — ID клиента
- applicationId — ID заявки
Структура тела ответа идентична структуре ответа на запрос «Создание заявки».
Получение статуса всех заявок
Запрос → GET
-
URL /v1/products/{productId}/persons/{personId}/simplified-identification/applications
- productId — ID продукта
- personId — ID клиента
Тело ответа — json-массив объектов-заявок. Структура каждого объекта-заявки идентична структуре ответа на запрос «Создание заявки».
Полная идентификация
Процесс полной идентификации описан на explain.qiwi.com.
Поиск заявок на идентификацию
Запрос → GET
-
URL /v1/full-identification/applications/search?parameter=value
- productId — ID продукта
- flowType — тип заявки (всегда
AGENT_FILLED_ONLY_FULL_IDENTIFICATION
) - mobilePhoneNumber — номер мобильного телефона в международном формате
- applicationStatus — статус (состояние) заявки, необязательный параметр
Атрибуты объекта-заявки
Запрос поиска
GET /v1/full-identification/applications/search?
productId=agent-ident&flowType=AGENT_FILLED_ONLY_FULL_IDENTIFICATION&mobilePhoneNumber=%2B79071234567 HTTP/1.1
Accept: application/json
Authorization: Bearer YUu2qw048gtdsvlk3iu
Host: <server URL>
В ответе возвращается json-массив объектов-заявок.
Объект-заявка
{
"id" : "A171EB8417CE11E99124DD04D7207C6E",
"creationDateTime" : "2019-01-13T11:29:44.943+03:00",
"applicationStatus" : "AWAITING_PASSPORT_CONFIRMATION",
"identificationLevel" : "NOT_VERIFIED",
"maximumPossibleIdentificationLevel" : "FULL",
"productId" : "111222",
"identificationDataSource" : {
"identificationAgentName" : "Евросеть",
"identificationEndpoint" : {
"fullAddress" : "г. Москва, ул. Гранатная, 1, оф. 2"
}
},
"firstName" : "И***",
"lastName" : "Ф***",
"middleName" : "О***",
"citizenshipCountryId" : "RU",
"contacts" : {
"mobilePhoneNumber" : "+79271234567",
"email" : null
}
}
Имя | Тип | Описание |
---|---|---|
applicationStatus | String | Статус (состояние) заявки. Возможные значения |
citizenshipCountryId | String | Гражданство. ID из справочника стран |
contacts | object | Контактные данные клиента |
contacts.email | String | |
contacts.mobilePhoneNumber | String | Номер мобильного телефона в международном формате |
creationDateTime | String | Дата создания заявки |
id | String | ID заявки |
identificationLevel | String | Текущий уровень идентификации. Возможные значения |
firstName | String | Имя |
lastName | String | Фамилия |
middleName | String | Отчество |
maximumPossibleIdentificationLevel | String | Максимально допустимый уровень идентификации. Возможные значения |
personId | String | ID клиента |
productId | String | ID продукта |
identificationDataSource | object | Источник идентификационных данных |
identificationDataSource. identificationAgentName |
String | Название агента идентификации |
identificationDataSource. identificationEndpoint |
object | Точка идентификации |
identificationDataSource. identificationEndpoint.fullAddress |
String | Адрес точки идентификации, в которой клиент оставил заявку |
Создание сессии подтверждения SIM-карты
Запрос инициирует отправку SMS-сообщения с OTP (One Time Password, одноразовый пароль) клиенту на указанный номер телефона.
Запрос → PUT
-
URL /v1/products/{productId}/full-identification/applications/{applicationId}/sim-confirmation/{confirmationSessionId}
- productId — ID продукта
- applicationId — ID заявки
- confirmationSessionId — клиентский ID подтверждения
Атрибуты тела запроса
Тело запроса
{
"personId" : "1",
"mobilePhoneNumber" : "+79271234567",
"clientDeviceFingerprint" : {
"IPv4" : "10.12.11.290"
}
}
Имя | Тип | Описание |
---|---|---|
clientDeviceFingerprint | object | Сведения о клиентском устройстве, с которого поступил запрос |
clientDeviceFingerprint.IPv4 | String | IP-адрес клиентского устройства, с которого поступил запрос |
mobilePhoneNumber | String | Номер мобильного телефона в международном формате |
personId | String | ID клиента |
Атрибуты ответа
Тело ответа
{
"resendDelay" : "PT3M",
"resendAttemptsLeft" : 3
}
Имя | Тип | Описание |
---|---|---|
resendAttemptsLeft | integer | Количество оставшихся попыток повторного запроса OTP |
resendDelay | String | Интервал времени, через который можно повторно запросить OTP |
Повторная отправка SMS-сообщения с OTP
Запрос → POST
-
URL /v1/products/{productId}/full-identification/applications/{applicationId}/sim-confirmation/{confirmationSessionId}/resend-otp
- productId — ID продукта
- applicationId — ID заявки
- confirmationSessionId — клиентский ID подтверждения
Атрибуты тела запроса
Тело запроса повторной высылки SMS
{
"personId" : "1",
"clientDeviceFingerprint" : {
"IPv4" : "10.12.11.290"
}
}
Имя | Тип | Описание |
---|---|---|
clientDeviceFingerprint | object | Сведения о клиентском устройстве, с которого поступил запрос |
clientDeviceFingerprint.IPv4 | String | IP-адрес клиентского устройства, с которого поступил запрос |
personId | String | ID клиента |
Атрибуты ответа
Тело ответа
{
"resendDelay" : "PT3M",
"resendAttemptsLeft" : 3
}
Имя | Тип | Описание |
---|---|---|
resendAttemptsLeft | integer | Количество оставшихся попыток повторного запроса OTP |
resendDelay | String | Интервал времени, через который можно повторно запросить OTP |
Подтверждение SIM-карты с OTP
Запрос → PUT
-
URL /v1/products/{productId}/full-identification/applications/{applicationId}/sim-confirmation/{confirmationSessionId}/confirm-otp
- productId — ID продукта
- applicationId — ID заявки
- confirmationSessionId — клиентский ID подтверждения
Атрибуты тела запроса
Тело запроса подтверждения SIM-карты
{
"personId" : "1",
"confirmationCode" : "233210",
"clientDeviceFingerprint" : {
"IPv4" : "10.12.11.290"
}
}
Имя | Тип | Описание |
---|---|---|
clientDeviceFingerprint | object | Сведения о клиентском устройстве, с которого поступил запрос |
clientDeviceFingerprint.IPv4 | String | IP-адрес клиентского устройства, с которого поступил запрос |
confirmationCode | String | OTP (One Time Password, одноразовый пароль) |
personId | String | ID клиента |
Атрибуты ответа
Тело ответа
{
"applicationStatus" : "AWAITING_PASSPORT_CONFIRMATION"
}
Имя | Тип | Описание |
---|---|---|
applicationStatus | String | Статус (состояние) заявки. Возможные значения |
Подтверждение заявки по 4 знакам документа
Запрос → PUT
-
URL /v1/products/{productId}/full-identification/applications/{applicationId}/passport-confirmation
- productId — ID продукта
- applicationId — ID заявки
Атрибуты тела запроса
Тело запроса подтверждения заявки
{
"personId" : "1",
"passportNumberLast4Characters" : "4300",
"clientDeviceFingerprint" : {
"IPv4" : "10.12.11.290"
}
}
Имя | Тип | Описание |
---|---|---|
clientDeviceFingerprint | object | Сведения о клиентском устройстве, с которого поступил запрос |
clientDeviceFingerprint.IPv4 | String | IP-адрес клиентского устройства, с которого поступил запрос |
passportNumberLast4Characters | String | Последние 4 знака номера документа, удостоверяющего личность |
personId | String | ID клиента |
Атрибуты ответа
Тело ответа
{
"applicationStatus" : "IN_PROGRESS"
}
Имя | Тип | Описание |
---|---|---|
applicationStatus | String | Статус (состояние) заявки. Возможные значения |
Получение персональных данных клиента
По умолчанию персональные данные будут маскированными. Если по какой-то причине вам нужны немаскированные данные, обращайтесь к вашему контактному менеджеру.
Запрос → GET
-
URL /v1/products/{productId}/persons/{personId}/personal-data
- productId — ID продукта
- personId — ID клиента
Ответ
[
{
"productId": "1",
"personId": "8",
"productIdentificationLevel": "SIMPLIFIED",
"bankAlias": "QIWI_BANK",
"firstName": "и***",
"lastName": "и***",
"middleName": "и***",
"citizenshipCountryId": "RU",
"contacts": {
"mobilePhoneNumber": "+7***",
"email": null
},
"identifyingDocument": {
"type": "RUSSIAN_INNER_PASSPORT",
"series": "3***",
"number": "1***"
}
}
]
JSON-массив объектов с персональными данными.
Атрибуты объекта:
Имя | Тип | Описание |
---|---|---|
productId | String | ID продукта |
personId | String | ID клиента |
productIdentificationLevel | String | Текущий уровень идентификации у партнера. Возможные значения |
productIdentificationLevelReason | String | Код причины полученного уровня идентификации |
bankAlias | String | Акроним системы, в которой клиент получил идентификацию |
firstName | String | Имя |
lastName | String | Фамилия |
middleName | String | Отчество |
birthDate | String | Дата рождения клиента (в формате ГГГГ-ММ-ДД ) |
birthPlace | String | Место рождения клиента |
contacts | object | Контактные данные клиента |
contacts.email | String | |
contacts.mobilePhoneNumber | String | Номер мобильного телефона в международном формате |
citizenshipCountryId | String | Гражданство. ID из справочника стран |
identifyingDocument | object | Информация о документе, удостоверяющем личность |
identifyingDocument.number | String | Номер документа. Формат: 6 цифр |
identifyingDocument.series | String | Серия документа. Только для граждан РФ. Формат: 4 цифры |
identifyingDocument.issueDate | String | Дата выдачи документа (в формате ДД.ММ.ГГГГ ) |
identifyingDocument.issuingAuthorityCode | String | Код подразделения, выдавшего документ |
identifyingDocument.issuingAuthorityName | String | Название подразделения, выдавшего документ |
identifyingDocument.expiryDate | String | Срок действия документа (в формате ДД.ММ.ГГГГ ) |
identifyingDocument.type | String | Тип документа. Возможные значения |
identifyingDocument. otherDocumentTypeName |
String | Название документа, если выбран тип документа OTHER |
isPassportExpired | Bool | Признак просроченного паспорта (если true ) |
isClientActive | Bool | Признак активности клиента: true — клиент активен; false — клиент неактивен |
registrationType | String | Тип регистрации: PERMANENT — постоянная, TEMPORARY — временная |
registrationAddress | object | Сведения об адресе регистрации |
registrationAddress.countryId | String | ID из справочника стран |
registrationAddress.zipCode | String | Почтовый индекс |
registrationAddress.okatoRegionCode | String | Код субъекта РФ по ОКАТО. Значение из справочника регионов |
registrationAddress.district | String | Район |
registrationAddress.cityType | String | Тип населенного пункта |
registrationAddress.city | String | Наименование населенного пункта |
registrationAddress.street | String | Улица |
registrationAddress.house | String | Номер дома (владения) |
registrationAddress.building | String | Номер корпуса (строения) |
registrationAddress.flat | String | Номер квартиры (офиса) |
livingAddressIsIdenticalToRegistrationAddress | Bool | Признак того, что адрес проживания совпадает с адресом регистрации |
livingAddress | object | Сведения об адресе фактического проживания. Структура объекта совпадает с registrationAddress |
secondaryDocuments | array | Массив дополнительных документов |
hasInterestOwner | Bool | Признак выгодоприобретателя |
hasBeneficialOwner | Bool | Признак того, что лицо является бенефициарным владельцем |
publicOfficial | Bool | Признак публичного должностного лица |
publicOfficialType | String | Тип публичного должностного лица: RUSSIAN — российское, FOREIGN — иностранное, INTERNATIONAL — международное |
publicOfficialPost | String | Занимаемая должность публичного должностного лица |
financialPosition | String | Сведения о финансовом положении: GOOD — хорошее, SUFFICIENT — удовлетворительное, BAD — плохое |
businessReputation | String | Сведения о деловой репутации: GOOD — положительная, BAD — негативная |
fundingSources | String | Сведения об источниках происхождения денежных средств и (или) иного имущества клиента: OWN_FUNDS — собственные средства, BORROWED_FUNDS — заемные средства, OTHER — иное |
Деактивация клиента
Деактивация клиента переводит активного клиента из статуса «Активный» в «Неактивный». Физического удаления записи не происходит.
Запрос → POST
-
URL /v1/products/{productId}/persons/{personId}/deactivate
- productId — ID продукта
- personId — ID клиента
Атрибуты тела запроса
Тело запроса
{
"deactivationDateTime": "2018-09-24T10:00:00+03:00",
"deactivationReason": "Здесь причина деактивации клиента"
}
Имя | Тип | Описание |
---|---|---|
deactivationDateTime | String | Дата/время деактивации клиента (по стандарту ISO 8601) |
deactivationReason | String | Причина деактивации клиента |
Тело ответа отсутствует.
В случае успешного выполнения возвращается код ответа сервера 204
. При повторной деактивации уже неактивного клиента возвращается код ответа сервера 400
.
Дополнительные документы
ИНН
Атрибуты
ИНН
{
"type" : "INN",
"number" : "500100732259"
}
Имя | Тип | Описание |
---|---|---|
number | String | ИНН |
type | String | Тип документа. Передавать значение INN |
СНИЛС
Атрибуты
СНИЛС
{
"type" : "SNILS",
"number" : "112-233-445 95"
}
Имя | Тип | Описание |
---|---|---|
number | String | СНИЛС |
type | String | Тип документа. Передавать значение SNILS |
Разрешение на проживание
Атрибуты
Разрешение на проживание
{
"type" : "RESIDENCE_PERMIT",
"residencePermitType" : "VISA",
"number" : "N4321",
"dateFrom" : "11.09.2015",
"dateTo" : "11.09.2021",
"issuingAuthorityName" : "МИД РФ"
}
Имя | Тип | Описание |
---|---|---|
dateFrom | String | Дата выдачи |
dateTo | String | Дата окончания действия документа |
issuingAuthorityName | String | Орган, выдавший документ, подтверждающий право на пребывание в РФ |
number | String | Номер документа |
residencePermitType | String | Вид разрешения на пребывание. Значения: VISA , PERMANENT_RESIDENCE_PERMIT , TEMPORARY_RESIDENCE_PERMIT |
type | String | Тип документа. Передавать значение RESIDENCE_PERMIT |
Миграционная карта
Атрибуты
Миграционная карта
{
"type" : "MIGRATION_CARD",
"serial" : "4321",
"number" : "43211234",
"dateFrom" : "11.09.2015",
"dateTo" : "11.09.2021"
}
Имя | Тип | Описание |
---|---|---|
dateFrom | String | Дата начала срока пребывания |
dateTo | String | Дата окончания срока пребывания |
number | String | Номер |
serial | String | Серия |
type | String | Тип документа. Передавать значение MIGRATION_CARD |
Патент на работу
Атрибуты
Патент на работу
{
"type" : "WORKING_PATENT",
"series" : "77",
"number" : "8843211234",
"issuingAuthorityName" : "ФМС",
"issueDate" : "11.09.2015",
"documentSeries" : "РА",
"documentNumber" : "4000123"
}
Имя | Тип | Описание |
---|---|---|
documentNumber | String | Номер бланка документа |
documentSeries | String | Серия бланка документа |
issueDate | String | Дата выдачи |
issuingAuthorityName | String | Орган, выдавший патент |
number | String | Номер |
series | String | Серия |
type | String | Тип документа. Передавать значение WORKING_PATENT |
Справочники
Справочник стран (гражданств)
Запрос → GET
-
URL /dictionary/v1/countries
Справочник стран (фрагмент)
[
{
"id": "AF",
"name": "АФГАНИСТАН"
},
{
"id": "AL",
"name": "АЛБАНИЯ"
}
]
В ответе приходит json-массив со списком стран.
Имя | Тип | Описание |
---|---|---|
id | String | ID страны |
name | String | Название страны |
Справочник регионов России
Запрос → GET
-
URL /dictionary/v1/russian-regions
В ответе приходит json-массив со списком регионов РФ.
Справочник регионов России (фрагмент)
[
{
"okatoRegionCode": "79",
"name": "Республика Адыгея"
},
{
"okatoRegionCode": "84",
"name": "Республика Алтай"
}
]
Имя | Тип | Описание |
---|---|---|
name | String | Название региона |
okatoRegionCode | String | Код субъекта РФ по ОКАТО |
HTTP-статусы и формат ответов
Код | Описание | Тело ответа |
---|---|---|
200 | OK (запрос успешно выполнен) | Тело успешного ответа |
201 | Created (запрос успешно выполнен, ресурс создан) | Тело успешного ответа |
204 | No Content (запрос успешно выполнен) | Тело ответа отсутствует |
400 | Bad Request (некорректный запрос) | Стандартный json ошибки |
401 | Unauthorized (в запросе отсутствует корректная авторизация) | Пустое тело, либо стандартный json ошибки |
403 | Forbidden (операция запрещена) | Стандартный json ошибки |
404 | Not Found (ресурс не найден) | Пустое тело, либо стандартный json ошибки |
422 | Unprocessable Entity (ошибка валидации запроса) | Стандартный json ошибки |
423 | Locked (временно заблокирован) | Стандартный json ошибки |
500 | Internal Server Error (внутренняя ошибка сервера) | Пустое тело, либо стандартный json ошибки |
Атрибуты описания ошибки
Стандартный json ошибки
{
"serviceName": "openapi-identification",
"errorCode": "internal.error",
"description": "Undefined error. Please try to make operation later.",
"userMessage": "Undefined error. Please try to make operation later.",
"dateTime": "2018-09-03T18:41:27.016+03:00",
"traceId": "4a3c694ca580a5e0"
}
Имя | Тип | Описание |
---|---|---|
serviceName | String | Название сервиса, возвратившего ошибку |
errorCode | String | Код ошибки (см. далее) |
description | String | Описание ошибки |
userMessage | String | Пользовательское описание ошибки |
dateTime | String | Дата и время формирование ответа |
traceId | String | Параметр, необходимый для анализа логов. Его значение также всегда присутствует в заголовке ответа X-B3-TraceId |
При возвращении ошибки валидации запроса в JSON-объекте может присутствовать объект cause
. В объекте дополнительно описывается, какие ошибки и для каких полей были допущены.
Ошибка с полем cause
{
"serviceName": "openapi-identification",
"errorCode": "validation.error",
"description": "Данные некорректны",
"userMessage": "Данные некорректны",
"dateTime": "2018-09-05T13:55:57.897+03:00",
"traceId": "c8d2b66274672789",
"cause": {
"birthDate": [
"may not be null"
]
}
}
Возможные коды ошибок (атрибут errorCode
):
Код | Описание |
---|---|
internal.error | Внутренняя ошибка сервиса |
http.message.conversion.failed | Ошибка десериализации сообщения |
validation.error | Ошибка валидации (некорректное тело запроса) |
forbidden.operation | Операция запрещена |
data.not.found | Данные не найдены |
inapplicable.operation | Операция не применима для сущности в ее текущем состоянии |
secondary.document.invalid | Некорректный второй документ |
application.in.progress.already.exists | В данный момент есть незавершенная заявка, которая находится в обработке, или ожидании получения всех данных |
invalid.confirmation.factor.value | Неверное значение фактора подтверждения |
passport.confirmation.attempts.exceeded | Превышено количество попыток подтверждения паспорта |
sim.confirmation.attempts.exceeded | Превышено количество попыток подтверждения sim-карты |
confirmation.session.expired | Время жизни сессии подтверждения истекло |
incorrect.confirmation.code.error | Неверный OTP (One Time Password, одноразовый пароль) |
confirmation.attempts.limit.exceeded.error | Попытки подтверждения исчерпаны |
operation.inapplicable | Операция не применима |
incorrect.request.parameter | Неверный параметр запроса |
invalid.confirmation.data | Неверные данные подтверждения |
Значения перечислимых атрибутов
Статусы заявки
Статус | Описание |
---|---|
PROCESSING_FINISHED | Обработка завершена |
IN_PROGRESS | В процессе обработки |
AWAITING_PRODUCT_CHECKS | Ожидается завершение проверок |
AWAITING_SIM_CONFIRMATION | Ожидается подтверждение сим-карты |
AWAITING_PASSPORT_CONFIRMATION | Ожидается подтверждение идентификации |
AWAITING_AGENT_VERIFICATION | Ожидается верификация заявки у агента (для заявок на сайте) |
Типы документов, удостоверяющих личность
Тип | Описание |
---|---|
RUSSIAN_INNER_PASSPORT | Внутренний паспорт РФ |
FOREIGN_COUNTRY_IDENTIFYING_DOCUMENT | Документ, удостоверяющий личность иностранного гражданина, выданный его государством |
TEMPORARY_RESIDENCE_PERMIT | Разрешение на временное проживание |
PERMANENT_RESIDENCE_PERMIT | Вид на жительство |
REFUGEE_CERTIFICATE | Удостоверение беженца |
OTHER | Иной документ |
Код причины полученного уровня идентификации
Список значений полей identificationLevelReasonCode
, productIdentificationLevelReason
.
Код | Описание |
---|---|
smev.personal.data.not.found | Данные клиента не найдены в СМЭВ |
smev.personal.data.invalid | Данные клиента не прошли проверку в СМЭВ |
simplified.secondary.documents.constraints.validation.failed | Упрощенная идентификация: невалидный второй документ |
simplified.secondary.documents.missing | Упрощенная идентификация: отсутствует второй документ |
general.constraints.validation.failed | Ошибка валидации |
person.is.unreliable | Переданные персональные данные обнаружены в списках ограничений |
passport.expired | Паспорт просрочен |
full.identification.exists | У клиента уже есть полная идентификация |
one.passport.accounts.limit.exceeded | Превышено ограничение на максимальное количество аккаунтов на один паспорт |
person.account.is.deactivated | Аккаунт клиента уже закрыт |
personal.data.not.accepted | Клиенту нельзя предоставить идентификацию согласно текущим правилам |
identification.application.is.expired | Срок жизни незаполненной заявки истек |
passport.confirmation.attempts.exceeded | Превышено количество попыток подтверждения паспорта |
sim.confirmation.attempts.exceeded | Превышено количество попыток подтверждения sim-карты |
personal.data.and.level.cannot.be.updated.by.submitted.application | Заявка нарушает правила обновления существующего клиента при повышении уровня или повторном прохождении идентификации |
Уровень идентификации
Список значений полей identificationLevel
, productIdentificationLevel
.
Уровень | Описание |
---|---|
SIMPLIFIED | Упрощенная |
FULL | Полная |
NOT_VERIFIED | Не идентифицирован |
Хочу рассказать вам про такой class как Qiwi API Class PHP, точнее класс называется просто Qiwi API Class. Служит он для упрощения работы с API системой Qiwi. Данный класс облегчит разработку при необходимости использовать API от Qiwi. Чем он поможет? Да все просто, в классе есть все необходимое для работы с персональным кошельком, причем все запросы готовы к использованию и вам нужно лишь только правильно воспользоваться ими. Давайте разберемся в нем более детально (ссылка для скачивания класса в конце статьи).
Как работает Qiwi API Class PHP:
Класс авторизуется в кошельке через специальное API от Qiwi, то есть вам не нужно вводить никакие пароли и светить ими, ожидаю что их сопрут. Все работает на уровне самого Qiwi, то есть через официальное API. Что на мой взгляд достаточно удобно, нежели как раньше некоторые использовали Curl, для получения и обработки данных с кошелька.
Ранее я сказал, что класс нужен для работы с персональным кошельком, да это действительно так. Он работает только с персональным кошельком, причем вам не нужно проходить идентификацию и не нужно подключаться к ishop от qiwi.
Для работы с классом вам потребуется само собой qiwi кошелек, а именно номер киви кошелька и его token. Как получить токен говорить я не буду, в официальной документации все есть, причем вполне понятно и подробно.
Доступные методы:
Метод | Описание |
getAccount(Array $params) | Профиль пользователя |
getPaymentsHistory(Array $params) | История платежей |
getPaymentsStats(Array $params) | Статистика платежей |
getBalance() | Баланс QIWI Кошелька |
getTxn($txnId, Array $params) | Определенная транкзация |
getCheck($txnId, Array $params) | Квитанция платежа |
getTax($providerId) | Комиссионные тарифы |
sendMoneyToQiwi(Array $params) | Перевод на QIWI Кошелек |
sendMoneyToProvider($providerId, Array $params) | Оплата услуг по ID получателя |
sendMoneyToOther(Array $params) | Платеж по свободным реквизитам |
В целом я думаю достаточно понятно из логичности за что и какой метод отвечает, если вы не поняли о функции какого-то метода — то может быть вам этот метод не нужен… А если все же нужен и хотите разобраться для чего он, то пишите в комментариях, распишу подробнее про каждый метод.
Установка и подключение Qiwi API Class:
1. Скачайте архив с классом
2. Скопируйте Qiwi.php из папки src/ и подключите его в вашем скрипте:
require_once 'Qiwi.php'; $qiwi = new Qiwi('79996661212', 'a9760264ca3e817264ee2340aa877'); $sendMoney = $qiwi->sendMoneyToQiwi([ 'id' => 'time() + 10 * 5', 'sum' => [ 'amount' => 1000, 'currency' => '643' ], 'paymentMethod' => [ 'type' => 'Account', 'accountId' => '643' ], 'comment' => 'Тестовый платеж', 'fields' => [ 'account' => '+79996661212' ] ]);
Получение последних 50 записей из истории платежей за 30 дней:
require_once 'Qiwi.php'; $qiwi = new Qiwi('79969108406', 'a9760264ca3e817264ee2340aa877'); $getHistory = $qiwi->getPaymentsHistory([ 'startDate' => '2018-03-01T00:00:00+03:00', 'endDate' => '2018-03-01T00:00:00+03:00', 'rows' => '50' ]);
Получение данных по определенной транзакции:
require_once 'Qiwi.php'; $qiwi = new Qiwi('79969108406', 'a9760264ca3e817264ee2340aa877'); $getTxn = $qiwi->getTxn('11963463493');
Вот собственно и все, с остальными методами работать можно по той же аналогии, что и с примерами выше. Если что-то непонятно будет, пишите в комментариях, также если найдете какие-то ошибки в работе класса пишите, буду исправлять по мере поступления и по мере свободного времени. Также если у вас есть предложения по расширению и обновлению класса, то пишите, будем вместе думать как лучше все сделать и стоит ли это того. Скачать самую последнюю версию класса вы можете по ссылке ниже, она ведет на GitHub, где всегда будет последняя версия. На этом все, всем спасибо за внимание.
Версия Qiwi API: Версия 1.4 от 15.05.2018
Версия Qiwi API Class PHP: Версия 1.2 от 26.05.2018
Скачать — Qiwi API Class PHP с GitHub
За последние 24 часа нас посетили 11414 программистов и 1121 робот. Сейчас ищут 193 программиста …
-
- С нами с:
- 1 авг 2017
- Сообщения:
- 2
- Симпатии:
- 0
Вот инструкция как взять историю платежей с киви кошелька с офицального сайта:
https://developer.qiwi.com/qiwiwallet/qiwicom_ru.html#tgtsДавайте рассмотрим, всё в начале хорошо, но в конце когда нужен результат выдаёт непонятное сообщение, может кто знает в чём здесь фишка.
Ну по порядку:
Тип запроса — POST.
URL запроса:
https://auth.qiwi.com/cas/tgts
Заголовки запроса:
Accept: application/vnd.qiwi.sso-v1+json
Content-Type: application/json
Тело запроса — JSON. Параметры запроса:Параметр Тип Описание
login String Номер QIWI Кошелька (с международным кодом 7)
password String Пароль от QIWI Кошелька/////////////Ну как здесь видите QIWI просит у нас получить для авторизации TGT и вот выше описывает как его получить: вот скрипт как я его достал, всё норм достаёт ответ скрипта выведу здесь, вот:
$LOGIN = «+79137192812»;
$PASS = «123ASd123»;$ch = curl_init();
$arr = array(«login» => $LOGIN,»password» => $PASS);
$post = json_encode($arr);
$url=»https://auth.qiwi.com/cas/tgts?».$post;curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_HTTPHEADER, array (‘Accept: application/vnd.qiwi.sso-v1+json’,’Content-Type: application/json; charset=UTF-8′,’Host: auth.qiwi.com’,’User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.132 Safari/537.36 ‘));$html = curl_exec($ch);
echo $html;
//////////////Ответ Скрипта: ЗДЕСЬ НОРМ ВЫДАЁТ —
{«entity»:{«user»:»+79137192812″,»ticket»:»TGT-901534-gYb6Lz6m6kgJxvyEtmfdhcsR5i6roaRIvmafq6bwamogxrux7b»},»links»:[{«rel»:»sts»,»href»:»https://auth.qiwi.com/cas/sts»}]}
Как и положено, TGT видно далее он нужен нам что бы вытащить ST, ST нам надо что бы вытащить долгожданную историю платежей. Идём далее,
здесь сейчас напишу как в инструкции что надо для получения ST:Тип запроса — POST.
URL запроса:
https://auth.qiwi.com/cas/sts
Заголовки запроса:
Accept: application/vnd.qiwi.sso-v1+json
Content-Type: application/json
Тело запроса — JSON. Параметры запроса:Параметр Тип Описание
service String Идентификатор сервиса:
Для платежных запросов — строка https://qiwi.com/j_spring_cas_security_check
Для остальных запросов — строка http://t.qiwi.com/j_spring_cas_security_check
ticket String Полученный TGT-ticketНи чего сложного, ниже скрипт с ответом как я его достаю:
$html = json_decode($html,true);
$ticket=$html[«entity»][«ticket»];
$telephone=$html[«entity»][«user»];$service=’http://t.qiwi.com/j_spring_cas_security_check’;
$arr = array(«service» =>$service,»ticket» =>$ticket);
$post = json_encode($arr);
$url=»https://auth.qiwi.com/cas/sts?».$post;
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_HTTPHEADER, array (‘Accept: application/vnd.qiwi.sso-v1+json’,’Content-Type: application/json;’));$html = curl_exec($ch);
echo ‘<br>’.$html;
//ОТвет Скрипта : ЗДЕСЬ НОРМ ТОЖЕ, ВЫДАЁТ —
{«entity»:{«ticket»:»ST-16346499-xtOnMNik9ltMU15apL6N»},»links»:[]}
КАк и положено, достал отсюда ST, и далее мне надо получить историю
платежей, а дальше непонятно, пишу по инструкции но выдаёт такое типо еррор :{«serviceName»:»payment-history»,»errorCode»:»http.method.not.supported»,»userMessage»:»Method is not supported»}
Здесь всё просто по моему, вот как написано так вроде и делаю, но результат вы поняли, сек сейчас инструкцию по истории скину:
Тип запроса — GET.
Пример 1. Последние 10 платежей с рублевого баланса и с привязанной карты
user@server:~$ curl «https://edge.qiwi.com/payment-history/v1/persons/79112223344/payments?rows=10&operation=OUT&sources[0]=QW_RUB&sources[1]=CARD»
—header «Accept: application/json»
—header «Content-Type: application/json»
—header «Authorization: Token ST-989-qw048gtdsvlk3i»
GET /payment-history/v1/persons/79112223344/payments?rows=10&operation=OUT&sources[0]=QW_RUB&sources[1]=CARD HTTP/1.1
Accept: application/json
Authorization: Token ST-989-qw048gtdsvlk3i
Content-type: application/json
Host: edge.qiwi.com
Пример 2. Платежи за 10.05.2017user@server:~$ curl «https://edge.qiwi.com/payment-histo…17-05-10T00:00:00&endDate=2017-05-10T23:59:59»
—header «Accept: application/json»
—header «Content-Type: application/json»
—header «Authorization: Token ST-989-qw048gtdsvlk3i»
GET /payment-history/v1/persons/79112223344/payments?rows=50&startDate=2017-05-10T00%3A00%3A00&endDate=2017-05-10T23%3A59%3A59 HTTP/1.1Accept: application/json
Authorization: Token ST-989-qw048gtdsvlk3i
Content-type: application/json
Host: edge.qiwi.com
Пример 3. Продолжение списка платежей (в предыдущем запросе истории возвращены параметры nextTxnId=9103121 и nextTxnDate=2017-05-11T12:35:23)user@server:~$ curl «https://edge.qiwi.com/payment-histo…TxnId=9103121&nextTxnDate=2017-05-11T12:35:23»
—header «Accept: application/json»
—header «Content-Type: application/json»
—header «Authorization: Token ST-989-qw048gtdsvlk3i»
GET /payment-history/v1/persons/79112223344/payments?rows=50&nextTxnId=9103121&nextTxnDate=2017-05-11T12:35:23 HTTP/1.1Accept: application/json
Authorization: Token ST-989-qw048gtdsvlk3i
Content-type: application/json
Host: edge.qiwi.com
URL запроса:https://edge.qiwi.com/payment-history/v1/persons/<wallet>/payments?<parameters>
Где:
<wallet> — номер кошелька, для которого получена авторизация (с международным префиксом, но без +), обязательный параметр
<parameters> — дополнительные параметры запроса (см. ниже)
Авторизация запроса выполняется по заголовку Authorization:Authorization: Token <ST-ticket>
где <ST-ticket> — полученный в результате авторизации сессии ST-ticket.
Заголовки запроса:
Accept: application/json
Параметры запроса:Параметр Тип Описание Обяз.
rows Integer Число платежей в ответе, для разбивки отчета на части. Целое число от 1 до 50. Ну здесь далее типы параметров что нам надо там комменты и так далее, всё что касается истории платежей:
Ну вот как я это делаю:$html = json_decode($html,true);
$st=$html[«entity»][«ticket»];
echo $st;$telephone = substr($telephone, 1, 11);
echo $telephone;
$url=»https://edge.qiwi.com/payment-history/v1/persons/79137192812/payments?rows=10&operation=OUT&sources[0]=QW_RUB&sources[1]=CARD»;curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);curl_setopt($ch, CURLOPT_HTTPHEADER, array (‘Accept: application/json’,’Authorization: Token ‘.$st.»,’Content-Type: application/json;’,’Host: edge.qiwi.com’));
$html = curl_exec($ch);
echo ‘<br/>’.$html;
curl_close($ch);
А в ответ мне как вы поняли когда нужен результат пишет :
{«serviceName»:»payment-history»,»errorCode»:»http.method.not.supported»,»userMessage»:»Method is not supported»}
Мож кто увидит мудрым глазом что здесь не так.
-
Команда форума
Модератор -
- С нами с:
- 1 авг 2017
- Сообщения:
- 2
- Симпатии:
- 0
-
$cookie_file = «cookie.txt»;
-
$arr = array(«login» => $LOGIN,«password» => $PASS);
-
$url=«https://auth.qiwi.com/cas/tgts?».$post;
-
//curl_setopt($ch, CURLOPT_USERAGENT, ‘Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.132 Safari/537.36’);
-
//curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
-
curl_setopt($ch, CURLOPT_HTTPHEADER, array (‘Accept: application/vnd.qiwi.sso-v1+json’,‘Content-Type: application/json; charset=UTF-8’,‘Host: auth.qiwi.com’,‘User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.132 Safari/537.36 ‘));
-
//$html = curl_exec($ch);
-
$ticket=$html[«entity»][«ticket»];
-
$telephone=$html[«entity»][«user»];
-
//$arr = array(«ticket» => $html[«entity»][«ticket»],»service» => «https://qiwi.com/j_spring_cas_security_check»);
-
//$post = json_encode($arr);
-
$service=‘http://t.qiwi.com/j_spring_cas_security_check’;
-
$arr = array(«service» =>$service,«ticket» =>$ticket);
-
$url=«https://auth.qiwi.com/cas/sts?».$post;
-
//curl_setopt($ch, CURLOPT_USERAGENT, ‘Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.132 Safari/537.36’);
-
//curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
-
//curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1);
-
//curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
-
//curl_setopt($ch, CURLOPT_HTTPHEADER, array());
-
curl_setopt($ch, CURLOPT_HTTPHEADER, array (‘Accept: application/vnd.qiwi.sso-v1+json’,‘Content-Type: application/json;’));
-
//curl_setopt($ch, CURLOPT_REFERER, ‘https://qiwi.com/main.action’);
-
//curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
-
//curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
-
//$html = curl_exec($ch);
-
$st=$html[«entity»][«ticket»];
-
//echo ‘Authorization: Token ‘.$st;
-
GET /funding-sources/v1/accounts/79123332244 HTTP/1.1
-
Authorization: Token ST-2724343-***
-
Content-type:application/json
-
$url=»https://qiwi.com/j_spring_cas_security_check?ticket=».$st;
-
curl_setopt($ch, CURLOPT_HEADER, 0);
-
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
-
curl_setopt($ch, CURLOPT_USERAGENT, ‘Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.132 Safari/537.36’);
-
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
-
curl_setopt($ch, CURLOPT_URL, $url);
-
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
-
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1);
-
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
-
curl_setopt($ch, CURLOPT_HTTPHEADER, array (‘Accept: application/json’,’Authorization: Token ‘.$st.»,’Content-Type: application/json;’,’Host: edge.qiwi.com’));
-
$telephone = substr($telephone, 1, 11);
-
$url=«https://edge.qiwi.com/payment-history/v1/persons/79137192812/payments?rows=10&startDate=2017-05-10T00%3A00%3A00&endDate=2017-05-10T23%3A59%3A59»;
-
//$url=»https://https://edge.qiwi.com/payment-history/v1/persons/79137192812/payments/total»;
-
curl_setopt($ch, CURLOPT_USERAGENT, ‘Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.132 Safari/537.36’);
-
//curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
-
//curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
-
//curl_setopt($ch, CURLOPT_HTTPHEADER, array());
-
/*Accept: application/json
-
Authorization: Token ST-989-qw048gtdsvlk3i
-
Content-type: application/json
-
curl_setopt($ch, CURLOPT_HTTPHEADER, array (‘Accept: application/json’,‘Authorization: Token ‘.$st.»,‘Content-Type: application/json;’,‘Host: edge.qiwi.com’));
-
//curl_setopt($ch, CURLOPT_REFERER, ‘https://qiwi.com/main.action’);
-
//curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
-
//curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
-
//$html = curl_exec($ch);
-
//echo substr($telephone, 1, 11); // возвращает «bcd»
-
//$telephone = substr($telephone, 1, 11);
-
//https://auth.qiwi.com/cas/sts
-
//$token = $html[«entity»];
-
//print_r ($token);//[«user»][0];
-
$page = json_decode($html, true);
-
$arr = array(«ticket» => $page[‘entity’][‘ticket’],»service» => «https://qiwi.com/j_spring_cas_security_check»);
-
$post = json_encode($arr);
-
$url=»https://auth.qiwi.com/cas/sts?».$post;
-
curl_setopt($ch, CURLOPT_HEADER, 0);
-
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
-
curl_setopt($ch, CURLOPT_USERAGENT, ‘Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.132 Safari/537.36’);
-
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
-
curl_setopt($ch, CURLOPT_URL, $url);
-
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
-
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
-
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1);
-
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
-
curl_setopt($ch, CURLOPT_HTTPHEADER, array());
-
curl_setopt($ch, CURLOPT_HTTPHEADER, array (‘Accept: application/vnd.qiwi.sso-v1+json’,’Accept-Language: ru;q=0.8,en-US;q=0.6,en;q=0.4′,’Content-Type: application/json; charset=UTF-8′,’Accept-Encoding: gzip, deflate’,’X-Requested-With: XMLHttpRequest’));
-
curl_setopt($ch, CURLOPT_REFERER, ‘https://auth.qiwi.com/app/proxy?v=1’);
-
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
-
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
-
$arr = array(«service» => «https://qiwi.com/j_spring_cas_security_check»,»ticket» => $page[‘entity’][‘ticket’]);
-
$post = json_encode($arr);
-
$url=»https://auth.qiwi.com/cas/sts?».$post;
-
curl_setopt($ch, CURLOPT_HEADER, 0);
-
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
-
curl_setopt($ch, CURLOPT_USERAGENT, ‘Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.132 Safari/537.36’);
-
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
-
curl_setopt($ch, CURLOPT_URL, $url);
-
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
-
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
-
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1);
-
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
-
curl_setopt($ch, CURLOPT_HTTPHEADER, array());
-
curl_setopt($ch, CURLOPT_HTTPHEADER, array (‘Accept: application/vnd.qiwi.sso-v1+json’,’Accept-Language: ru;q=0.8,en-US;q=0.6,en;q=0.4′,’Content-Type: application/json; charset=UTF-8′,’Accept-Encoding: gzip, deflate’,’X-Requested-With: XMLHttpRequest’));
-
curl_setopt($ch, CURLOPT_REFERER, ‘https://qiwi.com/’);
-
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
-
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
-
$page = json_decode($html, true);
-
$url=»https://qiwi.com/j_spring_cas_security_check?ticket=».$page[«entity»][«ticket»];
-
curl_setopt($ch, CURLOPT_HEADER, 0);
-
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
-
curl_setopt($ch, CURLOPT_USERAGENT, ‘Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.132 Safari/537.36’);
-
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
-
curl_setopt($ch, CURLOPT_URL, $url);
-
curl_setopt($ch, CURLOPT_POST, 0);
-
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
-
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1);
-
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
-
curl_setopt($ch, CURLOPT_HTTPHEADER, array());
-
curl_setopt($ch, CURLOPT_REFERER, ‘https://qiwi.com/’);
-
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
-
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
-
$url=»https://qiwi.com/report/list.action?type=3″;
-
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
-
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1);
-
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
-
curl_setopt($ch, CURLOPT_URL, $url);
-
curl_setopt($ch, CURLOPT_REFERER, ‘https://qiwi.com/main.action’);
-
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
-
curl_setopt($ch, CURLOPT_POST, 0);
-
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
-
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
— Добавлено —
Пт, ага, сделал.