Вопросы
api_help@qiwi.com
NAV Navbar
PHP

Как пользоваться API QIWI Мастера

Чтобы автоматически управлять картами в составе пакета QIWI Мастер, используйте API. С помощью API вы сможете:

Для настройки API и работы с ним вам потребуются базовые знания знание программирования на языках PHP или Python. Далее мы пошагово расскажем как отправлять запросы и обрабатывать ответы от сервиса QIWI. В примерах мы будем использовать язык программирования PHP. Для удобства скопируйте код к себе в рабочий файл.

Установка и настройка сервера

Пропустите этот шаг если вы знаете, как запустить сервер на локальном компьютере или на хостинге.

Для отправки запросов на API и обработки ответов вам нужно настроить сервер. Разберем, как установить сервер Apache и подготовить его к работе с API на локальном компьютере или арендовать сервер в интернете.

Сервер на персональном компьютере

В браузере появится текст: заработало.

alt_text

Аренда сервера у хостинг-компании

Этот способ быстрее, но нужен свободный домен, с которого будут отправляться запросы. Некоторые хостинг-провайдеры предоставляют домен в подарок при покупке хостинга. Желательно использовать SSL сертификат и отправлять запросы по https-протоколу. SSL сертификат нужен, чтобы ваш трафик не смогли расшифровать и подменить данные при отправке.

Для работы с API достаточно оплатить любой виртуальный хостинг с поддержкой скриптов на PHP и интерфейсом на cPanel (например тариф Host-A от Reg.ru). Виртуальные сервера VDS\VPS тоже подойдут, но на настройку понадобится больше времени.

После покупки хостинга откройте административную панель cPanel (доступы вам пришлют на почту).

Если вы купили хостинг с доменом — ничего настраивать не нужно. Переходите в менеджер файлов.

alt_text

заработало

Подготовка к работе с API

Перед отправкой запросов в API нужно получить специальный токен — это ваш ключ доступа к кошельку. Получить токен можно в разделе https://qiwi.com/api . При создании токена отметьте следующие разрешения:

alt_text

Отправка запросов и обработка ответа

Любой запрос содержит заголовки и тело запроса. В заголовках передаётся тип запроса и авторизационный токен, а в теле — данные для отправки на сервер.

alt_text

Покупка пакета QIWI мастер

Код запроса для покупки пакета QIWI Мастер:

<?php

$qiwiToken = "токен вашего кошелька";
$qiwiNumber = "79999999999"; //номер вашего кошелька
$urlPayment = 'https://edge.qiwi.com/sinap/api/v2/terms/28004/payments';
$header = array();
$header[] = "Content-Type: application/json";
$header[] = "Accept: application/json";
$header[] = "Authorization: Bearer " . $qiwiToken;
$data = [
    'id' => ''.time().'', // клиентский id платежа - им может бытьуникальный нарастающий идентификатор, например время транзакции
    'sum' => [
        'amount' => 2999, //сумма платежа
        'currency' => '643' // валюта платежа - рубли
    ],
    'paymentMethod' => [
        'type' => 'Account',
        'accountId' => '643'
    ],
    'fields' => [
        'account' => $qiwiNumber, //номер вашего кошелька
        'vas_alias' => 'qvc-master'
    ]
];
$data = json_encode($data);

if ($curl = curl_init()) {
    curl_setopt($curl, CURLOPT_URL, $urlPayment);
    curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_POST, true);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
    $paymentInfo = curl_exec($curl);
    curl_close($curl);
    $paymentInfo = json_decode($paymentInfo);
}
echo $paymentInfo->transaction->state->code; //покажет статус транзакции

?>

В теле запроса нужно передать объект Payment и дополнительные обязательные поля:

Справа пример запроса на PHP, который выведет статус покупки пакета. Скопируйте этот код в файл index.php и перейдите в браузере на cтраницу:

После исполнения скрипта в браузере появится статус транзакции.

Покупка карты

Шаг 1. Создание заказа

Код запроса для создания заказа карты в составе пакета QIWI Мастер

<?php

$qiwiToken = "токен"; //токен вашего кошелька
$qiwiNumber = "79999999999"; //номер вашего кошелька
$cardAlias = "qvc-cpa";  // какую карту заказываем, debit  (qvc-cpa-debit) за 199 руб. или prepaid (qvc-cpa) за 99 руб.
	//заказ карты				
$urlOrderCard = 'https://edge.qiwi.com/cards/v2/persons/'.$qiwiNumber.'/orders';
$header = array();
$header[] = "Content-Type: application/json";
$header[] = "Accept: application/json";
$header[] = "Authorization: Bearer " . $qiwiToken;
$data = [
         'cardAlias' => ''.$cardAlias.'', // клиентский id платежа - им может любой уникальный нарастающий идентификатор, например время транзакции
         ];    
$data = json_encode($data);
if ($curl = curl_init()) {
    curl_setopt($curl, CURLOPT_URL, $urlOrderCard);
    curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_POST, true);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
    $cardOrder = curl_exec($curl);
    curl_close($curl);
    $cardOrder = json_decode($cardOrder);
}
//print_r($cardOrder); //ответ сервера
?>

Отправьте POST-запрос на адрес:

https://edge.qiwi.com/cards/v2/persons/<номер кошелька>/orders

В ссылке запроса укажите номер кошелька с купленным пакетом QIWI Мастер. В теле запроса отправьте параметр cardAlias с возможными значениями:

В ответе на запрос придет номер заказа, который будет нужен для второго шага.

Шаг 2. Подтверждение заказа карты

Код для подтверждения заказа карты в составе пакета QIWI Мастер

<?php

$urlConfirm = 'https://edge.qiwi.com/cards/v2/persons/'.$qiwiNumber.'/orders/'.$cardOrder->id.'/submit';

$header = array();
$header[] = "Content-Type: application/json";
$header[] = "Accept: application/json";
$header[] = "Authorization: Bearer " . $qiwiToken;
if ($curl = curl_init()) {
    curl_setopt($curl, CURLOPT_URL, $urlConfirm);
    curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PUT');
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
    $cardConfirm = curl_exec($curl);
    curl_close($curl);
    $cardConfirm = json_decode($cardConfirm);
}

//print_r($cardConfirm); //ответ сервера
?>

Отправьте PUT-запрос на адрес:

https://edge.qiwi.com/cards/v2/persons/<номер кошелька>/orders/<номер заказа из ответа в Шаге 1>/submit

В ссылке запроса укажите номер кошелька с купленным пакетом QIWI Мастер и номер заказа из ответа в предыдущем шаге (поле id). В теле запроса ничего не указывайте.

Успешный ответ на запрос будет содержать статус заказа.

Шаг 3. Покупка карты

Код для покупки карты

<?php

	$urlBuy = 'https://edge.qiwi.com/sinap/api/v2/terms/32064/payments';
    $header = array();
    $header[] = "Content-Type: application/json";
    $header[] = "Accept: application/json";
	$header[] = "Authorization: Bearer " . $qiwiToken;
	$data = [
            'id' => ''.time().'', // клиентский id платежа - им может быть уникальный нарастающий идентификатор
            'sum' => [
                'amount' => $cardConfirm->price->amount, //сумма платежа, если бесплатная то 0
                'currency' => '643' // валюта платежа - рубли
            ],
            'paymentMethod' => [
                'type' => 'Account',
                'accountId' => '643'
            ],
            'fields' => [
                'account' => $qiwiNumber, //номер вашего кошелька
			'order_id' => $cardConfirm->id // номер подтвержденного заказа
            ]
        ];
    $data = json_encode($data);
	
    if ($curl = curl_init()) {
            curl_setopt($curl, CURLOPT_URL, $urlBuy);
            curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
            curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($curl, CURLOPT_POST, true);
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
            curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
            $cardBuy = curl_exec($curl);
            curl_close($curl);
            $cardBuy = json_decode($cardBuy);
    }
    //print_r($cardBuy); // покажет ответ, который прислал сервер QIWI
    echo $cardBuy->transaction->state->code; //покажет статус транзакции
?>

Отправьте POST-запрос на адрес:

https://edge.qiwi.com/sinap/api/v2/terms/32064/payments

В теле запроса находится JSON-объект Payment, в котором нужно передать обязательные значения:

Список карт с реквизитами

Код для вывода номера карты, CVV и даты окончания обслуживания

<?php

$qiwiToken = "токен"; //токен вашего кошелька
$qiwiNumber = "79999999999"; //номер вашего кошелька
$urlCardList= 'https://edge.qiwi.com/cards/v1/cards/?vas-alias=qvc-master';
$header = array();
//$header[] = "Content-Type: application/x-www-form-urlencoded";
$header[] = "Accept: application/json";
$header[] = "Authorization: Bearer " . $qiwiToken;
if ($curl = curl_init()) {
       curl_setopt($curl, CURLOPT_URL, $urlCardList);
       curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
       curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
       curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
       curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
       curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
       $cardOrder = curl_exec($curl);
       curl_close($curl);
       $cardOrder = json_decode($cardOrder);
}
		
foreach($cardOrder as $value){
	$urlCardNumber = 'https://edge.qiwi.com/cards/v1/cards/'.$value->qvx->id.'/details';
    $header = array();
    $header[] = "Content-Type: application/json";
    $header[] = "Accept: application/json";
	$header[] = "Authorization: Bearer " . $qiwiToken;
	$data = [
               'operationId' => ''.time().'', // клиентский id платежа - им может былюбой уникальный нарастающий идентификатор, например время транзакции
    ];
    $data = json_encode($data);
    if ($curl = curl_init()) {
          curl_setopt($curl, CURLOPT_URL, $urlCardNumber);
          curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
          curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
          curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
          curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PUT');
          curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
          curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
		  curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
          $cardNumber = curl_exec($curl);
          curl_close($curl);
          $cardNumber = json_decode($cardNumber);
    }

	echo "Номер карты: ".$cardNumber->pan."  CVV: ".$cardNumber->cvv."  Месяц/год: ".$value->qvx->cardExpireMonth."/".$value->qvx->cardExpireYear." &lt;br/>";
    }
?>

Чтобы получить список карт, нужно отправить GET-запрос без параметров на адрес

https://edge.qiwi.com/cards/v1/cards/?vas-alias=qvc-master

Для получения реквизитов карт (PAN и CVV) нужен отдельный PUT-запрос на адрес

https://edge.qiwi.com/cards/v1/cards/v1/cards/<ID карты>/details

с параметрами:

PHP