Інтеграція 1С-Бітрікс з платіжною системою Mir Pay
Mir Pay — російський аналог Google Pay та Apple Pay, розроблений НСПК (Національна система платіжних карток). Працює на Android-пристроях з NFC, підтримує картки платіжної системи «Мир». З 2022 року, після обмежень Google Pay та Apple Pay для російських карток, Mir Pay став основним мобільним платіжним методом для власників карток «Мир». Інтеграція в інтернет-магазин на 1С-Бітрікс реалізується через Mir Pay Web API або через підтримуючий еквайринг.
Принцип роботи Mir Pay у вебі
Mir Pay Web — протокол онлайн-оплати через додаток Mir Pay на смартфоні. Схема:
- Покупець натискає кнопку Mir Pay на сайті
- Сайт ініціює транзакцію через API НСПК
- На смартфон покупця надходить push-повідомлення з запитом підтвердження
- Покупець підтверджує відбитком пальця або PIN-кодом
- НСПК повертає результат транзакції
Альтернативний варіант — через QR-код Mir Pay (аналогічно СБП, але по інфраструктурі «Мир»).
Підключення через еквайринг
Більшість банків — учасників НСПК підтримують Mir Pay у своєму інтернет-еквайрингу. Сбер, Тінькофф, ВТБ, Россельхозбанк додають кнопку Mir Pay у форму оплати автоматично. Специфічних дій на стороні 1С-Бітрікс не потрібно — метод з'являється у формі за наявності у договорі.
Пряма інтеграція через НСПК Mir Pay Web API
Для самостійної інтеграції:
class MirPayWebGateway
{
private const API_URL = 'https://payment.mirpay.ru/v1/';
private string $merchantId;
private string $merchantKey;
private string $terminalId;
public function createSession(array $data): array
{
$timestamp = date('Y-m-d\TH:i:s\Z');
$nonce = bin2hex(random_bytes(16));
$payload = [
'merchant_id' => $this->merchantId,
'terminal_id' => $this->terminalId,
'order_id' => 'BX_' . $data['orderId'],
'amount' => (int)round($data['amount'] * 100), // копійки
'currency' => 'RUB',
'description' => 'Замовлення №' . $data['orderId'],
'return_url' => $data['returnUrl'],
'notify_url' => $data['notifyUrl'],
'timestamp' => $timestamp,
'nonce' => $nonce,
];
$payload['signature'] = $this->sign($payload);
$ch = curl_init(self::API_URL . 'sessions');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode($payload),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
]);
$result = json_decode(curl_exec($ch), true);
curl_close($ch);
return $result;
}
private function sign(array $params): string
{
ksort($params);
$signString = implode('|', array_values($params)) . '|' . $this->merchantKey;
return hash('sha256', $signString);
}
}
Кнопка на сторінці
// mir-pay-web.js — надається НСПК
MirPayWeb.init({
merchantId: 'YOUR_MERCHANT_ID',
sessionId: mirPaySessionId, // отримано з сервера
container: '#mir-pay-button',
locale: 'ru',
onSuccess: function(result) {
// Перенаправляємо на сторінку успіху
window.location.href = '/checkout/success/?order=' + orderId;
},
onError: function(error) {
console.error('Mir Pay error:', error);
},
});
Обробка повідомлень
// /bitrix/tools/mirpay_notify.php
$body = file_get_contents('php://input');
$data = json_decode($body, true);
// Верифікація підпису
$receivedSig = $data['signature'] ?? '';
$checkData = $data;
unset($checkData['signature']);
ksort($checkData);
$expected = hash('sha256', implode('|', array_values($checkData)) . '|' . MIRPAY_KEY);
if (!hash_equals($expected, $receivedSig)) {
http_response_code(403);
exit('Invalid signature');
}
if (($data['status'] ?? '') === 'COMPLETED') {
$orderId = str_replace('BX_', '', $data['order_id']);
$order = \Bitrix\Sale\Order::loadByAccountNumber($orderId);
$payment = $order->getPaymentCollection()->current();
$payment->setPaid('Y');
$payment->save();
}
http_response_code(200);
echo 'OK';
Відображення кнопки лише для Android
// Mir Pay Web працює лише на Android із встановленим додатком Mir Pay
const isMirPayAvailable = () => {
const ua = navigator.userAgent;
const isAndroid = /Android/i.test(ua);
// MirPayWeb.isAvailable() — метод SDK для перевірки встановленого додатка
return isAndroid && typeof MirPayWeb !== 'undefined' && MirPayWeb.isAvailable();
};
if (isMirPayAvailable()) {
document.querySelector('.mirpay-btn-wrapper').style.display = 'block';
}
Терміни
| Завдання | Термін |
|---|---|
| Підключення через банківський еквайринг | 0 днів — включено в еквайринг |
| Пряма інтеграція через НСПК Mir Pay Web | 3–4 дні |
| Тестування на Android з додатком Mir Pay | 1 день |







