Skip to content

Latest commit

 

History

History
2182 lines (1824 loc) · 85.4 KB

_payment_ru.html.md

File metadata and controls

2182 lines (1824 loc) · 85.4 KB

Платежное API {#payments}

API предоставляет доступ к платежам в пользу провайдеров услуг, зарегистрированных в сервисах QIWI Кошелька.

Уровень доступа, допустимая сумма платежной операции и лимит на платежи зависят от уровня идентификации QIWI кошелька.

Комиссионные тарифы {#rates}

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

Запрос → POST

curl -X POST \
  'https://edge.qiwi.com/sinap/providers/99/onlineCommission' \
  --header "Accept: application/json" \
  --header "Content-Type: application/json" \
  --header "Authorization: Bearer <токен API>" \
  -d '{
        "account":"380995238345",
        "paymentMethod":{
          "type":"Account",
          "accountId":"643"
        },
        "purchaseTotals":{
          "total":{
            "amount":10,
            "currency":"643"
          }
        }
    }'
POST /sinap/providers/99/onlineCommission HTTP/1.1
Content-Type: application/json
Accept: application/json
Authorization: Bearer <токен API>
Host: edge.qiwi.com

{
  "account":"380995238345",
  "paymentMethod":{
    "type":"Account",
    "accountId":"643"
  },
  "purchaseTotals":{
    "total":{
      "amount":10,
      "currency":"643"
    }
  }
}
import requests

# Тарифные комиссии
def get_commission(api_access_token, to_account, prv_id, sum_pay):
    s = requests.Session()
    s.headers = {'content-type': 'application/json'}
    s.headers['authorization'] = 'Bearer ' + api_access_token
    postjson = {"account":"","paymentMethod":{"type":"Account","accountId":"643"}, "purchaseTotals":{"total":{"amount":"","currency":"643"}}}
    postjson['account'] = to_account
    postjson['purchaseTotals']['total']['amount'] = sum_pay
    c_online = s.post('https://edge.qiwi.com/sinap/providers/'+prv_id+'/onlineCommission',json = postjson)
    return c_online.json()['qwCommission']['amount']
  • URL /sinap/providers/{ID}/onlineCommission

ID — идентификатор провайдера. Возможные значения:

Также идентификатор нужного провайдера можно установить поиском по ключевым словам.

  • HEADERS

    • Accept: application/json
    • Content-type: application/json
    • Authorization: Bearer ***
  • Параметры

Обязательные параметры в теле запроса:

Название Тип Описание
account String Пользовательский идентификатор (номер телефона с международным префиксом, номер карты/счета получателя, и т.д., в зависимости от провайдера)
paymentMethod Object Объект, определяющий обработку платежа процессингом QIWI Wallet. Содержит следующие параметры:
paymentMethod.type String Метод платежа, только Account
paymentMethod.accountId String Идентификатор счета, только 643.
purchaseTotals Object Объект с платежными реквизитами
purchaseTotals.total Object Объект, содержащий данные о сумме платежа:
total.amount Number Сумма (можно указать рубли и копейки, разделитель .). Положительное число, округленное до 2 знаков после десятичной точки. При большем числе знаков значение будет округлено до копеек в меньшую сторону.
total.currency String Валюта (только 643, рубли)
HTTP/1.1 200 OK
Content-Type: application/json

{
    "providerId": 99,
    "withdrawSum": {
        "amount": 1011.01,
        "currency": "643"
    },
    "enrollmentSum": {
        "amount": 1001,
        "currency": "643"
    },
    "qwCommission": {
        "amount": 10.01,
        "currency": "643"
    },
    "fundingSourceCommission": {
        "amount": 0,
        "currency": "643"
    },
    "withdrawToEnrollmentRate": 1
}
api_access_token = '975efd8e8376xxxb95fa7cb213xxx04'

# Комиссия за перевод на QIWI кошелек
print(get_commission(api_access_token,'+380000000000','99',5000))
# Комиссия за перевод на карту
print(get_commission(api_access_token,'4890xxxxxxxx1698','22351',1000))

Ответ ←

Рассчитанная сумма комиссии возвращается в поле qwCommission.amount JSON-ответа.

Автозаполнение платежных форм {#autocomplete}

Запрос отображает в браузере предзаполненную форму на сайте qiwi.com для совершения платежа.

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

Если вы не хотите, чтобы пользователь видел номер вашего кошелька на форме, используйте перевод по никнейму:

Пример ссылки на перевод по никнейму (нажмите для перехода на форму)

Для приема переводов на свой QIWI кошелек можно использовать P2P-форму.

Запрос → GET

GET /payment/form/99?extra%5B%27account%27%5D=79991112233&amountInteger=1&amountFraction=0&extra%5B%27comment%27%5D=test123&currency=643 HTTP/1.1
Host: qiwi.com

ID — идентификатор провайдера, у которого набор реквизитов платежа ограничен только полем fields.account. Возможные значения:

Также идентификатор нужного провайдера можно установить поиском по ключевым словам.

  • Параметры

В строке URL запроса указываются параметры отображения платежной формы:

Название Тип Описание Поле на форме
amountInteger Integer Целая часть суммы платежа (рубли). Если параметр не указан, поле "Сумма" на форме будет пустым. Допустимо число не больше 99 999 (ограничение на сумму платежа) Сумма
amountFraction Integer Дробная часть суммы платежа (копейки). Если параметр не указан, поле "Сумма" на форме будет пустым. Сумма
currency Константа, 643 Код валюты платежа. Обязательный параметр, если вы передаете в ссылке сумму платежа -
extra['comment'] URL-encoded string Комментарий. Параметр используется только для ID=99 Комментарий к переводу
extra['account'] URL-encoded string Формат совпадает с форматом параметра fields.account при оплате соответствующих провайдеров: для провайдера 99 - номер кошелька получателя; для провайдеров сотовой связи - номер мобильного телефона для пополнения (без префикса 8); для провайдеров перевода на карту - номер банковской карты получателя (без пробелов), для других провайдеров - идентификатор пользователя. Для провайдера 99999 указывается никнейм или номер кошелька получателя (задайте соответствующее значение параметра extra['accountType']). Номер Кошелька, номер телефона/счета/карты/пользовательский ID получателя.
blocked Array[String] Признак неактивного поля формы. Пользователь не сможет менять значение данного поля. Каждый параметр задает соответствующее поле формы и нумеруется начиная с нуля (blocked[0], blocked[1] и т.д.). Если не указан, пользователь сможет изменить все поля формы. Допустимые значения:
sum - поле "сумма платежа",
account - поле "номер счета/телефона/карты",
comment - поле "комментарий".
Пример (неактивное поле суммы платежа): blocked[0]=sum
-
extra['accountType'] URL-encoded string Параметр используется только для ID=99999. Значение определяет перевод на QIWI кошелек по никнейму или по номеру кошелька.
phone — для перевода по номеру
nickname — для перевода по никнейму. Если вы не хотите, чтобы пользователь видел номер вашего кошелька на форме, используйте это значение.
-

Как узнать свой никнейм через API {#nickname}

Запрос → GET

curl -X GET \
  "https://edge.qiwi.com/qw-nicknames/v1/persons/79111234567/nickname" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer <токен API>"
GET /qw-nicknames/v1/persons/79111234567/nickname HTTP/1.1
Accept: application/json
Authorization: Bearer <токен API>
Host: edge.qiwi.com
  • URL /qw-nicknames/v1/persons/{wallet}/nickname

wallet — номер вашего кошелька без знака +.

  • HEADERS

    • Accept: application/json
    • Authorization: Bearer ***

Ответ ←

HTTP/1.1 200 OK
Content-Type: application/json

{
  "canChange": true,
  "canUse": true,
  "description": "",
  "nickname": "NICKNAME"
}

Успешный ответ в формате JSON содержит никнейм вашего кошелька в поле nickname.

Перевод на QIWI Кошелек {#p2p}

Запрос → POST

curl -X POST \
  'https://edge.qiwi.com/sinap/api/v2/terms/99/payments' \
  --header "Content-Type: application/json" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer <токен API>" \
  -d '{
        "id":"11111111111111",
        "sum": {
          "amount":100,
          "currency":"643"
        },
        "paymentMethod": {
          "type":"Account",
          "accountId":"643"
        },
        "comment":"Комментарий",
        "fields": {
          "account":"+79121112233"
        }
      }'
POST /sinap/api/v2/terms/99/payments HTTP/1.1
Content-Type: application/json
Accept: application/json
Authorization: Bearer <токен API>
Host: edge.qiwi.com

{
 "id":"11111111111111",
 "sum": {
  "amount":100.50,
  "currency":"643"
 },
 "paymentMethod": {
  "type":"Account",
  "accountId":"643"
 },
 "comment":"Комментарий",
 "fields": {
  "account":"+79121112233"
 }
}
import requests
import time

# Перевод на QIWI Кошелек
def send_p2p(api_access_token, to_qw, comment, sum_p2p):
    s = requests.Session()
    s.headers = {'content-type': 'application/json'}
    s.headers['authorization'] = 'Bearer ' + api_access_token
    s.headers['User-Agent'] = 'Android v3.2.0 MKT'
    s.headers['Accept'] = 'application/json'
    postjson = {"id":"","sum":{"amount":"","currency":""},"paymentMethod":{"type":"Account","accountId":"643"}, "comment":"'+comment+'","fields":{"account":""}}
    postjson['id'] = str(int(time.time() * 1000))
    postjson['sum']['amount'] = sum_p2p
    postjson['sum']['currency'] = '643'
    postjson['fields']['account'] = to_qw
    res = s.post('https://edge.qiwi.com/sinap/api/v2/terms/99/payments',json = postjson)
    return res.json()
  • URL /sinap/api/v2/terms/99/payments

  • HEADERS

    • Accept: application/json
    • Content-type: application/json
    • Authorization: Bearer ***
  • Параметры

В теле запроса передается JSON-объект. Структура объекта описана в классе Payment. Набор реквизитов платежа передается во вложенном объекте fields:

Название Тип Описание
fields.account String Обязательный параметр. Номер кошелька для перевода

Ответ ←

print(send_p2p(mylogin,api_access_token,'+79261112233','comment',99.01))

{'comment': 'comment',
 'fields': {'account': '+79261112233'},
 'id': '1514296828893',
 'source': 'account_643',
 'sum': {'amount': 99.01, 'currency': '643'},
 'terms': '99',
 'transaction': {'id': '11982501857', 'state': {'code': 'Accepted'}}}

В успешном JSON-ответе возвращается объект со структурой класса PaymentInfo с данными о принятом платеже.

Конвертация {#exchange}

Запрос выполняет перевод средств на валютный счет QIWI Кошелька с конвертацией с вашего рублевого счета. При этом формируются две транзакции: конвертации между счетами вашего кошелька и перевода на другой кошелек. Курс валют для конвертации можно узнать другим запросом.

Запрос → POST

curl -X POST \
  'https://edge.qiwi.com/sinap/api/v2/terms/1099/payments' \
  --header "Content-Type: application/json" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer <токен API>" \
  -d '{
        "id":"11111111111111",
        "sum": {
          "amount":100,
          "currency":"398"
        },
        "paymentMethod": {
          "type":"Account",
          "accountId":"643"
        },
        "comment":"Комментарий",
        "fields": {
          "account":"+79121112233"
        }
      }'
POST /sinap/api/v2/terms/1099/payments HTTP/1.1
Content-Type: application/json
Accept: application/json
Authorization: Bearer <токен API>
Host: edge.qiwi.com

{
  "id":"11111111111111",
  "sum": {
    "amount":10.00,
    "currency":"398"
  },
	"paymentMethod": {
		"type":"Account",
		"accountId":"643"
	},
	"comment":"Комментарий",
	"fields": {
	 	"account":"+79121112233"
	}
}
import requests
import time

# Конвертация в QIWI Кошельке (currency - код валюты String)
def exchange(api_access_token, sum_exchange, currency, to_qw):
    s = requests.Session()
    currencies = ['398', '840', '978']
    if currency not in currencies:
      print('This currency not available')
      return
    s.headers = {'content-type': 'application/json'}
    s.headers['authorization'] = 'Bearer ' + api_access_token
    s.headers['User-Agent'] = 'Android v3.2.0 MKT'
    s.headers['Accept'] = 'application/json'
    postjson = {"id":"","sum":{"amount":"","currency":""},"paymentMethod":{"type":"Account","accountId":"643"}, "comment":"'+comment+'","fields":{"account":""}}
    postjson['id'] = str(int(time.time() * 1000))
    postjson['sum']['amount'] = sum_exchange
    postjson['sum']['currency'] = currency
    postjson['fields']['account'] = to_qw
    res = s.post('https://edge.qiwi.com/sinap/api/v2/terms/1099/payments',json = postjson)
    return res.json()
  • URL /sinap/api/v2/terms/1099/payments

  • HEADERS

    • Accept: application/json
    • Content-type: application/json
    • Authorization: Bearer ***
  • Параметры

В теле запроса передается JSON-объект. Структура объекта описана в классе Payment. Набор реквизитов платежа передается во вложенном объекте fields:

Название Тип Описание
fields.account String Обязательный параметр. Номер кошелька для перевода

Ответ ←

В успешном JSON-ответе возвращается объект со структурой класса PaymentInfo с данными о принятом платеже.

Курсы валют {#CCY}

Запрос возвращает текущие курсы и кросс-курсы валют КИВИ Банка.

Запрос → GET

curl "https://edge.qiwi.com/sinap/crossRates" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer <токен API>"
GET /sinap/crossRates HTTP/1.1
Accept: application/json
Authorization: Bearer <токен API>
Host: edge.qiwi.com
import requests

# Курс пары валют (коды валют в String)
def exchange(api_access_token, currency_to, currency_from):
    s = requests.Session()
    s.headers = {'content-type': 'application/json'}
    s.headers['authorization'] = 'Bearer ' + api_access_token
    s.headers['User-Agent'] = 'Android v3.2.0 MKT'
    s.headers['Accept'] = 'application/json'
    res = s.get('https://edge.qiwi.com/sinap/crossRates')

    # все курсы
    rates = res.json()['result']

    # запрошенный курс
    rate = [x for x in rates if x['from'] == currency_from and x['to'] == currency_to]
    if (len(rate) == 0):
        print('No rate for this currencies!')
        return
    else:
        return rate[0]['rate']
  • URL /sinap/crossRates

  • HEADERS

    • Accept: application/json
    • Authorization: Bearer ***

Ответ ←

HTTP/1.1 200 OK
Content-Type: application/json

{
    "result": [
        {
            "set": "General",
            "from": "398",
            "to": "643",
            "rate": 6.22665
        },
        {
            "set": "General",
            "from": "398",
            "to": "756",
            "rate": 412.0174305
        },
        ...,
        {
            "set": "General",
            "from": "980",
            "to": "978",
            "rate": 31.4680914
        }
    ]
}

Успешный JSON-ответ содержит список курсов валют в списке result. Элемент списка соответствует валютной паре:

Поле ответа Тип Описание
from String Валюта покупки
to String Валюта продажи
rate Number Курс

Оплата сотовой связи {#cell}

Запрос → POST

curl -X POST \
  "https://edge.qiwi.com/sinap/api/v2/terms/1/payments" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer <токен API>" \
  -d '{
        "id":"11111111111111",
        "sum": {
          "amount":100,
          "currency":"643"
        },
        "paymentMethod": {
          "type":"Account",
          "accountId":"643"
        },
        "fields": {
          "account":"9161112233"
        }
      }'
POST /sinap/api/v2/terms/1/payments HTTP/1.1
Content-Type: application/json
Accept: application/json
Authorization: Bearer <токен API>
Host: edge.qiwi.com

{
  "id":"21131343",
  "sum": {
        "amount":1000,
        "currency":"643"
  },
  "paymentMethod": {
      "type":"Account",
      "accountId":"643"
  },
  "fields": {
        "account":"9161112233"
  }
}
import requests
import time

# Оплата мобильного телефона
def send_mobile(api_access_token, prv_id, to_account, comment, sum_pay):
    s = requests.Session()
    s.headers['Accept'] = 'application/json'
    s.headers['Content-Type'] = 'application/json'
    s.headers['authorization'] = 'Bearer ' + api_access_token
    postjson = {"id":"","sum": {"amount":"","currency":"643"},"paymentMethod": {"type":"Account","accountId":"643"},"comment":"","fields": {"account":""}}
    postjson['id'] = str(int(time.time() * 1000))
    postjson['sum']['amount'] = sum_pay
    postjson['fields']['account'] = to_account
    postjson['comment'] = comment
    res = s.post('https://edge.qiwi.com/sinap/api/v2/terms/'+prv_id+'/payments', json = postjson)
    return res.json()
  • URL /sinap/api/v2/terms/{ID}/payments

ID — идентификатор провайдера. Определяется с помощью поиска провайдера.

  • HEADERS

    • Accept: application/json
    • Content-type: application/json
    • Authorization: Bearer ***
  • Параметры

В теле запроса передается JSON-объект. Структура объекта описана в классе Payment. Набор реквизитов платежа передается во вложенном объекте fields:

Название Тип Описание
fields.account String Номер мобильного телефона для пополнения (без префикса 8)

Ответ ←

send_mobile(api_access_token,'2','9670058909','123','1')

В успешном JSON-ответе возвращается объект со структурой класса PaymentInfo с данными о принятом платеже.

Перевод на карту {#cards}

Поиск ID для переводов на банковские карты РФ и Белоруссии {#cards-search-id}

Определение ID для переводов на банковские карты РФ и Белоруссии.

Запрос → POST

POST /sinap/api/refs/bd6fb248-2bdf-49ed-bcb2-9b0a789cfde8/containers HTTP/1.1
Accept: application/vnd.qiwi.v1+json
Content-Type: application/json
Host: edge.qiwi.com
Authorization: Bearer <токен API>

{
  "account":"1234 1234 1234 1234"
}
curl -X POST \
  "https://edge.qiwi.com/sinap/api/refs/bd6fb248-2bdf-49ed-bcb2-9b0a789cfde8/containers" \
  --header "Content-Type: application/json" \
  --header "Accept: application/vnd.qiwi.v1+json" \
  --header "Authorization: Bearer <токен API>" \
  -d '{
    "account":"1234 1234 1234 1234"
  }'
  • URL /sinap/api/refs/bd6fb248-2bdf-49ed-bcb2-9b0a789cfde8/containers

  • HEADERS

    • Accept: application/vnd.qiwi.v1+json
    • Content-type: application/json
    • Authorization: Bearer ***
  • Параметры

В поле account JSON-тела запроса передается номер карты в строковом формате. В номере после каждой четвертой цифры ставится пробел.

Ответ ←

HTTP/1.1 200 OK
Content-Type: application/json

{
  "elements": [
    { 
      "type": "field",
      "name": "termsId",
      "value": "36390"
    }
  ]
}
{"elements":[{"type": "field","name": "termsId","value": "36390"}]}

В поле ответа elements[].value возвращается ID провайдера для перевода на банковскую карту.

Перевод на карты банков РФ и зарубежных банков {#cards-rf-and-foreign}

Запрос выполняет денежный перевод на карты платежных систем Visa, MasterCard или МИР.

Платежи на карты Visa и MasterCard, выпущенные иностранными банками, временно остановлены по причине ограничений со стороны платежной системы.

Запрос → POST

Пример перевода на карту банка РФ

curl -X POST \
  "https://edge.qiwi.com/sinap/api/v2/terms/1963/payments" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer <токен API>" \
  -d '{
        "id":"21131343",
        "sum":{
          "amount":1000,
          "currency":"643"
        },
        "paymentMethod":{
          "type":"Account",
          "accountId":"643"
        },
        "fields": {
          "account":"4256********1231"
        }
    }'
POST /sinap/api/v2/terms/1963/payments HTTP/1.1
Content-Type: application/json
Accept: application/json
Authorization: Bearer <токен API>
Host: edge.qiwi.com

{
  "id":"21131343",
  "sum": {
        "amount":1000,
        "currency":"643"
  },
  "paymentMethod": {
      "type":"Account",
      "accountId":"643"
  },
  "fields": {
        "account":"4256XXXXXXXX1231"
  }
}

Пример перевода на международную карту

curl -X POST \
  "https://edge.qiwi.com/sinap/api/v2/terms/1960/payments" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer <токен API>" \
  -d '{
        "id":"21131343",
        "sum":{
          "amount":1000,
          "currency":"643"
        },
        "paymentMethod":{
          "type":"Account",
          "accountId":"643"
        },
        "fields": {
          "account": "402865XXXXXXXXXX",
          "rec_address": "Ленинский проспект 131, 56",
          "rec_city": "Москва",
          "rec_country": "Россия",
          "reg_name": "Виктор",
          "reg_name_f": "Петров",
          "rem_name": "Сергей",
          "rem_name_f": "Иванов"
        }
    }'
POST /sinap/api/v2/terms/1960/payments HTTP/1.1
Content-Type: application/json
Accept: application/json
Authorization: Bearer <токен API>
Host: edge.qiwi.com

{
  "id":"21131343",
  "sum": {
        "amount":1000,
        "currency":"643"
  },
  "paymentMethod": {
      "type":"Account",
      "accountId":"643"
  },
  "fields": {
      "account": "402865XXXXXXXXXX",
      "rec_address": "Ленинский проспект 131, 56",
      "rec_city": "Москва",
      "rec_country": "Россия",
      "reg_name": "Виктор",
      "reg_name_f": "Петров",
      "rem_name": "Сергей",
      "rem_name_f": "Иванов"
  }
}
import requests
import time

# Перевод на карту
def send_card(api_access_token, payment_data):
    # payment_data - dictionary with all payment data
    s = requests.Session()
    s.headers['Accept'] = 'application/json'
    s.headers['Content-Type'] = 'application/json'
    s.headers['authorization'] = 'Bearer ' + api_access_token
    postjson = {"id":"","sum": {"amount":"","currency":"643"},"paymentMethod": {"type":"Account","accountId":"643"},"fields": {"account":""}}
    postjson['id'] = str(int(time.time() * 1000))
    postjson['sum']['amount'] = payment_data.get('sum')
    postjson['fields']['account'] = payment_data.get('to_card')
    prv_id = payment_data.get('prv_id')
    if payment_data.get('prv_id') in ['1960', '21012']:
        postjson['fields']['rem_name'] = payment_data.get('rem_name')
        postjson['fields']['rem_name_f'] = payment_data.get('rem_name_f')
        postjson['fields']['reg_name'] = payment_data.get('reg_name')
        postjson['fields']['reg_name_f'] = payment_data.get('reg_name_f')
        postjson['fields']['rec_city'] = payment_data.get('rec_address')
        postjson['fields']['rec_address'] = payment_data.get('rec_address')

    res = s.post('https://edge.qiwi.com/sinap/api/v2/terms/' + prv_id + '/payments', json = postjson)
    return res.json()
  • URL /sinap/api/v2/terms/{ID}/payments

ID — идентификатор провайдера. Возможные значения:

  • 1963 — Перевод на карту Visa. Для карт, выпущенных российскими банками.
  • 1960 — Перевод на карту Visa. Для карт, выпущенных банками стран Албания, Андорра,Аргентина, Армения, Австралия, Австрия, Азербайджан, Беларусь, Бельгия, Бенин, Босния и Герцеговина, Бразилия, Болгария, Китай, Хорватия, Кипр, Чешская Республика, Дания, Египет, Эстония, Финляндия, Франция, Грузия, Германия, Греция, Гонконг (Китай), Венгрия, Исландия, Индия, Индонезия, Израиль, Италия, Япония, Казахстан, Кения, Корея Республика, Кувейт, Кыргызстан, Латвия, Литва, Люксембург, Макао, Китай, Македония, Мадагаскар, Малайзия, Мальдивы, Мальта, Республика Молдова, Монако, Монголия, Черногория, Намибия, Нидерланды, Новая Зеландия, Нигерия, Норвегия, Оман, Парагвай, Польша, Португалия, Катар, Румыния, Саудовская Аравия, Республика Сербия, Сингапур, Словакия, Словения, Южная Африка, Испания, Шри-Ланка, Швеция, Таджикистан, Танзания, Таиланд, Турция, Туркменистан, Объединенные Арабские Эмираты, Великобритания, Узбекистан, Вьетнам, Замбия.
  • 21013 — Перевод на карту MasterCard. Для карт, выпущенных российскими банками.
  • 21012 — Перевод на карту MasterCard. Для карт, выпущенных банками стран Албания, Аргентина, Армения, Австралия, Австрия, Азербайджан, Бангладеш, Барбадос, Беларусь, Бельгия, Бенин, Босния и Герцеговина, Буркина-Фасо, Бразилия, Болгария, Камбоджа, Камерун Объединенная Республика, Чили, Китай, Колумбия, Конго, Коста-Рика, Хорватия, Кипр, Чешская Республика, Демократическая Республика Конго, Дания, Доминиканская Республика, Эквадор, Сальвадор, Египет, Эстония, Финляндия, Франция, Грузия, Германия, Гана, Греция, Гватемала, Гонконг, Венгрия, Индия, Индонезия, Ирландия, Израиль, Италия, Япония, Иордания, Казахстан, Кения, Корея, Кувейт, Кыргызстан, Латвия, Ливан, Литва, Люксембург, Макао, Македония, Мадагаскар, Малайзия, Мальдивы, Мальта, Мексика, Молдова, Монако, Монголия, Черногория, Марокко, Намибия, Нигерия, Непал, Нидерланды, Новая Зеландия, Нигерия, Норвегия, Оман, Панама, Парагвай, Перу, Филиппины, Польша, Португалия, Румыния, Катар, Саудовская Аравия, Сенегал, Сербия Республика, Сингапур, Словакия, Словения, Южная Африка, Испания, Шри-Ланка, Швеция, Швейцария, Таджикистан, Танзания, Тайланд, Тунис, Турция, Туркменистан, Объединенные Арабские Эмираты, Великобритания, Узбекистан, Вьетнам, Замбия.
  • 31652 — Перевод на карту МИР.
  • 22351 — Перевод на Виртуальную карту QIWI.
  • HEADERS

    • Accept: application/json
    • Content-type: application/json
    • Authorization: Bearer ***
  • Параметры

В теле запроса передается JSON-объект. Структура объекта описана в классе Payment. Набор реквизитов платежа в поле fields зависит от ID провайдера.

Параметры для ID 1963, 21013, 31652, 22351

Название Тип Описание
fields.account String Номер банковской карты получателя (без пробелов)

Параметры для ID 1960, 21012

Название Тип Описание
fields.account String Номер банковской карты получателя (без пробелов)
fields.rem_name String Имя отправителя
fields.rem_name_f String Фамилия отправителя
fields.rec_address String Адрес отправителя (без почтового индекса, в произвольной форме)
fields.rec_city String Город отправителя
fields.rec_country String Страна отправителя
fields.reg_name String Имя получателя
fields.reg_name_f String Фамилия получателя

Ответ ←

В успешном JSON-ответе возвращается объект со структурой класса PaymentInfo с данными о принятом платеже.

Перевод на карты банков Казахстана {#cards-kzt}

Запрос выполняет денежный перевод на карты Visa или MasterCard, выпущенные банками Казахстана.

Запрос → POST

Пример перевода на карту

curl -X POST \
  --location \
  "https://edge.qiwi.com/sinap/api/terms/27292/payments" \
  -H "authorization: Bearer <токен API>" \
  -H "accept: application/vnd.qiwi.v2+json" \
  -H "sec-fetch-site: same-site" \
  -H "sec-fetch-mode: cors" \
  -H "sec-fetch-dest: empty" \
  -H "Content-Type: application/json" \
  -d '{
        "id": "<случайный id платежа>",
        "sum": {
          "amount": <сумма перевода>,
          "currency": "398"
        },
        "paymentMethod": {
          "accountId": "398",
          "type": "Account"
        },
        "comment": "",
        "fields": {
          "cardNumber": "<номер карты>",
          "version": "2",
          "transferSum": "100",
          "info": "Для продолжения оплаты, подтвердите, что являетесь держателем указанного банковского счета.",
          "accept": "1",
          "account": "<значение account из подготовительного запроса>",
          "ev_account1": "<значение ev_account1 из подготовительного запроса>"
        }
    }`
POST /sinap/api/terms/27292/payments HTTP/1.1
Content-Type: application/json
Accept: application/vnd.qiwi.v2+json
Authorization: Bearer <токен API>
sec-fetch-site: same-site
sec-fetch-mode: cors
sec-fetch-dest: empty
Host: edge.qiwi.com

{
  "id":"21131343",
  "sum": {
        "amount":1000,
        "currency":"398"
  },
  "paymentMethod": {
      "type":"Account",
      "accountId":"398"
  },
  "fields": {
            "cardNumber": "<номер карты>",
            "version": "2",
            "transferSum": "100",
            "info": "Для продолжения оплаты, подтвердите, что являетесь держателем указанного банковского счета."
            "accept": "1",
            "account": "<значение account из подготовительного запроса>",
            "ev_account1": "<значение ev_account1 из подготовительного запроса>"
  }
}
  • URL /sinap/api/terms/27292/payments

  • HEADERS

    • Accept: application/vnd.qiwi.v2+json
    • Content-type: application/json
    • Authorization: Bearer ***
    • sec-fetch-site: same-site
    • sec-fetch-mode: cors
    • sec-fetch-dest: empty
  • Параметры

В теле запроса передается JSON-объект. Структура объекта описана в классе Payment. Набор реквизитов платежа передается во вложенном объекте fields:

Название Тип Описание
fields.cardNumber String Номер банковской карты получателя (без пробелов)
fields.account String Значение поля account из ответа на подготовительный запрос
fields.ev_account1 String Значение поля ev_account1 из ответа на подготовительный запрос
fields.transferSum String Всегда 100
fields.accept String Всегда 1
fields.info String Всегда Для продолжения оплаты, подтвердите,
что являетесь держателем указанного банковского счета.

Ответ ←

В успешном JSON-ответе возвращается объект со структурой класса PaymentInfo с данными о принятом платеже.

Подготовительный запрос для перевода на карту {#prepare-card-kzt-transfer}

Запрос → POST

Пример подготовительного запроса

curl -X POST \
  "https://edge.qiwi.com/sinap/api/refs/a42ebc79-0584-4271-b8a0-15cb4ea8b340/containers" \
  --header "Content-Type: application/json" \
  --header "Accept: application/vnd.qiwi.v1+json" \
  --header "Authorization: Bearer <токен API>" \
  -H 'sec-fetch-site: same-site' \
  -H 'sec-fetch-mode: cors' \
  -H 'sec-fetch-dest: empty' \
  --data-raw '{"cardNumber":"<ваш номер карты>","version":"2","transferSum":"100","src":"sinap"}' \
  --compressed
POST /sinap/api/refs/a42ebc79-0584-4271-b8a0-15cb4ea8b340/containers HTTP/1.1
Content-Type: application/json
Accept: application/vnd.qiwi.v1+json
Authorization: Bearer YUu2qw048gtdsvlk3iu
sec-fetch-site: same-site
sec-fetch-mode: cors
sec-fetch-dest: empty
Host: edge.qiwi.com

{
  "cardNumber":"<ваш номер карты>",
  "version":"2",
  "transferSum":"100",
  "src":"sinap"
}
  • URL /sinap/api/refs/a42ebc79-0584-4271-b8a0-15cb4ea8b340/containers

  • HEADERS

    • Accept: application/vnd.qiwi.v1+json
    • Content-type: application/json
    • Authorization: Bearer ***
    • sec-fetch-site: same-site
    • sec-fetch-mode: cors
    • sec-fetch-dest: empty
  • Параметры

Название Тип Описание
cardNumber String Номер банковской карты получателя (без пробелов)
transferSum String Всегда 100
version String Всегда 2
src String Всегда sinap

Ответ ←

...
"elements":[
  {
    "type":"field",
    "name":"account",
    "value":"<маскированный PAN карты>"
  },
  {
    "type":"field",
    "name":"ev_account1",
    "value":"<длинная строка>"
  }
]

Успешный JSON-ответ содержит блоки "name": "account" и "name": "ev_account1". Сохраните значения из поля value для передачи в платежном запросе.

Банковский перевод {#banks}

Запрос выполняет денежный перевод на карты/счета физических лиц, открытые в российских банках.

Перевод по номеру карты

Запрос выполняет денежный перевод на карты физических лиц, выпущенные российскими банками.

Запрос → POST

curl -X POST \
  "https://edge.qiwi.com/sinap/api/v2/terms/464/payments" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer <токен API>" \
  -d '{
        "id":"21131343",
        "sum": {
          "amount":1000,
          "currency":"643"
        },
        "paymentMethod": {
          "type":"Account",
          "accountId":"643"
        },
        "fields": {
          "account_type": "1",
          "account":"4256********1231",
          "exp_date": "0422"
        }
    }'
POST /sinap/api/v2/terms/464/payments HTTP/1.1
Content-Type: application/json
Accept: application/json
Authorization: Bearer <токен API>
Host: edge.qiwi.com

{
  "id":"21131343",
  "sum": {
        "amount":1000,
        "currency":"643"
  },
  "paymentMethod": {
      "type":"Account",
      "accountId":"643"
  },
  "fields": {
        "account":"4256********1231",
        "account_type": "1",
        "exp_date": "0422"
  }
}
  • URL /sinap/api/v2/terms/{ID}/payments

ID — идентификатор провайдера. Возможные значения:

  • 464 — Альфа-Банк
  • 804 — АО "ОТП БАНК"
  • 810 — АО "РОССЕЛЬХОЗБАНК"
  • 815 — Русский Стандарт
  • 816 — ВТБ (ПАО)
  • 821 — Промсвязьбанк
  • 870 — ПАО Сбербанк
  • 881 — Ренессанс Кредит
  • 1134 — ПАО "МОСКОВСКИЙ КРЕДИТНЫЙ БАНК"
  • HEADERS

    • Accept: application/json
    • Content-type: application/json
    • Authorization: Bearer ***
  • Параметры

В теле запроса передается JSON-объект. Структура объекта описана в классе Payment. Набор реквизитов платежа передается во вложенном объекте fields:

Название Тип Описание
fields.account String Номер банковской карты получателя (без пробелов)
fields.exp_date String Срок действия карты, в формате ММГГ (например, 0218). Параметр указывается только в случае перевода на карту Альфа-Банка (ID 464) и Промсвязьбанка (ID 821).
fields.account_type String Тип банковского идентификатора. Номер карты соответствует типу 1. Для некоторых банков применяются собственные значения:
Россельхозбанк - 5
ВТБ - 5
Промсвязьбанк - 7
Сбербанк - 5
МОСКОВСКИЙ КРЕДИТНЫЙ БАНК - 5.
fields.mfo String БИК соответствующего банка/территориального отделения банка
fields.lname String Фамилия получателя
fields.fname String Имя получателя
fields.mname String Отчество получателя

Ответ ←

В успешном JSON-ответе возвращается объект со структурой класса PaymentInfo с данными о принятом платеже.

Перевод по номеру счета/договора {#money-order-bank-account}

Запрос выполняет денежный перевод на счета физических лиц, открытые в российских банках. Возможен обычный перевод или перевод с использованием сервиса срочного перевода (исполнение в течение часа, с 9:00 до 19:30).

Запрос → POST

curl -X POST \
  "https://edge.qiwi.com/sinap/api/v2/terms/816/payments" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer <токен API>" \
  -d '{
        "id":"21131343",
        "sum": {
          "amount":1000,
          "currency":"643"
        },
        "paymentMethod": {
          "type":"Account",
          "accountId":"643"
        },
        "fields": {
          "account_type": "2",
          "urgent": "0",
          "lname": "Иванов",
          "fname": "Иван",
          "mname": "Иванович",
          "mfo": "046577795",
          "account":"40817***"
        }
    }'
POST /sinap/api/v2/terms/816/payments HTTP/1.1
Content-Type: application/json
Accept: application/json
Authorization: Bearer <токен API>
Host: edge.qiwi.com

{
  "id":"21131343",
  "sum": {
        "amount":1000,
        "currency":"643"
  },
  "paymentMethod": {
      "type":"Account",
      "accountId":"643"
  },
  "fields": {
          "account_type": "2",
          "urgent": "0",
          "lname": "Иванов",
          "fname": "Иван",
          "mname": "Иванович",
          "mfo": "046577795",
          "account":"40817***"
  }
}
  • URL /sinap/api/v2/terms/{ID}/payments

ID — идентификатор провайдера. Возможные значения:

  • 313 - ХоумКредит Банк
  • 464 - Альфа-Банк
  • 821 - Промсвязьбанк
  • 804 - АО "ОТП БАНК"
  • 810 - АО "РОССЕЛЬХОЗБАНК"
  • 816 - ВТБ (ПАО)
  • 819 - АО ЮНИКРЕДИТ БАНК
  • 868 - КИВИ БАНК (АО)
  • 870 - ПАО Сбербанк
  • 1134 - ПАО "МОСКОВСКИЙ КРЕДИТНЫЙ БАНК"
  • 27324 - АО "РАЙФФАЙЗЕНБАНК"
  • HEADERS

    • Accept: application/json
    • Content-type: application/json
    • Authorization: Bearer ***
  • Параметры

В теле запроса передается JSON-объект. Структура объекта описана в классе Payment. Набор реквизитов платежа передается во вложенном объекте fields:

Название Тип Описание
fields.account String Номер банковского счета получателя
fields.urgent String Признак ускоренного перевода. Значение 0 — не использовать; значение 1 — выполнить перевод через Сервис срочного перевода ЦБ РФ. Внимание! Взимается дополнительная комиссия за ускоренный перевод
fields.mfo String БИК соответствующего банка/территориального отделения банка
fields.account_type String Тип банковского идентификатора. Номер счета (2) или номер договора (3). Для некоторых банков применяются собственные значения:
Промсвязьбанк — 9
ВТБ — 5
ХоумКредит Банк — 6.
fields.lname String Фамилия получателя
fields.fname String Имя получателя
fields.mname String Отчество получателя
fileds.agrnum String Номер договора. Только для переводов в ХоумКредит Банк

Ответ ←

В успешном JSON-ответе возвращается объект со структурой класса PaymentInfo с данными о принятом платеже.

Оплата других услуг {#services}

Оплата услуги по идентификатору пользователя. Запрос применяется для провайдеров, использующих в реквизитах единственный пользовательский идентификатор, без проверки номера аккаунта.

Запрос → POST

curl -X POST \
  "https://edge.qiwi.com/sinap/api/v2/terms/674/payments" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer <токен API>" \
  -d '{
        "id":"21131343",
        "sum": {
          "amount":100,
          "currency":"643"
        },
        "paymentMethod": {
          "type":"Account",
          "accountId":"643"
        },
        "fields": {
          "account":"111000000"
        }
    }'
POST /sinap/api/v2/terms/674/payments HTTP/1.1
Content-Type: application/json
Accept: application/json
Authorization: Bearer <токен API>
Host: edge.qiwi.com

{
  "id":"21131343",
  "sum": {
        "amount":100,
        "currency":"643"
  },
  "paymentMethod": {
      "type":"Account",
      "accountId":"643"
  },
  "fields": {
        "account":"111000"
  }
}
import requests
import time

# оплата простого провайдера

def pay_simple_prv(api_access_token, prv_id, to_account, sum_pay):
    s = requests.Session()
    s.headers['Accept'] = 'application/json'
    s.headers['Content-Type'] = 'application/json'
    s.headers['authorization'] = 'Bearer ' + api_access_token
    postjson = {"id":"","sum": {"amount":"","currency":"643"},"paymentMethod": {"type":"Account","accountId":"643"},"fields": {"account":""}}
    postjson['id'] = str(int(time.time() * 1000))
    postjson['sum']['amount'] = sum_pay
    postjson['fields']['account'] = to_account
    res = s.post('https://edge.qiwi.com/sinap/api/v2/terms/'+prv_id+'/payments', json = postjson)
    return res.json()
  • URL /sinap/api/v2/terms/{ID}/payments

ID — идентификатор провайдера. Возможные значения:

  • HEADERS

    • Accept: application/json
    • Content-type: application/json
    • Authorization: Bearer ***
  • Параметры

В теле запроса передается JSON-объект. Структура объекта описана в классе Payment. Набор реквизитов платежа передается во вложенном объекте fields:

Название Тип Описание
fields.account String Пользовательский идентификатор

Ответ ←

В успешном JSON-ответе возвращается объект со структурой класса PaymentInfo с данными о принятом платеже.

Платеж по свободным реквизитам {#freepay}

Оплата услуг коммерческих организаций по их банковским реквизитам.

Запрос → POST

curl -X POST \
  "https://edge.qiwi.com/sinap/api/v2/terms/1717/payments" \
  --header "Content-Type: application/json" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer <токен API>" \
  --header "User-Agent: ***" \
  -d '{
    "id":"21131343",
    "sum": {
      "amount":1000,
      "currency":"643"
    },
    "paymentMethod": {
      "type":"Account",
      "accountId":"643"
    },
    "fields": {
      "extra_to_bik":"044525201",
      "requestProtocol":"qw1",
      "city":"МОСКВА",
      "name":"ПАО АКБ \"АВАНГАРД\"",
      "to_bik":"044525201",
      "urgent":"0",
      "to_kpp":"772111001",
      "is_commercial":"1",
      "nds":"НДС не облагается",
      "goal":" Оплата товара по заказу №090738231",
      "from_name_p":"Николаевич",
      "from_name":"Иван",
      "from_name_f":"Михайлов",
      "info":"Коммерческие организации",
      "to_name":"ООО \"Технический Центр ДЕЛЬТА\"",
      "to_inn":"7726111111",
      "account":"40711100000012321",
      "toServiceId":"1717"
  }
}'
POST /sinap/api/v2/terms/1717/payments HTTP/1.1
Content-Type: application/json
Accept: application/json
Authorization: Bearer <токен API>
Host: edge.qiwi.com
User-Agent: ****

{
  "id":"21131343",
  "sum": {
        "amount":1000,
        "currency":"643"
  },
  "paymentMethod": {
      "type":"Account",
      "accountId":"643"
  },
  "fields": {
         "extra_to_bik":"044525201",
         "requestProtocol":"qw1",
         "city":"МОСКВА",
         "name":"ПАО АКБ \"АВАНГАРД\"",
         "to_bik":"044525201",
         "urgent":"0",
         "to_kpp":"772111001",
         "is_commercial":"1",
         "nds":"НДС не облагается",
         "goal":" Оплата товара по заказу №090738231",
         "from_name_p":"Николаевич",
         "from_name":"Иван",
         "from_name_f":"Михайлов",
         "info":"Коммерческие организации",
         "to_name":"ООО \"Технический Центр ДЕЛЬТА\"",
         "to_inn":"7726111111",
         "account":"40711100000012321",
         "toServiceId":"1717"
  }
}
  • URL /sinap/api/v2/terms/1717/payments

  • HEADERS

    • Accept: application/json
    • Content-type: application/json
    • Authorization: Bearer ***
  • Параметры

В теле запроса передается JSON-объект. Структура объекта описана в классе Payment. Набор реквизитов платежа передается во вложенном объекте fields:

Название Тип Описание
fields.name String Наименование банка получателя (кавычки экранируются символом \)
fields.extra_to_bik String БИК банка получателя
fields.to_bik String БИК банка получателя
fields.city String Город местонахождения получателя
fields.info String Константа, Коммерческие организации
fields.is_commercial String Служебная информация, константа 1
fields.to_name String Наименование организации (кавычки экранируются символом \)
fields.to_inn String ИНН организации
fields.to_kpp String КПП организации
fields.nds String Признак уплаты НДС. Если вы оплачиваете квитанцию и в ней не указан НДС, то строка НДС не облагается. В ином случае, строка В т.ч. НДС.
fields.goal String Назначение платежа
fields.urgent String Признак срочного платежа (0 - нет, 1 - да). Срочный платеж выполняется от 10 минут. Возможен по будням с 9:00 до 20:30 по московскому времени. Стоимость услуги — 25 рублей.
fields.account String Номер счета получателя
fields.from_name String Имя плательщика
fields.from_name_p String Отчество плательщика
fields.from_name_f String Фамилия плательщика
fields.requestProtocol String Служебная информация, константа qw1
fields.toServiceId String Служебная информация, константа 1717

Ответ ←

В успешном JSON-ответе возвращается объект со структурой класса PaymentInfo с данными о принятом платеже.

Поиск провайдера по ключевым словам {#provider-search-words}

Используйте этот запрос для поиска идентификатора провайдера. В запросе указывается список ключевых слов (например, название провайдера), разделенных пробелами.

Запрос → GET

curl -X GET \
  "https://edge.qiwi.com/search/v1/search?query=%D0%91%D0%B8%D0%BB%D0%B0%D0%B9%D0%BD+%D0%B4%D0%BE%D0%BC%D0%B0%D1%88%D0%BD%D0%B8%D0%B9+%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82" \
  --header "Accept: application/json" \
  --header "Authorization: Bearer <токен API>"
GET /search/v1/search?query=%D0%91%D0%B8%D0%BB%D0%B0%D0%B9%D0%BD+%D0%B4%D0%BE%D0%BC%D0%B0%D1%88%D0%BD%D0%B8%D0%B9+%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82 HTTP/1.1
Accept: application/json
Host: edge.qiwi.com
Authorization: Bearer <токен API>
import requests

# поиск на qiwi.com - определение id провайдера по названию
def qiwi_com_search(api_access_token, search_phrase):
    s = requests.Session()
    s.headers['authorization'] = 'Bearer ' + api_access_token
    search = s.get('https://edge.qiwi.com/search/v1/search', params={'query':search_phrase})
    return search.json()['items']

query — строка ключевых слов, разделенных пробелами.

  • HEADERS

    • Accept: application/json
    • Authorization: Bearer ***

Ответ ←

HTTP/1.1 200 OK
Content-Type: application/json

{
    "items": [
        {
            "name": "МТС Домашний интернет, ТВ и Телефония РФ",
            "description": "МТС Домашний интернет, ТВ и Телефония РФ",
            "uri": null,
            "data": {
                "id": 23729,
                "logoUrl": "https://static.qiwi.com/img/providers/logoBig/23729_l.png",
                ...
            }
        },
        ...
    ]
}
# Поиск провайдера: парсинг ответа
prv = qiwi_com_search('xxxxxxxxxxxxxxxxxxx','Билайн домашний интернет')[0]['data']['id']
print(str(prv))

Успешный JSON-ответ содержит идентификаторы найденных провайдеров:

Поле ответа Тип Описание
items Array Список провайдеров
items[].data.id Number Идентификатор провайдера

Поиск сотового оператора по номеру телефона {#provider-search-mobile}

Используйте этот запрос для поиска идентификатора провайдера сотового оператора. В запросе указывается номер мобильного телефона в формате 11 цифр, начинающийся с цифры 7. Действует только для мобильных операторов РФ и Казахстана.

Запрос → GET

curl "https://edge.qiwi.com/qw-mobile-providers-resolver/v1/providers?phoneNumber=79277010101" \
--header "Accept: application/json" \
--header "Authorization: Bearer <токен API>" \
GET /qw-mobile-providers-resolver/v1/providers?phoneNumber=79270010101 HTTP/1.1
Accept: application/json
Host: edge.qiwi.com
Authorization: Bearer <токен API>
import requests

# поиск на qiwi.com - определение id провайдера по номеру телефона
def qiwi_com_search_mobile(api_access_token, number):
    s = requests.Session()
    s.headers['authorization'] = 'Bearer ' + api_access_token
    search = s.get('https://edge.qiwi.com/qw-mobile-providers-resolver/v1/providers', params={'phoneNumber':number})
    return search.json()['mobileOperatorProviderList']

value — номер мобильного телефона в формате 11 цифр, начинающийся с 7.

  • HEADERS

    • Accept: application/json
    • Authorization: Bearer ***

Ответ ←

HTTP/1.1 200 OK
Content-Type: application/json

{
  "mobileOperatorProviderList": [
    { 
      "id": 3,
      "shortName": "МегаФон Столичный филиал",
      "logoUrl": "https://static.qiwi.com/img/providers/logoBig/3_l.png"
    }
  ]
}
# Поиск провайдера: парсинг ответа
prv = qiwi_com_search_mobile('xxxxxxxxxxxxxxxxxxx','79270010101')[0]['id']
print(str(prv))

Успешный JSON-ответ содержит идентификатор найденного провайдера:

Поле ответа Тип Описание
mobileOperatorProviderList Array Информация о провайдере
--- --- ---
id Number Идентификатор провайдера
shortName String Название провайдера

Модели данных API {#payments_model}

Класс Payment {#payment_obj}

Класс, описывающий данные для платежа на провайдера в QIWI Кошельке.

Элемент Тип Описание
id String Обязательный параметр. Клиентский ID транзакции (максимум 20 цифр). Должен быть уникальным для каждой транзакции и увеличиваться с каждой последующей транзакцией. Для выполнения этих требований рекомендуется задавать равным 1000*(Standard Unix time в секундах).
sum Object Обязательный параметр. Данные о сумме платежа
----- ----- -----
sum.amount Number Обязательный параметр. Сумма (можно указать рубли и копейки, разделитель .). Положительное число, округленное до 2 знаков после десятичной точки. При большем числе знаков значение будет округлено до копеек в меньшую сторону.
sum.currency String Обязательный параметр. Валюта (только 643, рубли)
----- ----- -----
paymentMethod Object Обязательный параметр. Объект, определяющий обработку платежа процессингом QIWI Wallet.
----- ----- -----
paymentMethod.type String Обязательный параметр. Константа, Account
paymentMethod.accountId String Обязательный параметр. Константа, 643
----- ----- -----
fields Object Обязательный параметр. Реквизиты платежа. Состав полей зависит от провайдера.
comment String Комментарий к платежу. Используется только для переводов на QIWI кошелек и при конвертации

Класс PaymentInfo {#payment_info}

{
    "id": "150217833198900",
    "terms": "99",
    "fields": {
        "account": "79121238345"
    },
    "sum": {
        "amount": 100,
        "currency": "643"
    },
    "transaction": {
        "id": "11155897070",
        "state": {
            "code": "Accepted"
        }
    },
    "source": "account_643",
    "comment": "Комментарий"
}

Пример ответа с маскированным полем

{
  "id": "21131343",
  "terms": "1963",
  "fields": {
          "account": "4256********1231"
    },
    "sum": {
         "amount": 1000,
         "currency": "643"
    },
    "source": "account_643",
    "transaction": {
         "id": "4969142201",
         "state": {
            "code": "Accepted"
          }
    }
}

Класс, описывающий данные платежной транзакции в QIWI Кошельке. Возвращается в ответе на запросы к платежному API.

Элемент Тип Описание
id Number Копия параметра id из платежного запроса
terms String Идентификатор провайдера, на которого был отправлен платеж
fields Object Копия объекта fields из платежного запроса. Номер карты (если был выполнен перевод на карту) возвращается в маскированном виде
sum Object Копия объекта sum из платежного запроса
source String Константа, account_643
comment String Копия параметра comment из платежного запроса (возвращается, если присутствует в запросе)
transaction Object Объект с данными о транзакции в процессинге QIWI Wallet.
----- ----- ------
transaction.id String ID транзакции в процессинге QIWI Wallet
transaction.state Object Объект содержит текущее состояние транзакции в процессинге QIWI Wallet.
----- ----- ------
state.code String Текущий статус транзакции, только значение Accepted (платеж принят к проведению). Финальный результат транзакции можно узнать в истории платежей.

Счета {#invoices}

Счет в QIWI Wallet API — универсальная заявка на платеж или перевод с QIWI кошелька.

В API поддерживаются операции выставления, оплаты и отмены счетов, а также запрос списка неоплаченных счетов вашего QIWI кошелька.

Выставление счета на QIWI кошелек {#invoice}

Для выставления счета на QIWI Кошелек используется протокол API P2P-счетов. Для авторизации используется токен P2P.

Выпуск токена P2P {#p2p-token}

Вы можете получить токен P2P на p2p.qiwi.com в личном кабинете, или использовать представленный ниже запрос. Этим запросом можно также настроить адрес уведомлений об оплате счетов.

Запрос возвращает в ответе пару токенов P2P:

Запрос → POST

curl -X POST \
  https://edge.qiwi.com/widgets-api/api/p2p/protected/keys/create \
  -H 'Authorization: Bearer <токен API QIWI Кошелька>' \
  -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -H 'cache-control: no-cache' \
  -d '{"keysPairName":"Name","serverNotificationsUrl":"https://test.com"}'
POST /widgets-api/api/p2p/protected/keys/create HTTP/1.1
Host: edge.qiwi.com
Authorization: Bearer <токен API QIWI Кошелька>
Content-Type: application/json
Accept: application/json
User-Agent: ****

{"keysPairName":"Name", "serverNotificationsUrl":"https://test.com"}
HTTP/1.1 200 OK
Content-Type: application/json

{"PublicKey": "XXX", "SecretKey": "YYY"}
  • URL /widgets-api/api/p2p/protected/keys/create

  • Параметры

Для авторизации используется токен API QIWI Кошелька.

Параметры передаются в теле запроса как JSON:

Название Тип Описание
keysPairName String Название пары токенов P2P (произвольная строка)
serverNotificationsUrl String URL для уведомлений об оплате счетов (необязательный параметр)

Список счетов {#list_invoice}

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

Запрос → GET

curl -X GET \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer ***' \
  'https://edge.qiwi.com/checkout-api/api/bill/search?statuses=READY_FOR_PAY&rows=50'
GET /checkout-api/api/bill/search?statuses=READY_FOR_PAY&rows=50 HTTP/1.1
Accept: application/json
Authorization: Bearer ***
Host: edge.qiwi.com
User-Agent: ****
  • URL /checkout-api/api/bill/search?statuses=READY_FOR_PAY&parameter=value

  • HEADERS

    • Accept: application/json
    • Authorization: Bearer SecretKey
  • Параметры

Параметры передаются в строке URL запроса:

Название Тип Описание
statuses String Статус неоплаченного счета. Обязательный параметр. Только строка READY_FOR_PAY
rows Integer Максимальное число счетов в ответе, для разбивки списка на страницы. Целое число от 1 до 50. По умолчанию возвращается не более 50 счетов.
min_creation_datetime Long Нижняя временная граница для поиска счетов, Unix-time
max_creation_datetime Long Верхняя временная граница для поиска счетов, Unix-time
next_id Number Начальный идентификатор счета для поиска. Будет возвращен список счетов с идентификаторами, равными или меньше этого значения. Используется для продолжения списка, разбитого на страницы.
next_creation_datetime Long Начальное время для поиска (возвращаются только счета, выставленные ранее этого времени), Unix-time. Используется для продолжения списка, разбитого на страницы.

Ответ ←

HTTP/1.1 200 OK
Content-Type: application/json

{
  "bills": [
    {
      "id": 1063702405,
      "external_id": "154140605",
      "creation_datetime": 1523025585000,
      "expiration_datetime": 1523026003808,
      "sum": {
        "currency": 643,
        "amount": 100
      },
      "status": "READY_FOR_PAY",
      "type": "MERCHANT",
      "repetitive": false,
      "provider": {
        "id": 480706,
        "short_name": "Интернет-магазин цветов",
        "long_name": "ООО «Ромашка»",
        "logo_url":"https://static.qiwi.com/img/providers/logoBig/480706_l.png"
      },
      "comment": "Пополнение счета 13515573",
      "pay_url":"https://oplata.qiwi.com/form?shop=480706&transaction=102263702405"
    }
  ]
}

Успешный JSON-ответ содержит список неоплаченных счетов вашего кошелька, соответствующих заданному фильтру:

Поле ответа Тип Описание
bills Array[Object] Список счетов.
Длина списка равна или меньше параметру rows из запроса, или максимально 50, если параметр не указан
bills[].id Integer Идентификатор счета в QIWI Кошельке
bills[].external_id String Идентификатор счета у мерчанта
bills[].creation_datetime Long Дата/время создания счета, Unix-time
bills[].expiration_datetime Long Дата/время окончания срока действия счета, Unix-time
bills[].sum Object Сведения о сумме счета
--- ---- ----
sum.currency Integer Валюта суммы счета
sum.amount Number Сумма счета
--- ---- ----
bills[].status String Константа, READY_FOR_PAY
bills[].type String Константа, MERCHANT
bills[].repetitive Boolean Служебное поле
bills[].provider Object Информация о мерчанте
--- ---- ----
provider.id Integer Идентификатор мерчанта в QIWI
provider.short_name String Сокращенное название мерчанта
provider.long_name String Полное название мерчанта
provider.logo_url String Ссылка на логотип мерчанта
--- ---- ----
bills[].comment String Комментарий к счету
bills[].pay_url String Ссылка для оплаты счета на Платежной форме QIWI

Оплата счета {#paywallet_invoice}

Метод выполняет безусловную оплату счета без SMS-подтверждения.

Запрос → POST

curl -X POST \
  --header 'Content-Type: application/json;charset=UTF-8' \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer 68ec21fd52e4244838946dd07ed225a1' \
  -d '{
      "invoice_uid": "1063702405",
      "currency": "643"
    }' \
  'https://edge.qiwi.com/checkout-api/invoice/pay/wallet'
POST /checkout-api/invoice/pay/wallet HTTP/1.1
Accept: application/json
Content-type: application/json
Authorization: Bearer ***
Host: edge.qiwi.com
User-Agent: ****

{
   "invoice_uid": "1063702405",
   "currency": "643"
}
  • URL /checkout-api/invoice/pay/wallet

  • HEADERS

    • Accept: application/json
    • Content-type: application/json
    • Authorization: Bearer SecretKey
  • Параметры

Обязательные параметры в теле запроса:

Название Тип Описание
invoice_uid String ID счета в QIWI; берется из значения bills[].id данных о счете
currency String Валюта суммы счета; берется из значения bills[].sum.currency данных о счете

Ответ ←

HTTP/1.1 200 OK
Content-Type: application/json

{
  "invoice_status": "PAID_STATUS",
  "is_sms_confirm": false,
  "WALLET_ACCEPT_PAY_RESULT": {}
}

Успешный JSON-ответ содержит статус оплаченного счета:

Поле ответа Тип Описание
invoice_status String Строка кода статуса оплаты счета, PAID_STATUS. Любой другой статус означает неуспех платежной транзакции.
is_sms_confirm String Признак подтверждения по SMS

Отмена неоплаченного счета {#cancel_invoice}

Метод отклоняет неоплаченный счет, что делает его недоступным для оплаты.

Запрос → POST

curl -X POST \
  --header 'Accept: application/json' \
  --header 'Authorization: Bearer ***' \
  --header 'Content-Type: application/json;charset=UTF-8' \
  -d '{ "id": 1034353453 }' \
  'https://edge.qiwi.com/checkout-api/api/bill/reject'
POST /checkout-api/api/bill/reject HTTP/1.1
Accept: application/json
Authorization: Bearer ***
Content-type: application/json
Host: edge.qiwi.com
User-Agent: ****

{
  "id": 1034353453
}
  • URL /checkout-api/api/bill/reject

  • HEADERS

    • Accept: application/json
    • Content-type: application/json
    • Authorization: Bearer SecretKey
  • Параметры

Обязательный параметр передается в теле запроса в формате JSON:

Название Тип Описание
id Integer ID счета для отмены; берется из значения bills[].id данных о счете

Ответ ←

HTTP/1.1 200 OK

Успешный ответ содержит HTTP-код 200.