Qiwi api json validation error

API предоставляет следующие возможности —
Последнее обновление: 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 e-mail
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 e-mail
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 e-mail
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 e-mail
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

0 OK 3 Техническая ошибка. Повторите платеж позже. 4 Некорректный формат телефона или счета. Проверьте данные. 5 Данного номера не существует. Проверьте данные и попробуйте еще раз. 8 Техническая проблема на стороне банка-получателя. Попробуйте позже. 57 Статус кошелька получателя не позволяет перевести ему деньги. Попросите владельца кошелька повысить его статус: укажите паспортные данные. 131 Платеж недоступен для вашей страны 166 Ваш статус кошелька не позволяет совершить платеж. Повысьте статус кошелька: укажите паспортные данные. 167 Статус кошелька получателя не позволяет перевести ему деньги. Попросите владельца кошелька повысить его статус: указать паспортные данные. 202 Техническая ошибка. Повторите платеж позже. 204 Ваш статус кошелька не позволяет пополнять его наличными. Повысьте статус кошелька: укажите паспортные данные. 220 Недостаточно средств. Пополните кошелек 241 Сумма платежа должна быть больше 1 рубля 242 Сумма платежа превышает максимально допустимую 254 Сумма платежа должна быть больше 1 рубля 271 Техническая проблема на стороне банка-получателя. Попробуйте позже. 300 Техническая ошибка. Повторите платеж позже. 303 Неверный номер телефона — должно быть 10 цифр 319 Ваш статус кошелька не позволяет совершить платеж. Повысьте статус кошелька: укажите паспортные данные. 407 Недостаточно средств на вашей карте 408 У вас уже есть такой платеж — оплатите или отмените его 455 Платеж невозможен из-за ограничений на минимальный остаток 461 Время подтверждения операции истекло. Попробуйте еще раз. 472 Недостаточно денег на кошельке — пополните его 500 Техническая ошибка на стороне банка-получателя. Обратитесь в их поддержку. 522 Неверный номер или срок действия карты получателя. Проверьте данные и повторите попытку. 547 Неверный срок действия карты получателя. Проверьте данные и повторите попытку. 548 Истек срок действия карты получателя 558 Сумма платежа превышает максимально допустимую 561 Банк, куда вы переводите деньги, не принимает платеж. Обратитесь в его поддержку. 700 Превышен лимит для вашего статуса кошелька. Повысьте статус или уточните свой текущий лимит в разделе Профиль. 702 Платеж невозможен из-за ограничений у получателя. Превышен его лимит на остаток. Получателю необходимо связаться с нашей поддержкой. 704 Превышен ежемесячный лимит по вашему кошельку. Чтобы снять ограничения, повысьте статус кошелька в Профиле. 705 Превышен ежемесячный лимит по вашему кошельку. Чтобы снять ограничения, повысьте статус кошелька в Профиле. 710 Перевод невозможен – превышен лимит платежей за неделю в пользу одного и того же получателя 711 Перевод невозможен. Вы превысили лимит платежей для таких операций за месяц. 716 Вы превысили месячный лимит на снятие денег с карты. Чтобы снять ограничения, повысьте статус кошелька в Профиле. 717 Вы превысили дневной лимит на снятие денег с карты. Чтобы снять ограничения, повысьте статус кошелька в Профиле. 746 Перевод невозможен – превышен лимит в пользу одного и того же получателя 747 Перевод невозможен. Превышено количество операций в пользу одного и того же получателя. 749 Техническая ошибка. Обратитесь в нашу поддержку. 750 Техническая ошибка. Повторите платеж позже. 757 Превышен лимит на количество платежей. Чтобы снять ограничения, повысьте статус кошелька в Профиле. 797 Платеж был отменен, деньги возвращены на ваш кошелек 852 Перевод невозможен – превышен лимит в пользу одного и того же получателя 866 Платеж не проведен. Превышен лимит 5 000 RUB — на исходящие переводы из RUB, USD, EUR в KZT в месяц. Повысьте статус кошелька в Профиле и платите без ограничений. 867 Платеж не проведен. Превышен лимит 5 000 RUB — на входящие переводы из RUB, USD, EUR в KZT в месяц. Повысьте статус кошелька в Профиле и платите без ограничений. 893 Перевод отклонен. Истек его срок действия. 901 Истек срок действия кода для подтверждения платежа. Повторите платеж. 943 Превышен лимит на переводы в месяц. Повысьте статус кошелька в Профиле и переводите без ограничений. 1050 Превышен лимит на такие операции. Повысьте статус кошелька в Профиле и расширьте свои возможности. 7000 Платеж отклонен. Проверьте реквизиты карты и повторите платеж. 7600 Платеж отклонен. Обратитесь в банк, выпустивший карту.

За последние 24 часа нас посетили 11414 программистов и 1121 робот. Сейчас ищут 193 программиста …


  1. boot88

    С нами с:
    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.2017

    user@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.1

    Accept: 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.1

    Accept: 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»}

    Мож кто увидит мудрым глазом что здесь не так.


  2. denis01

    Команда форума
    Модератор


  3. boot88

    С нами с:
    1 авг 2017
    Сообщения:
    2
    Симпатии:
    0

    1. $cookie_file = «cookie.txt»;
    2. $arr = array(«login» => $LOGIN,«password» => $PASS);
    3. $url=«https://auth.qiwi.com/cas/tgts?».$post;
    4. //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’);
    5. //curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    6. 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 ‘));
    7. //$html = curl_exec($ch);
    8. $ticket=$html[«entity»][«ticket»];
    9. $telephone=$html[«entity»][«user»];
    10. //$arr = array(«ticket» => $html[«entity»][«ticket»],»service» => «https://qiwi.com/j_spring_cas_security_check»);
    11. //$post = json_encode($arr);
    12. $service=‘http://t.qiwi.com/j_spring_cas_security_check’;
    13. $arr = array(«service» =>$service,«ticket» =>$ticket);
    14. $url=«https://auth.qiwi.com/cas/sts?».$post;
    15. //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’);
    16. //curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    17. //curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1);
    18. //curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    19. //curl_setopt($ch, CURLOPT_HTTPHEADER, array());
    20. curl_setopt($ch, CURLOPT_HTTPHEADER, array (‘Accept: application/vnd.qiwi.sso-v1+json’,‘Content-Type: application/json;’));
    21. //curl_setopt($ch, CURLOPT_REFERER, ‘https://qiwi.com/main.action’);
    22. //curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
    23. //curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
    24. //$html = curl_exec($ch);
    25. $st=$html[«entity»][«ticket»];
    26. //echo ‘Authorization: Token ‘.$st;
    27. GET /funding-sources/v1/accounts/79123332244 HTTP/1.1
    28. Authorization: Token ST-2724343-***
    29. Content-type:application/json
    30. $url=»https://qiwi.com/j_spring_cas_security_check?ticket=».$st;
    31. curl_setopt($ch, CURLOPT_HEADER, 0);
    32. curl_setopt($ch, CURLOPT_TIMEOUT, 30);
    33. 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’);
    34. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    35. curl_setopt($ch, CURLOPT_URL, $url);
    36. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    37. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1);
    38. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    39. curl_setopt($ch, CURLOPT_HTTPHEADER, array (‘Accept: application/json’,’Authorization: Token ‘.$st.»,’Content-Type: application/json;’,’Host: edge.qiwi.com’));
    40. $telephone = substr($telephone, 1, 11);
    41. $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»;
    42. //$url=»https://https://edge.qiwi.com/payment-history/v1/persons/79137192812/payments/total»;
    43. 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’);
    44. //curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
    45. //curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    46. //curl_setopt($ch, CURLOPT_HTTPHEADER, array());
    47. /*Accept: application/json
    48. Authorization: Token ST-989-qw048gtdsvlk3i
    49. Content-type: application/json
    50. curl_setopt($ch, CURLOPT_HTTPHEADER, array (‘Accept: application/json’,‘Authorization: Token ‘.$st.»,‘Content-Type: application/json;’,‘Host: edge.qiwi.com’));
    51. //curl_setopt($ch, CURLOPT_REFERER, ‘https://qiwi.com/main.action’);
    52. //curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
    53. //curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
    54. //$html = curl_exec($ch);
    55. //echo substr($telephone, 1, 11); // возвращает «bcd»
    56. //$telephone = substr($telephone, 1, 11);
    57. //https://auth.qiwi.com/cas/sts
    58. //$token = $html[«entity»];
    59. //print_r ($token);//[«user»][0];
    60. $page = json_decode($html, true);
    61. $arr = array(«ticket» => $page[‘entity’][‘ticket’],»service» => «https://qiwi.com/j_spring_cas_security_check»);
    62. $post = json_encode($arr);
    63. $url=»https://auth.qiwi.com/cas/sts?».$post;
    64. curl_setopt($ch, CURLOPT_HEADER, 0);
    65. curl_setopt($ch, CURLOPT_TIMEOUT, 30);
    66. 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’);
    67. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    68. curl_setopt($ch, CURLOPT_URL, $url);
    69. curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
    70. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    71. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1);
    72. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    73. curl_setopt($ch, CURLOPT_HTTPHEADER, array());
    74. 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’));
    75. curl_setopt($ch, CURLOPT_REFERER, ‘https://auth.qiwi.com/app/proxy?v=1’);
    76. curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
    77. curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
    78. $arr = array(«service» => «https://qiwi.com/j_spring_cas_security_check»,»ticket» => $page[‘entity’][‘ticket’]);
    79. $post = json_encode($arr);
    80. $url=»https://auth.qiwi.com/cas/sts?».$post;
    81. curl_setopt($ch, CURLOPT_HEADER, 0);
    82. curl_setopt($ch, CURLOPT_TIMEOUT, 30);
    83. 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’);
    84. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    85. curl_setopt($ch, CURLOPT_URL, $url);
    86. curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
    87. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    88. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1);
    89. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    90. curl_setopt($ch, CURLOPT_HTTPHEADER, array());
    91. 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’));
    92. curl_setopt($ch, CURLOPT_REFERER, ‘https://qiwi.com/’);
    93. curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
    94. curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
    95. $page = json_decode($html, true);
    96. $url=»https://qiwi.com/j_spring_cas_security_check?ticket=».$page[«entity»][«ticket»];
    97. curl_setopt($ch, CURLOPT_HEADER, 0);
    98. curl_setopt($ch, CURLOPT_TIMEOUT, 30);
    99. 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’);
    100. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    101. curl_setopt($ch, CURLOPT_URL, $url);
    102. curl_setopt($ch, CURLOPT_POST, 0);
    103. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    104. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1);
    105. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    106. curl_setopt($ch, CURLOPT_HTTPHEADER, array());
    107. curl_setopt($ch, CURLOPT_REFERER, ‘https://qiwi.com/’);
    108. curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
    109. curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);
    110. $url=»https://qiwi.com/report/list.action?type=3″;
    111. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    112. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 1);
    113. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    114. curl_setopt($ch, CURLOPT_URL, $url);
    115. curl_setopt($ch, CURLOPT_REFERER, ‘https://qiwi.com/main.action’);
    116. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    117. curl_setopt($ch, CURLOPT_POST, 0);
    118. curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie_file);
    119. curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_file);

    — Добавлено —

    Пт, ага, сделал.

Понравилась статья? Поделить с друзьями:
  • Qt5webenginewidgets dll как исправить ошибку
  • Qg18de ошибка 0340
  • Qt5core dll error
  • Qg18de ошибка 0335
  • Qt5 collect2 error ld returned 1 exit status