13 Commits

666 changed files with 148704 additions and 602 deletions

View File

@@ -0,0 +1,31 @@
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: bug
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Initialize SDK with '...'
2. Call method '...'
3. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Environment (please complete the following information):**
- PHP Version: [e.g. 8.2]
- SDK Version [e.g. 1.0.0]
- OS: [e.g. Ubuntu 22.04]
**Additional context**
Add any other context about the problem here.

8
.gitignore vendored
View File

@@ -4,3 +4,11 @@
.env
phpunit.xml
composer.lock
/build/
*.pem
*.key
*.crt
*.pfx
.DS_Store
.idea/
.vscode/

65
CONTRIBUTING.md Normal file
View File

@@ -0,0 +1,65 @@
# Contributing to Alfa Bank SDK
Thank you for your interest in contributing to the unofficial Alfa Bank SDK! We welcome pull requests, bug reports, and feature requests.
## Getting Started
1. **Fork the repository** on GitHub.
2. **Clone your fork** locally:
```bash
git clone https://github.com/your-username/alfa-bank-sdk.git
cd alfa-bank-sdk
```
3. **Install dependencies**:
```bash
composer install
```
## Development Standards (Strict)
To maintain the "Enterprise Grade" quality of this SDK, all contributions must adhere to the following architectural rules:
### 1. Requests & Responses
- **DTOs Only:** Never pass raw arrays to a Request constructor. Always create a dedicated DTO in `src/Data/...`.
- **Strict Typing:** All Request classes must implement the `createDtoFromResponse(Response $response)` method. Returning raw JSON is forbidden.
- **Saloon v3:** Follow [Saloon PHP](https://docs.saloon.dev) best practices.
### 2. Pagination
- If an endpoint returns a list (e.g. transactions, accounts), the Request class **MUST**:
1. Implement `Saloon\PaginationPlugin\Contracts\Paginatable`.
2. Use the `Apoloz\AlfaBank\Traits\HasAlfaPagination` trait.
3. Return a `Spatie\LaravelData\DataCollection` in `createDtoFromResponse`.
### 3. Security
- **No Secrets:** Never commit real keys (`.pem`, `.key`, `.pfx`) or credentials.
- **Crypto:** Use the `CmsSigner` and `JwsSigner` utilities for cryptographic operations. Do not roll your own crypto logic.
## Running Quality Checks
We use **Pest** for testing and **PHPStan** for static analysis.
```bash
# Run Unit & Feature Tests
vendor/bin/pest
# Run Static Analysis (Level 5)
vendor/bin/phpstan analyse
```
**PRs with failing tests or PHPStan errors will not be merged.**
## Submitting a Pull Request
1. Create a new branch: `git checkout -b feature/my-new-feature`.
2. Write tests for your new feature (we aim for high coverage).
3. Commit changes with clear, descriptive messages.
4. Push to your fork and open a Pull Request against `main`.
## Reporting Bugs
Please open an issue on GitHub with:
- A clear description of the bug.
- Minimal reproducible code example.
- SDK version and PHP version.
Thank you for helping improve this SDK!

21
LICENSE Normal file
View File

@@ -0,0 +1,21 @@
MIT License
Copyright (c) 2023 Anatoliy Poloz
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

341
README.md
View File

@@ -1,145 +1,248 @@
# Alfa Bank SDK (Unofficial)
This is an unofficial PHP SDK for the [Alfa Bank API](https://developers.alfabank.ru/), built using [Saloon](https://docs.saloon.dev) and [Spatie Laravel Data](https://spatie.be/docs/laravel-data).
Профессиональная PHP-библиотека для интеграции с API Альфа-Банка (BaaS и СБП). Построена на базе [Saloon v3](https://docs.saloon.dev) и [Spatie Laravel Data](https://spatie.be/docs/laravel-data).
## Requirements
## Требования
- PHP 8.2+
- OpenSSL (for certificate generation/handling)
- [Saloon](https://docs.saloon.dev)
- [Saloon](https://docs.saloon.dev) v3.0+
- [Spatie Laravel Data](https://spatie.be/docs/laravel-data)
- [phpseclib](https://phpseclib.org/) (for Card Encryption)
## Installation
## Установка
```bash
composer require apoloz/alfa-bank-sdk
```
## Laravel Integration
The package supports auto-discovery. Publish the config file:
## Конфигурация (Laravel)
Опубликуйте файл конфигурации:
```bash
php artisan vendor:publish --tag=alfa-bank-config
```
Configure your `.env`:
```env
ALFA_BAAS_CERT_PATH=/path/to/cert.cer
ALFA_BAAS_KEY_PATH=/path/to/key.key
ALFA_BAAS_ENV=sandbox
### Настройка `.env`
ALFA_SBP_CERT_PATH=/path/to/cert.cer
ALFA_SBP_KEY_PATH=/path/to/key.key
ALFA_SBP_KEY_ALIAS=your-alias
ALFA_SBP_ENV=sandbox
Добавьте следующие переменные в ваш файл `.env`. Вам понадобятся сертификаты (PEM) и ключи.
```dotenv
# --- BaaS (Номинальные счета, Выплаты) ---
ALFA_BAAS_ENVIRONMENT=sandbox # или production
ALFA_BAAS_CLIENT_ID=your-client-id
ALFA_BAAS_CLIENT_SECRET=your-client-secret
ALFA_BAAS_CERT_PATH=storage/certs/baas_cert.pem
ALFA_BAAS_KEY_PATH=storage/certs/baas_key.pem
# Опционально: Ключи для CMS-подписи (если отличаются от транспортных)
# ALFA_BAAS_SIGNING_CERT_PATH=storage/certs/sign_cert.pem
# ALFA_BAAS_SIGNING_KEY_PATH=storage/certs/sign_key.pem
# --- SBP (СБП, QR-коды) ---
ALFA_SBP_ENVIRONMENT=sandbox # или production
ALFA_SBP_ALIAS=your-key-name-alias
ALFA_SBP_CERT_PATH=storage/certs/sbp_cert.pem
ALFA_SBP_KEY_PATH=storage/certs/sbp_key.pem
# --- Webhooks ---
ALFA_WEBHOOK_USER=alfa
ALFA_WEBHOOK_PASSWORD=secret
# Для проверки JWS-подписи вебхуков (опционально)
ALFA_WEBHOOK_PUBLIC_KEY=storage/certs/alfa_public_key.pem
```
Now you can inject the connectors:
```php
use Apoloz\AlfaBank\AlfaBankConnector;
### Файл конфигурации (`config/alfa-bank.php`)
public function index(AlfaBankConnector $connector) {
$connector->withToken('...')->send(new GetNominalAccountsRequest());
Вот как выглядит структура конфигурационного файла по умолчанию. Вы можете использовать его для тонкой настройки, например, чтобы задать пути динамически.
```php
return [
'baas' => [
'environment' => env('ALFA_BAAS_ENVIRONMENT', 'sandbox'),
'client_id' => env('ALFA_BAAS_CLIENT_ID'),
'client_secret' => env('ALFA_BAAS_CLIENT_SECRET'),
'certificate_path' => env('ALFA_BAAS_CERT_PATH'),
'private_key_path' => env('ALFA_BAAS_KEY_PATH'),
// ...
],
'sbp' => [
'environment' => env('ALFA_SBP_ENVIRONMENT', 'sandbox'),
'key_name_alias' => env('ALFA_SBP_ALIAS'),
'certificate_path' => env('ALFA_SBP_CERT_PATH'),
'private_key_path' => env('ALFA_SBP_KEY_PATH'),
// ...
],
'webhook' => [
'user' => env('ALFA_WEBHOOK_USER'),
'password' => env('ALFA_WEBHOOK_PASSWORD'),
'alfa_public_key' => env('ALFA_WEBHOOK_PUBLIC_KEY'),
],
];
```
## Подключение и Безопасность
SDK поддерживает две разные модели безопасности, используемые в API Альфа-Банка.
### 1. Подключение к СБП (Pay-in)
**Шаги для получения доступа:**
1. Генерируете пару ключей: `openssl req -x509 -newkey rsa:2048 -keyout client.key -out client.crt -nodes -days 3650`.
2. Отправляете `client.crt` менеджеру банка (acquiring@alfabank.ru).
3. Получаете от банка `alias` (key-name) и `TermNo`.
**Поток данных и подпись:**
* **Transport**: Обязательный **MTLS**. Вы должны передать `client.crt` и `client.key` в конфигурацию Guzzle/Saloon.
* **Payload**: Тело запроса канонизируется по алгоритму **JCS**.
* **Signature**: SHA256withRSA подпись JCS-строки помещается в заголовок `Authorization`.
**SDK делает это автоматически**:
```php
// В config/alfa-bank.php
'sbp' => [
'alias' => 'my-company-alias',
'private_key' => storage_path('certs/client.key'),
'cert' => storage_path('certs/client.crt'),
],
```
---
### 2. Подключение к BaaS (Номинальные счета)
**Шаги для получения доступа:**
1. Регистрация в личном кабинете партнера.
2. Получение `client_id` и `client_secret` для OAuth2.
3. Регистрация публичного ключа для проверки подписей выплат.
**Поток данных и подпись:**
* **Auth**: Стандартный OAuth2 Bearer Token.
* **Payload Signature**: Для критических операций (выплаты, идентификация) требуется `digestSignatures`. Это массив CMS-подписей (PKCS7) в формате Base64, которыми подписываются финансовые поля.
**Пример формирования CMS в SDK:**
```php
use Apoloz\AlfaBank\Utils\CmsSigner;
$payload = json_encode($dataToSign);
$signature = CmsSigner::sign($payload, $privateKey, $certificate);
// $signature помещается в массив digestSignatures
```
---
## Архитектура и Потоки данных
### Гибридный поток: СБП -> Номинальный счет
```mermaid
sequenceDiagram
participant Client as Покупатель
participant SBP as SDK (SBP Connector)
participant API as Alfa Bank API
participant BaaS as SDK (BaaS Connector)
Note over SBP, API: MTLS + JCS Signature
SBP->>API: 1. GetQrCodeRequest(NominalAcc)
API-->>SBP: 2. QR Payload (URL)
Client->>API: 3. Оплата в приложении (СБП)
Note over API, BaaS: Webhook with Signature
API->>BaaS: 4. Webhook (Входящий платеж)
Note over BaaS, API: OAuth2 + CMS Signature
BaaS->>API: 5. IdentifyTransactionRequest(beneficiaryId)
API-->>BaaS: 6. 200 OK (Зачислено)
```
---
## Примеры использования
### 1. СБП: Прием платежа на номинальный счет
```php
use Apoloz\AlfaBank\Laravel\Facades\Sbp;
use Apoloz\AlfaBank\Sbp\Requests\GetQrCodeRequest;
use Apoloz\AlfaBank\Sbp\Data\QrCodeRequestData;
$response = Sbp::send(new GetQrCodeRequest(
new QrCodeRequestData(
termNo: '90080567',
amount: '10000', // 100.00 RUB
paymentPurpose: 'Пополнение кошелька #123'
)
));
echo "QR URL: " . $response->dto()->payload;
```
### 2. Идентификация платежа (BaaS)
Когда платеж пришел на номинальный счет, его нужно привязать к бенефициару:
```php
use Apoloz\AlfaBank\Requests\NominalAccounts\Identification\IdentifyTransactionRequest;
use Apoloz\AlfaBank\Data\NominalAccounts\Identification\IdentifyRequestData;
use Apoloz\AlfaBank\Data\NominalAccounts\Identification\AmountDistributionData;
$data = new IdentifyRequestData(
transactionId: '1220112MOCO#DS4001415',
accountNumber: '40702810...',
amountDistribution: AmountDistributionData::collect([
['beneficiaryId' => 'BEN-001', 'amount' => '100.00']
], DataCollection::class),
digestSignatures: ... // CMS подпись
);
AlfaBank::send(new IdentifyTransactionRequest($data));
```
### 3. Работа с номинальными счетами (Бенефициары)
... (existing content) ...
### 4. Самозанятые (Регистрация доходов)
```php
use Apoloz\AlfaBank\Requests\SelfEmployed\RegisterIncomeRequest;
use Apoloz\AlfaBank\Data\SelfEmployed\CreateIncomeRequestData;
$data = new CreateIncomeRequestData(
vatin: '1234567890',
name: 'Консультационные услуги',
amount: '5000.00',
date: now()->format('Y-m-d')
);
$response = AlfaBank::send(new RegisterIncomeRequest($data));
```
### 5. Файловый обмен (KYC)
Загрузка сканов документов бенефициаров через pre-signed ссылки:
```php
use Apoloz\AlfaBank\Requests\Files\UploadFileRequest;
$file = fopen('document.pdf', 'r');
$uploadUrl = 'https://baas.alfabank.ru/filebox/...'; // Получено из метода создания бенефициара
AlfaBank::send(new UploadFileRequest($uploadUrl, $file));
```
---
## Продвинутые возможности
### Управление возвратами СБП
Просмотр всей истории попыток возврата по транзакции:
```php
$response = Sbp::send(new GetQrcReversalHistoryRequest($payrrn, $termNo));
foreach ($response->dto()->refunds as $refund) {
echo "Статус возврата: " . $refund->status;
}
```
## Core Usage (Generic PHP)
### 1. Initialize the Connector
### Webhook Handling (Laravel)
```php
use Apoloz\AlfaBank\AlfaBankConnector;
use Apoloz\AlfaBank\Enums\Environment;
$connector = new AlfaBankConnector(
certificatePath: '/path/to/client.cer',
privateKeyPath: '/path/to/private.key',
environment: Environment::SANDBOX
);
// Обработка СБП уведомлений в Listener
public function handle(AlfaWebhookReceived $event) {
if ($event->webhook->isSbp()) {
$data = Sbp::parsePaymentNotification($event->webhook->payload);
Log::info("СБП Оплата: {$data->amount} коп.");
}
}
```
### 2. Authentication
```php
use Apoloz\AlfaBank\Requests\Auth\GetTokenRequest;
$request = new GetTokenRequest(
clientId: 'your-client-id',
clientSecret: 'your-client-secret',
code: 'auth-code',
redirectUri: 'https://your-app.com/callback'
);
$response = $connector->send($request);
$tokenData = $response->dto();
$connector->withToken($tokenData->access_token);
```
### 3. SBP / QR Payouts (C2B)
```php
use Apoloz\AlfaBank\Sbp\SbpConnector;
$sbpConnector = new SbpConnector(
certificatePath: '/path/to/client.cer',
privateKeyPath: '/path/to/private.key',
keyNameAlias: 'your-key-alias',
environment: Environment::SANDBOX
);
$response = $sbpConnector->send(new GetQrCodeRequest($payload));
```
### 4. Utilities
#### Card PAN Encryption
Required for card payouts in Nominal Accounts.
```php
use Apoloz\AlfaBank\Utils\CardEncryptor;
$encryptedPan = CardEncryptor::encrypt(
pan: '4779642610000010',
publicKeyPem: file_get_contents('alfa-card-key.pub')
);
```
#### JSON Web Signature (JWS)
Used for signing some BaaS requests.
```php
use Apoloz\AlfaBank\Utils\JwsSigner;
$jws = JwsSigner::sign(
payload: ['foo' => 'bar'],
privateKeyPem: file_get_contents('my-key.pem'),
certificateSerialNumber: '610003...'
);
```
#### JSON Web Encryption (JWE)
Used for encrypting sensitive BaaS requests.
```php
use Apoloz\AlfaBank\Utils\JweEncryptor;
$jwe = JweEncryptor::encrypt(
jws: $jws,
publicKeyPem: file_get_contents('alfa-cert.cer'),
certificateSerialNumber: '610003...'
);
```
## Features
- **Mutual TLS**: Automated certificate handling.
- **Laravel Ready**: Service Provider and Config included.
- **Typed DTOs**: Comprehensive response parsing.
- **Full Product Coverage**: BaaS (Nominal Accounts, Escrow), SBP (QR, Subscriptions), Digital Ruble.
## License
MIT

179
README_FULL_GUIDE.md Normal file
View File

@@ -0,0 +1,179 @@
# Alfa Bank SDK: The Comprehensive Guide
## 1. Introduction
This SDK provides a unified, strictly-typed PHP interface for the Alfa Bank API. It covers both **Bank-as-a-Service (BaaS)** and **Faster Payments System (SBP)** protocols.
**Key Technologies:**
- **Saloon v3**: Handles HTTP transport, retries, and plugins.
- **Spatie Laravel Data**: Provides Data Transfer Objects (DTOs) for strict typing.
- **OpenSSL**: Manages GOST/RSA signatures and encryption.
---
## 2. Installation & Configuration
### 2.1 Install via Composer
```bash
composer require apoloz/alfa-bank-sdk
```
### 2.2 Laravel Setup
Publish the configuration file:
```bash
php artisan vendor:publish --tag=alfa-bank-config
```
Configure your `.env` file. **Crucially, you need separate keys for Transport (mTLS) and Signing (Business Logic).**
```env
# 1. Transport Security (mTLS) - Required for connection
ALFA_BAAS_CERT_PATH=/path/to/transport.cer
ALFA_BAAS_KEY_PATH=/path/to/transport.key
# 2. Business Logic Signing (CMS/PKCS#7) - Required for creating payments/registries
ALFA_BAAS_SIGNING_CERT_PATH=/path/to/signing.cer
ALFA_BAAS_SIGNING_KEY_PATH=/path/to/signing.key
# 3. Credentials
ALFA_BAAS_CLIENT_ID=your-client-id
ALFA_BAAS_CLIENT_SECRET=your-client-secret
ALFA_BAAS_ENV=sandbox
```
---
## 3. Core Concepts
### 3.1 Facades (Laravel)
Use the facades for clean, static access.
- `AlfaBank`: Access BaaS endpoints (Payments, Accounts, Salary).
- `Sbp`: Access SBP endpoints (QR Codes, C2B/B2C).
### 3.2 DTOs (Data Transfer Objects)
Never pass raw arrays. Use DTOs to ensure your data is valid before it leaves your server.
**Example:**
```php
use Apoloz\AlfaBank\Data\Payments\PaymentData;
$payment = new PaymentData(
amount: 100.00,
payerName: 'My Company',
// ... mandatory fields are enforced here
);
```
### 3.3 Pagination
Iterate through large lists effortlessly.
```php
use Apoloz\AlfaBank\Requests\Statement\GetTransactionsRequest;
$paginator = AlfaBank::paginate(new GetTransactionsRequest($accountNumber));
foreach ($paginator as $transaction) {
// $transaction is a strictly typed DTO
echo $transaction->amount;
}
```
---
## 4. Advanced Security
### 4.1 SBP Body Signing
The SDK handles the complex JSON Canonicalization (JCS) and RSA-SHA256 signing required by the SBP protocol automatically in the `SbpConnector`.
### 4.2 Webhook Verification
To handle webhooks securely:
1. Define a route using the macro:
```php
Route::alfaWebhooks('/api/webhooks/alfa');
```
2. Listen for the `AlfaWebhookReceived` event.
3. The SDK middleware verifies the authenticity of the request.
---
## 5. Troubleshooting
### "Interface not found"
Ensure you have run `composer update` to install `saloonphp/pagination-plugin`.
### "Certificate not found"
Check your `.env` paths. The files must be readable by the PHP process (usually `www-data`).
### "Invalid Signature"
Ensure you are using the correct **Signing Key** (not the Transport key) for business logic operations like `CmsSigner::sign()`.
---
## 6. Architecture & Data Flow
This section visualizes how data moves through the SDK, explaining the invisible work performed by the library (Security, Serialization, Transport).
### 6.1 General Request Lifecycle (BaaS)
When you send a request (e.g., creating a payment), the SDK automatically handles DTO serialization, mTLS authentication, and response mapping.
```mermaid
sequenceDiagram
participant User as Client App
participant SDK as SDK Facade
participant DTO as Request DTO
participant Con as Connector
participant API as Alfa Bank API
User->>DTO: Instantiate (Strict Typing)
User->>SDK: send(Request)
SDK->>Con: Serialize DTO to JSON
Con->>Con: Attach mTLS Certificates
Con->>Con: Attach OAuth Token
Con->>API: HTTPS Request (Signed/Encrypted)
API-->>Con: Raw JSON Response
Con->>SDK: Map JSON to Response DTO
SDK-->>User: Return Response Object
```
### 6.2 SBP Body Signing (JCS)
The Faster Payments System (SBP) requires a specific "Body Signing" mechanism. The SDK implements **JSON Canonicalization Scheme (JCS)** to ensure the signature is valid regardless of key order.
```mermaid
flowchart TD
A["Raw Request Body (Array)"] -->|CmsSigner::canonicalize| B("Recursive Key Sort & JSON Encode")
B -->|"OpenSSL RSA-SHA256"| C{"Sign with Private Key"}
C -->|"Base64 Encode"| D["Signature String"]
D -->|"Add Header"| E["Authorization: Base64"]
E -->|"mTLS Connection"| F(("Alfa Bank SBP Gateway"))
style B fill:#f9f,stroke:#333,stroke-width:2px
style C fill:#bbf,stroke:#333,stroke-width:2px
```
### 6.3 Webhook Processing
The SDK acts as a secure gatekeeper for incoming webhooks, verifying their origin before dispatching them to your application logic.
```mermaid
sequenceDiagram
participant Bank as Alfa Bank
participant Route as Laravel Route
participant Mid as Middleware
participant Factory as WebhookFactory
participant Event as AlfaWebhookReceived
Bank->>Route: POST /webhooks/alfa
Route->>Mid: Intercept Request
Mid->>Mid: Verify Credentials / Signature
alt Invalid
Mid-->>Bank: 401 Unauthorized
else Valid
Mid->>Factory: Extract Payload
Factory->>Factory: Detect Type (BaaS vs SBP)
Factory->>Event: Dispatch Typed DTO
Event-->>Route: Processing Complete
Route-->>Bank: 200 OK
end
```
---
*Generated by Alfa Bank SDK Team*

75
RELEASE_NOTES.md Normal file
View File

@@ -0,0 +1,75 @@
# Alfa Bank SDK - Release Notes v1.0.0
## 🚀 Overview
The **Alfa Bank SDK** is a production-ready, enterprise-grade library for integrating with Alfa Bank's API (BaaS & SBP). It is built on top of **Saloon v3** and **Spatie Laravel Data**, ensuring strict typing, robustness, and idiomatic Laravel integration.
## ✨ Key Features
### 1. Unified API Access
- **BaaS (Bank-as-a-Service):** Full coverage of Accounts, Payments, Cards, Statements, and Salary projects.
- **SBP (Faster Payments):** Dedicated connector for C2B/B2C/B2B payouts with automated body signing (JCS/RSA-SHA256).
- **Security:** Native support for mTLS (GOST/RSA), detached CMS/PKCS#7 signatures, and JWS transport security.
### 2. Architecture & Quality
- **DTO-Driven:** 100% of requests and responses are mapped to Data Transfer Objects. No more raw arrays.
- **Saloon Power:** Middleware for error handling, automatic retries, and timeouts.
- **Pagination:** Smart `AlfaOffsetPaginator` handling various response formats automatically.
- **Testing:** 63 automated tests verifying every module.
### 3. Laravel Integration
- **Zero-Config:** Auto-discovery via Service Provider.
- **Facades:** `AlfaBank::` and `Sbp::` for static access.
- **Config:** Publishable `config/alfa-bank.php`.
- **Webhooks:** Route macro `Route::alfaWebhooks()` and event dispatching.
## 🛠️ Installation
```bash
composer require apoloz/alfa-bank-sdk
```
## 📖 Usage Examples
### Create a Payment
```php
use AlfaBank;
use Apoloz\AlfaBank\Requests\Payments\CreatePaymentRequest;
use Apoloz\AlfaBank\Data\Payments\PaymentData;
$data = new PaymentData(
amount: 100.50,
payeeAccount: '40702...',
// ...
);
$response = AlfaBank::send(new CreatePaymentRequest($data));
echo $response->id; // "EXT-123"
```
### Iterate Transactions (Pagination)
```php
use Apoloz\AlfaBank\Requests\Statement\GetTransactionsRequest;
$paginator = AlfaBank::paginate(new GetTransactionsRequest('40702...'));
foreach ($paginator as $transaction) {
echo $transaction->amount;
}
```
### SBP Payout
```php
use Sbp;
use Apoloz\AlfaBank\Sbp\Requests\Payouts\CreatePayoutRequest;
// The SDK handles body signing automatically
Sbp::send(new CreatePayoutRequest($payoutData));
```
## ✅ Verification Status
- **Tests Passed:** 63/63
- **Static Analysis:** PHPStan Level 5 (0 errors)
- **Integration Test:** Verified in Laravel 12 environment via `alfa-bank-app`.
---
*Ready for deployment.*

View File

@@ -0,0 +1,61 @@
Вот преобразованный контент страницы в формате Markdown. Я сохранил структуру, важные пометки (бета-тест, H2H) и все функциональные ссылки.
---
# API Key
**β-ТЕСТ** **H2H**
**API Key** — ключ доступа для упрощённой авторизации запросов по H2H-интеграциям, который не требует аутентификации пользователей. Он выпускается один раз через интерфейс Портала разработчика и действует бессрочно, но будет автоматически отозван, если с момента последнего запроса прошло более 30 дней.
### Сервисы, доступные с использованием `API Key` в H2H-интеграциях:
* [Выписки по счетам юрлиц](/products/alfa-api/documentation/articles/transactions/transactions) (для методов, где `scope=transactions`)
* [Профиль организации](/products/alfa-api/documentation/articles/customer-info/customer-info)
* [Электронная подпись](/products/alfa-api/documentation/articles/signature/signature)
Для настройки авторизации по `API Key` необходимо выпустить его на Портале разработчика и добавить его в свои рабочие инструменты. Как это сделать, описано [в статье Управление API Key](/products/alfa-api/documentation/articles/selfservice/articles/api-key/api-key).
### Управление ключами доступа
Управлять ключами доступа можно также на Портале разработчика. Вы можете:
* **Перевыпустить ключ** в случае потери данных, компрометации ключа или необходимости замены данных для него.
* **Отозвать ключ**, если больше не хотите использовать упрощённый способ авторизации.
[**Как управлять API Key**](/products/alfa-api/documentation/articles/selfservice/articles/api-key/api-key)
---
## Навигация по разделу
* ← [Экранирование](/products/alfa-api/documentation/articles/alfa-id/articles/screening/screening)
* → [Начало работы в песочнице](/products/alfa-api/documentation/articles/sandbox/articles/intro/intro)
---
### Общая информация (Alfa API)
1. [Общая информация](/products/alfa-api/documentation/articles/specification/specification)
2. [Подключение к Alfa API](/products/alfa-api/documentation/articles/connection/connection)
3. [Портал разработчика](/products/alfa-api/documentation/articles/selfservice/selfservice)
4. [Alfa ID](/products/alfa-api/documentation/articles/alfa-id/alfa-id)
5. **API Key** (Текущая страница)
6. [Песочница](/products/alfa-api/documentation/articles/sandbox/sandbox)
7. [Java SDK](/products/alfa-api/documentation/articles/sdk/sdk)
8. [Обмен файлами](/products/alfa-api/documentation/articles/secure-file-transfer/secure-file-transfer)
9. [Транспортная подпись и шифрование](/products/alfa-api/documentation/articles/signature-encryption/signature-encryption)
10. [Вебхуки](/products/alfa-api/documentation/articles/webhooks/webhooks)
### Продукты и сервисы
* [Выписки по счетам юрлиц](/products/alfa-api/documentation/articles/transactions/transactions)
* [Информация по счетам физлиц](/products/alfa-api/documentation/articles/accounts/accounts)
* [Эскроу-счета 214-ФЗ](/products/alfa-api/documentation/articles/escrow/escrow)
* [Профиль организации](/products/alfa-api/documentation/articles/customer-info/customer-info)
* [Платёжные поручения](/products/alfa-api/documentation/articles/payments/payments)
* [Самозанятые](/products/alfa-api/documentation/articles/selfemployed/selfemployed)
* [Система быстрых платежей (СБП)](/products/alfa-api/documentation/articles/sbp/sbp)
* [Кредиты](/products/alfa-api/documentation/articles/scoring/scoring)
* [Электронная подпись](/products/alfa-api/documentation/articles/signature/signature)
* [Карты](/products/alfa-api/documentation/articles/cards/cards)
* [Зарплатный проект](/products/alfa-api/documentation/articles/salary/salary)
* [Alfa Pay Business](/products/alfa-api/documentation/articles/invoices/invoices)
* [Факторинг](/products/alfa-api/documentation/articles/factoring/factoring)
* [Номинальные счета](/products/alfa-api/documentation/articles/nominal-accounts/nominal-accounts)

View File

@@ -0,0 +1,114 @@
# Обновление токена доступа
**Тип интеграции:** B2B, B2C
## Эндпоинты
| Окружение | Метод и URL |
| :------------ | :-------------------------------------------- |
| **Песочница** | `POST https://sandbox.alfabank.ru/oidc/token` |
| **Пром** | `POST https://baas.alfabank.ru/oidc/token` |
---
## Описание
> **Внимание**
> Токен обновления действует 180 дней и не может быть использован более 2 раз.
> **Внимание**
> Токен обновления может быть отозван в случае, если:
>
> - пользователь сменил пароль;
> - пользователь превысил допустимое количество попыток ввода пароля;
> - аккаунт пользователя был заблокирован.
В результате запроса, помимо нового токена доступа, вы также получите новый токен обновления, а старый `refresh_token` станет недействительным.
При использовании `curl` запроса с заголовком `"Content-Type": "application/x-www-form-urlencoded"` необходимо экранировать специальные символы параметра `client_secret`. В то время как `redirect_uri` экранировать не нужно.
Если запрос отправляется через Postman с заголовком `"Content-Type": "application/x-www-form-urlencoded"` и `body` в формате `x-www-form-urlencoded` — нет необходимости экранировать специальные символы.
Подробную информацию по экранированию можно посмотреть [здесь](/products/alfa-api/documentation/articles/alfa-id/articles/screening/screening).
---
## Параметры запроса
### HEADERS
| Атрибут | Тип | Обязательность | Описание |
| :--------------- | :----- | :------------- | :---------------------------------- |
| **Accept** | string | required | `application/json` |
| **Content-Type** | string | required | `application/x-www-form-urlencoded` |
### BODY
| Атрибут | Тип | Обязательность | Описание |
| :---------------- | :----- | :------------- | :---------------------------------------------------------------------------------------------------------------------------------------------- |
| **grant_type** | string | required | Тип гранта. Возможные значения: `refresh_token` |
| **refresh_token** | string | required | Токен обновления. Обновить `access_token` через `refresh_token` можно только 2 раза. В дальнейшем необходимо использовать новый `refresh_token` |
| **client_id** | string | required | Идентификатор партнёрского сервиса |
| **client_secret** | string | required | Секретный ключ партнёрского сервиса |
---
## Пример запроса (cURL)
```bash
curl --location 'https://baas.alfabank.ru/oidc/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'Accept: application/json' \
--data-urlencode 'grant_type=refresh_token' \
--data-urlencode 'refresh_token=13b8230b-b6bf-4bb9-b977-3bc0a988a5fd' \
--data-urlencode 'client_id=0cee0683-85ae-49f2-a63d-29f97aad1911' \
--data-urlencode 'client_secret=Qwerty1234567890Qwerty1234567890!'
```
---
## Параметры ответа
### Успешный ответ (200 OK)
**HEADERS**
- **Content-Type**: `application/json`
- **Cache-Control**: `no-store`
- **Pragma**: `no-cache`
**BODY**
| Атрибут | Тип | Обязательность | Описание |
| :--- | :--- | :--- | :--- |
| **access_token** | string | required | Токен доступа |
| **refresh_token** | string | required | Токен обновления |
| **token_type** | string | required | Тип токена (например, `Bearer`) |
| **expires_in** | integer | optional | Срок жизни токена в секундах |
**Пример JSON-ответа:**
```json
{
"access_token": "eyJraWQiOiJhbGZhLXRlc3Qtand0IiwidHlwIjoiSldUIiwiYWxnIjoiUlMyNTYifQ...",
"refresh_token": "2cc8d34c-130a-4674-91fa-f9835fff6e88",
"token_type": "Bearer",
"expires_in": 3600
}
```
---
### Ошибка (400 Bad Request)
**BODY**
| Атрибут | Тип | Обязательность | Описание |
| :--- | :--- | :--- | :--- |
| **error** | string | required | Код ошибки. Возможные значения: `invalid_request` — неверные входные параметры запроса |
| **error_description** | string | optional | Описание ошибки |
---
## Навигация
- [← Получение профиля представителя пользователя](/products/alfa-api/documentation/articles/alfa-id/articles/acf/articles/get-profile-info/v1/get-profile-info)
- [Как использовать ACF для H2H →](/products/alfa-api/documentation/articles/alfa-id/articles/acf-h2h/articles/intro/intro)

View File

@@ -0,0 +1,50 @@
# Как использовать ACF
**Теги:** `B2B` `B2C`
Вы можете использовать **Authorization Code Flow** в своих приложениях для получения доступа к защищённым ресурсам Alfa API. Доступ осуществляется с помощью `access_token`, который Вы получаете после аутентификации пользователя и подписания им согласия на передачу данных.
Также с помощью полученного `access_token` Вы сможете:
1. **Реализовать процесс бесшовной аутентификации** между партнёром и Банком.
2. **Получить доступ к операциям или документам других организаций** (при наличии от них согласия) для предоставления услуг B2B / B2C SaaS. Подходит для облачных бухгалтерий, маркетплейсов, CRM и других.
`access_token`, полученный по **Authorization Code Flow**, даёт возможность переходить между банковскими приложениями и приложениями партнёра без дополнительной аутентификации.
В рамках **Authorization Code Flow** доступны все сервисы, реализованные в Alfa API.
---
### Шаги авторизации
1. **Получение кода авторизации**
2. **Получение токена доступа**
3. **Получение информации о профиле представителя ЮЛ/ФЛ**
4. **Проверка подписи**
5. **Перенаправление авторизованного пользователя на ваш ресурс**
---
### Согласия пользователей
- **Срок жизни согласия:** 365 дней.
- **Продление:** После истечения срока необходимо заново пройти авторизацию. Для этого в параметре запроса на получение кода авторизации нужно передать параметр `prompt = consent`.
- **Проверка статуса:** Узнать дату окончания действия согласия можно с помощью метода [Данные по согласиям пользователей](/products/alfa-api/documentation/articles/alfa-id/articles/expansion/articles/client-consents/v1/client-consents).
---
### Дополнительно
При необходимости вы можете:
- [Обновить токен](/products/alfa-api/documentation/articles/alfa-id/articles/acf/articles/token-update/v1/token-update)
- [Отозвать токен](/products/alfa-api/documentation/articles/alfa-id/articles/expansion/articles/revoke-token/v1/revoke-token)
---
**Навигация:**
← [Кнопка входа по Alfa ID](/products/alfa-api/documentation/articles/alfa-id/articles/button/button) | [Получение кода авторизации](/products/alfa-api/documentation/articles/alfa-id/articles/acf/articles/get-auth-code/v1/get-auth-code) →
---
_Примечание: В данном документе используются относительные ссылки. Для перехода по ним используйте базовый адрес портала (developers.alfabank.ru)._

View File

@@ -0,0 +1,80 @@
# Получение профиля представителя пользователя `B2B` `B2C`
## Эндпоинты
| Среда | Метод и URL |
| :------------ | :---------------------------------------------- |
| **Песочница** | `GET https://sandbox.alfabank.ru/oidc/userinfo` |
| **Пром** | `GET https://baas.alfabank.ru/oidc/userinfo` |
---
## Описание
Для идентификации пользователя выполняется запрос на получение информации о профиле представителя ЮЛ/ФЛ.
- **Входящие параметры:** `access_token`.
- **Исходящие параметры:** данные пользователя, на передачу которых от пользователя есть разрешение.
> Для каждого Партнёра API перечень допустимых клэймов настраивается индивидуально.
---
## Параметры запроса
### HEADERS
| Атрибут | Тип | Обязательность | Описание |
| :---------------- | :----- | :------------- | :-------------------- |
| **Authorization** | string | required | Bearer {access_token} |
| **Accept** | string | required | application/jwt |
### Пример запроса (cURL)
```bash
curl --location 'https://baas.alfabank.ru/oidc/userinfo' \
--header 'Authorization: Bearer {access-token}' \
--header 'Accept: application/jwt'
```
---
## Параметры ответа
### 200 OK
**Headers:**
- `Content-Type: application/jwt` (optional)
**Пример ответа (JWT):**
```text
eyJraWQiOiJhbGZhLXRlc3Qtand0IiwidHlwIjoiSldUIiwiYWxnIjoiUlMyNTYifQ.eyJjdXMiOiJVQUFBQUEiLCJzdWIiOiIzMjI4ZTY4ZS1jYzM0LTRiODItYjQzZC00OTExMmI1ZDlkM2UiLCJiaXJ0aGRhdGUiOiIyMDAwLTAyLTIwIiwicm9sZSI6IkFDQ09VTlRBTlQsIE1BTkFHRVIiLCJnZW5kZXIiOiJNQUxFIiwiaWRlbnRpdHlfZG9jdW1lbnRfbmFtZSI6ItCf0LDRgdC_0L7RgNGCINCz0YDQsNC20LTQsNC90LjQvdCwINCg0KQiLCJpZGVudGl0eV9kb2N1bWVudF9udW1iZXIiOjIyMjIyMiwiaXNzIjoiaHR0cHM6XC9cL2JhYXMuYWxmYWJhbmsucnUiLCJpbm4iOjc0MTUxMTExMjIyMiwiZWlvIjp0cnVlLCJnaXZlbl9uYW1lIjoi0KLQtdGB0YIiLCJtaWRkbGVfbmFtZSI6ItCi0LXRgdGC0L7QstC40YciLCJhY3VzIjoiWEFBQUFBIiwiaWRlbnRpdHlfZG9jdW1lbnRfc2VyaWVzIjoxMTExLCJhdWQiOiIwY2VlMDY4My04NWFlLTQ5ZjItYTYzZC0yOWY5N2FhZDE5MTEiLCJhY2xjIjoiWEFBQUExIiwidXBkYXRlZF9hdCI6IjIwMjItMDEtMjAiLCJuYW1lIjoi0KLQtdGB0YLQvtCyINCi0LXRgdGCINCi0LXRgdGC0L7QstC40YciLCJwaG9uZV9udW1iZXIiOjc5MTkxMTEyMjMzLCJjbGMiOiJVQUFBQTEiLCJmYW1pbHlfbmFtZSI6ItCi0LXRgdGC0L7QsiIsImVtYWlsIjoiZW1haWxAZW1haWwucnUifQ.WVr5xkQSEGqpPXN3aIo0zHZLDL0vvtxEEQ83BrgJo7l0BjjALeGDRYENF2bL8j3n1pXRnduiBQcYNV6teBhESI8V_8kd7Kh7LTePkJWadPSvD__KskC69b4XZ-zN-IQ73NmAcBDStnnhSXGKL6xhdRy-TGiAoKPsRWiDVntsDlpCQNHAt3tJk8q_SQS4S1k6qju9eJ2GFkgmd6z8rR2vaBykaOF0K61ltksw6YgXhuek3OlYkqIAivyKYl59uio8zMpJk-YrPlmawwmvWPF0vKhaLj8Mvn4mVMsVSfuVVKP2ksHG0MAlWpO3Sh9GoKO4d6TQplJ4vgIIeNx-44npqw
```
### 400 Bad Request
**Body:**
| Атрибут | Тип | Обязательность | Описание |
| :-------------------- | :----- | :------------- | :------------------------------------------------------------------------------------- |
| **error** | string | required | Код ошибки. Принимает значения: `invalid_request` — неверные входные параметры запроса |
| **error_description** | string | optional | Описание ошибки |
---
## Описание клэймов UserInfo
| Name | Description | Scope |
| :-------------- | :-------------------------------------------------------------------- | :------------------ |
| **iss** | URL-адрес Alfa ID по протоколу https (https://id.alfabank.ru/oidc) | openid |
| **sub** | Уникальный идентификатор Alfa ID пользователя (до 255 символов ASCII) | openid |
| **aud** | Идентификатор сервиса-партнёра (аудитория токена) | openid |
| **name** | Полное имя конечного пользователя в отображаемой форме | profile, name |
| **given_name** | Имя конечного пользователя | profile, givenname |
| **family_name** | Фамилия конечного пользователя | profile, familyname |
| **middle_name** | Отчество конечного пользователя | profile, middlename |
| **email** | Предпочтительный адрес электронной почты | email |
| **gender** | Пол конечного пользователя | profile, gender |
| **birthdate** | День рождения в формате `YYYY-MM-DD` | profile, birthdate |

View File

@@ -0,0 +1,155 @@
# Получение токена доступа
**Тип интеграции:** B2B, B2C
**Метод:** `POST`
## Эндпоинты
| Среда | URL |
| :------------ | :--------------------------------------- |
| **Песочница** | `https://sandbox.alfabank.ru/oidc/token` |
| **Пром** | `https://baas.alfabank.ru/oidc/token` |
---
## Описание
В результате выполнения запроса будет получено три токена: `access_token`, `refresh_token`, `id_token`.
> **Внимание**
>
> - Токен доступа действует **1 час**.
> - Токен доступа может быть отозван в случае, если:
> - пользователь сменил пароль;
> - пользователь превысил допустимое количество попыток ввода пароля;
> - аккаунт пользователя был заблокирован;
> - срок жизни согласия пользователя истёк.
### Особенности передачи параметров
- При использовании `curl` с заголовком `"Content-Type": "application/x-www-form-urlencoded"` необходимо **экранировать** специальные символы параметра `client_secret`. Параметр `redirect_uri` экранировать не нужно.
- Если запрос отправляется через **Postman** (body в формате `x-www-form-urlencoded`) — экранировать специальные символы не требуется.
Подробную информацию по экранированию можно посмотреть [здесь](/products/alfa-api/documentation/articles/alfa-id/articles/screening/screening).
---
## Параметры запроса
### HEADERS
| Атрибут | Тип | Обяз. | Описание |
| :--------------- | :----- | :---- | :---------------------------------- |
| **Accept** | string | Да | `application/json` |
| **Content-Type** | string | Да | `application/x-www-form-urlencoded` |
### BODY (x-www-form-urlencoded)
| Атрибут | Тип | Обяз. | Описание |
| :---------------- | :----- | :---- | :--------------------------------------------------- |
| **grant_type** | string | Да | Тип гранта. Возможные значения: `authorization_code` |
| **code** | string | Да | Код авторизации |
| **client_id** | string | Да | Идентификатор партнёрского сервиса |
| **client_secret** | string | Да | Секретный ключ партнёрского сервиса |
| **redirect_uri** | string | Да | URI перенаправления |
| **code_verifier** | string | Нет | Код верификатор |
---
## Пример запроса (cURL)
```bash
curl --location 'https://baas.alfabank.ru/oidc/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'Accept: application/json' \
--data-urlencode 'grant_type=authorization_code' \
--data-urlencode 'code=8962c304-89b1-11ec-a8a3-0242ac120002' \
--data-urlencode 'client_id=0cee0683-85ae-49f2-a63d-29f97aad1911' \
--data-urlencode 'client_secret=Qwerty1234567890Qwerty1234567890!' \
--data-urlencode 'redirect_uri=https://wwww.partner.ru/code' \
--data-urlencode 'code_verifier=string'
```
---
## Параметры ответа
### Ответ 200 (OK)
**HEADERS**
- `Content-Type`: `application/json`
- `Cache-Control`: `no-store`
- `Pragma`: `no-cache`
**BODY**
| Атрибут | Тип | Обяз. | Описание |
| :--- | :--- | :--- | :--- |
| **access_token** | string | Да | Токен доступа |
| **refresh_token** | string | Да | Токен обновления |
| **token_type** | string | Да | Тип токена (обычно `Bearer`) |
| **expires_in** | integer | Нет | Срок жизни токена в секундах |
| **id_token** | string | Да | Идентификационный токен |
**Пример JSON-ответа:**
```json
{
"access_token": "eyJraWQiOiJhbGZhLXRlc3Qtand0IiwidHlwIjoiSldUIiwiYWxnIjoiUlMyNTYifQ...",
"refresh_token": "13b8230b-b6bf-4bb9-b977-3bc0a988a5fd",
"token_type": "Bearer",
"expires_in": 3600,
"id_token": "eyJraWQiOiJhbGZhLXRlc3Qtand0IiwidHlwIjoiSldUIiwiYWxnIjoiUlMyNTYifQ..."
}
```
---
### Ответ 400 (Bad Request)
| Атрибут | Тип | Обяз. | Описание |
| :-------------------- | :----- | :---- | :--------------------------------------- |
| **error** | string | Да | Код ошибки (например, `invalid_request`) |
| **error_description** | string | Нет | Описание ошибки |
---
## Таблица возможных значений параметра error
| Значение | Описание |
| :----------------------- | :------------------------------------------------------------------------------------------------------------------ |
| `invalid_request` | Отсутствует обязательный параметр, неподдерживаемое значение, повторение параметра или неправильный формат запроса. |
| `invalid_client` | Ошибка аутентификации клиента (неизвестный клиент или неподдерживаемый метод). |
| `invalid_grant` | Недействительный код авторизации, токен обновления или несоответствие URI перенаправления. |
| `unsupported_grant_type` | Тип `grant_type` не поддерживается сервером. |
| `internal_error` | Произошла непредвиденная ошибка. |
---
## Описание клэймов (claims)
### access_token
| Значение | Описание |
| :----------------- | :----------------------------------------------------- |
| **iss** | URL-адрес Alfa ID (https://id.alfabank.ru/oidc) |
| **sub** | Уникальный идентификатор Alfa ID пользователя |
| **aud** | Идентификатор сервиса-партнёра (аудитория токена) |
| **exp** | Время окончания срока действия токена (Unix timestamp) |
| **iat** | Время выпуска токена (Unix timestamp) |
| **scope_claims** | Массив клэймов области применения |
| **scope_services** | Массив операций области применения |
### id_token
| Значение | Описание | Scope |
| :------------ | :--------------------------------------- | :----- |
| **iss** | URL-адрес Alfa ID | openid |
| **sub** | Уникальный идентификатор пользователя | openid |
| **aud** | Идентификатор сервиса-партнёра | openid |
| **exp** | Время окончания срока действия | openid |
| **iat** | Время выпуска | openid |
| **auth_time** | Время аутентификации пользователя | openid |
| **nonce** | Строка для защиты от повторных атак | openid |
| **acr** | Способ аутентификации пользователя | openid |
| **azp** | Сторона, которой выдан токен (client_id) | openid |

View File

@@ -0,0 +1,114 @@
Вот преобразованный в Markdown контент вашего HTML-файла. Я сохранил структуру шагов, таблицы параметров, примеры кода и ссылки на изображения.
---
# Получение кода авторизации
**Теги:** `B2B` `B2C`
Процесс получения кода авторизации в сценарии **Authorization Code Flow** состоит из нескольких шагов.
---
### Краткий обзор шагов
1. Отобразите пользователю кнопку "Войти по Alfa ID".
2. Сформируйте ссылку для авторизации.
3. Переадресуйте пользователя для прохождения аутентификации.
4. Получите код авторизации в ответе от Alfa ID.
5. Alfa ID возвращает пользователя на Ваш ресурс по указанному `redirect_uri`.
---
### Шаг 1. Кнопка «Войти по Alfa ID»
Пользователь переходит по встроенной кнопке на Вашем ресурсе.
![windowAlfaId](/assets/developers-portal.docs.alfa-api/articles/alfa-id/articles/acf/articles/get-auth-code/v1/files/picture3.png)
---
### Шаг 2. Формирование ссылки
#### Эндпоинты
* **Песочница:**
`GET https://id-sandbox.alfabank.ru/oidc/authorize?response_type=code&client_id={client_id}&redirect_uri={redirect_uri}&scope={scope}&state={state}`
* **Пром:**
`GET https://id.alfabank.ru/oidc/authorize?response_type=code&client_id={client_id}&redirect_uri={redirect_uri}&scope={scope}&state={state}`
> **Важно:** При формировании ссылки указывайте весь доступный `scope` через знак пробела или `%20`. Параметр `prompt=consent` используйте только если нужно, чтобы пользователь повторно подписал согласие.
#### Параметры запроса (QUERY)
| Атрибут | Тип | Обяз. | Описание |
| :--- | :--- | :--- | :--- |
| `response_type` | string | Да | Тип ответа. Возможные значения: `code` |
| `client_id` | string | Да | Идентификатор партнёрского сервиса (выдается банком) |
| `redirect_uri` | string | Да | URI для перенаправления пользователя после успешной авторизации |
| `scope` | string | Да | Область применения (информирует, какие данные будут использованы) |
| `state` | string | Да | Параметр для защиты от CSRF. UUID, 36 символов. |
| `nonce` | string | Нет | Строка для связи сессии с ID-токеном и защиты от повторных атак |
| `code_challenge` | string | Нет | Код вызова |
| `code_challenge_method` | string | Нет | Метод преобразования: `plain` или `S256` |
| `prompt` | string | Нет | Параметр повторной аутентификации: `none`, `login`, `consent` |
| `max_age` | string | Нет | Максимальный период аутентификации |
#### Пример запроса
```bash
curl -X GET https://id.alfabank.ru/oidc/authorize?response_type=code&client_id=0cee0683-85ae-49f2-a63d-29f97aad1911&redirect_uri=https%3A%2F%2Fwwww.partner.ru%2Fcode&scope=openid&state=abcdef
```
---
### Шаг 3. Аутентификация пользователя
1. Пользователь проходит процедуру аутентификации.
![loginPassword](/assets/developers-portal.docs.alfa-api/articles/alfa-id/articles/acf/articles/get-auth-code/v1/files/picture4.png)
2. Пользователь выбирает организацию (для ЮЛ; для ФЛ шаг пропускается).
![organisationUL](/assets/developers-portal.docs.alfa-api/articles/alfa-id/articles/acf/articles/get-auth-code/v1/files/picture6.png)
3. Пользователь подписывает форму согласия.
![signForm](/assets/developers-portal.docs.alfa-api/articles/alfa-id/articles/acf/articles/get-auth-code/v1/files/signForm.png)
---
### Шаг 4. Получение кода авторизации
Код авторизации получен, если пришел ответ **302 Found**.
> **Внимание:** Код авторизации действует **2 минуты** и может быть использован только **1 раз**.
#### Пример успешного ответа
```bash
https://wwww.partner.ru/code?code=8962c304-89b1-11ec-a8a3-0242ac120002&state=abcdef
-H 'Location: https://wwww.partner.ru/code?code=8962c304-89b1-11ec-a8a3-0242ac120002&state=abcdef'
-H 'Set-Cookie: ALFASESSIONID=f9e9532f-7b06-4023-83a2-f6cc77a7bfe4'
```
#### Параметры ответа (302 Found)
| Атрибут | Тип | Описание |
| :--- | :--- | :--- |
| `Location` | string | Содержит URI перенаправления вида: `redirect_uri?code={code}&state={state}` |
| `Set-Cookie` | string | Содержит идентификатор сессии |
---
### Ошибки
В случае неуспешного выполнения запроса в заголовке `Location` передаётся строка вида: `redirect_uri_error_page?error={error}`.
#### Таблица возможных значений параметра error
| Значение | Описание |
| :--- | :--- |
| `unsupported_response_type` | Сервер не поддерживает получение кода этим методом |
| `login_required` | Необходима аутентификация (возникает при `prompt=none`) |
| `invalid_scope` | Недопустимая или неизвестная область применения |
| `invalid_request` | Отсутствует обязательный параметр или неверный формат запроса |
| `consent_required` | Необходимо согласие пользователя (возникает при `prompt=none`) |
| `access_denied` | Владелец ресурса или сервер отклонил запрос |
| `invalid_operation_response` | Используйте только данные из спецификации ACF |
| `login_expired` | Пользователь не прошел аутентификацию за 15 минут или сделал logout |
---
**Далее:** [Получение токена доступа](/products/alfa-api/documentation/articles/alfa-id/articles/acf/articles/get-access-token/v1/get-access-token)

View File

@@ -0,0 +1,42 @@
# Как использовать ACF для H2H
**Тег:** `H2H`
Вы можете использовать **Authorization Code Flow для H2H-интеграций** как канал взаимодействия ваших автоматизированных систем с Банком по операциям Вашей организации.
С помощью `access_token`, полученного по **Authorization Code Flow для H2H-интеграций**, Вы сможете встроить банковские продукты в ERP-систему организации для выполнения запросов и операций только по своей организации.
### Шаги авторизации
1. **Формирование ссылки и редирект сотрудника**
2. **Получение кода авторизации**
3. **Получение токена доступа**
### Дополнительно
При необходимости вы можете [обновить](/products/alfa-api/documentation/articles/alfa-id/articles/acf-h2h/articles/token-update/v1/token-update) токен или [отозвать](/products/alfa-api/documentation/articles/alfa-id/articles/expansion/articles/revoke-token/v1/revoke-token) его.
---
#### Навигация по разделу:
- ← [Обновление токена доступа](/products/alfa-api/documentation/articles/alfa-id/articles/acf/articles/token-update/v1/token-update)
- → [Получение кода авторизации](/products/alfa-api/documentation/articles/alfa-id/articles/acf-h2h/articles/get-auth-code/v1/get-auth-code)
---
### Структура меню (Alfa ID):
- [Что такое Alfa ID](/products/alfa-api/documentation/articles/alfa-id/articles/intro/intro)
- [Аутентификация](/products/alfa-api/documentation/articles/alfa-id/articles/authentication/authentication)
- [Кнопка входа по Alfa ID](/products/alfa-api/documentation/articles/alfa-id/articles/button/button)
- [Authorization Code Flow](/products/alfa-api/documentation/articles/alfa-id/articles/acf/acf)
- **Authorization Code Flow для H2H-интеграций**
- [Как использовать ACF для H2H](/products/alfa-api/documentation/articles/alfa-id/articles/acf-h2h/articles/intro/intro) (Текущая страница)
- [Получение кода авторизации](/products/alfa-api/documentation/articles/alfa-id/articles/acf-h2h/articles/get-auth-code/v1/get-auth-code)
- [Получение токена доступа](/products/alfa-api/documentation/articles/alfa-id/articles/acf-h2h/articles/get-access-token/v1/get-access-token) `POST`
- [Обновление токена доступа](/products/alfa-api/documentation/articles/alfa-id/articles/acf-h2h/articles/token-update/v1/token-update) `POST`
- [Authorization Code Flow для холдингов](/products/alfa-api/documentation/articles/alfa-id/articles/acf-holding/acf-holding)
- [Client Credentials Flow](/products/alfa-api/documentation/articles/alfa-id/articles/ccf/ccf)
- [Расширение сценариев](/products/alfa-api/documentation/articles/alfa-id/articles/expansion/expansion)
- [Экранирование](/products/alfa-api/documentation/articles/alfa-id/articles/screening/screening)

View File

@@ -0,0 +1,143 @@
# Получение токена доступа `H2H` `POST`
### Эндпоинты
| Окружение | Метод и URL |
| :------------ | :-------------------------------------------- |
| **Песочница** | `POST https://sandbox.alfabank.ru/oidc/token` |
| **Пром** | `POST https://baas.alfabank.ru/oidc/token` |
---
### Описание
В результате запроса будет получено три токена: `access_token`, `refresh_token`, `id_token`.
> **Внимание**
> Токен доступа действует **1 час**.
> **Внимание**
> Токен доступа может быть отозван в случае, если:
>
> - пользователь сменил пароль;
> - пользователь превысил допустимое количество попыток ввода пароля;
> - аккаунт пользователя был заблокирован.
При использовании `curl` запроса с заголовком `"Content-Type": "application/x-www-form-urlencoded"` необходимо экранировать специальные символы параметра `client_secret`. В то время как `redirect_uri` экранировать не нужно.
Если запрос отправляется через Postman с заголовком `"Content-Type": "application/x-www-form-urlencoded"` и `body` в формате `x-www-form-urlencoded` — нет необходимости экранировать специальные символы.
Подробную информацию по экранированию можно посмотреть [здесь](/products/alfa-api/documentation/articles/alfa-id/articles/screening/screening).
---
### Параметры запроса
#### HEADERS
| Атрибут | Тип | Обязательность | Описание |
| :--------------- | :----- | :------------- | :---------------------------------- |
| **Accept** | string | required | `application/json` |
| **Content-Type** | string | required | `application/x-www-form-urlencoded` |
#### BODY
| Атрибут | Тип | Обязательность | Описание |
| :---------------- | :----- | :------------- | :--------------------------------------------------- |
| **grant_type** | string | required | Тип гранта. Возможные значения: `authorization_code` |
| **code** | string | required | Код авторизации |
| **client_id** | string | required | Идентификатор партнёрского сервиса |
| **client_secret** | string | required | Секретный ключ партнёрского сервиса |
| **redirect_uri** | string | required | URI перенаправления |
| **code_verifier** | string | optional | Код верификатор |
---
### Пример запроса (cURL)
```bash
curl --location 'https://baas.alfabank.ru/oidc/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'Accept: application/json' \
--data-urlencode 'grant_type=authorization_code' \
--data-urlencode 'code=8962c304-89b1-11ec-a8a3-0242ac120002' \
--data-urlencode 'client_id=0cee0683-85ae-49f2-a63d-29f97aad1911' \
--data-urlencode 'client_secret=Qwerty1234567890Qwerty1234567890!' \
--data-urlencode 'redirect_uri=https://wwww.partner.ru/code' \
--data-urlencode 'code_verifier=string'
```
---
### Параметры ответа
#### Пример ответа 200 (OK)
```json
{
"access_token": "eyJraWQiOiJhbGZhLXRlc3Qtand0IiwidHlwIjoiSldUIiwiYWxnIjoiUlMyNTYifQ...",
"refresh_token": "13b8230b-b6bf-4bb9-b977-3bc0a988a5fd",
"token_type": "Bearer",
"expires_in": 3600,
"id_token": "eyJraWQiOiJhbGZhLXRlc3Qtand0IiwidHlwIjoiSldUIiwiYWxnIjoiUlMyNTYifQ..."
}
```
#### Описание полей BODY (200 OK)
| Атрибут | Тип | Обязательность | Описание |
| :---------------- | :------ | :------------- | :--------------------------- |
| **access_token** | string | required | Токен доступа |
| **refresh_token** | string | required | Токен обновления |
| **token_type** | string | required | Тип токена |
| **expires_in** | integer | optional | Срок жизни токена в секундах |
| **id_token** | string | required | Идентификационный токен |
---
### Ошибки (400 Bad Request)
| Значение | Описание |
| :------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **invalid_request** | Отсутствует обязательный параметр, неподдерживаемое значение параметра (кроме grant_type), повторение параметра, несколько учётных данных или неправильный формат запроса |
| **invalid_client** | Ошибка аутентификации клиента (неизвестный клиент, отключенная аутентификация клиента или неподдерживаемый метод аутентификации) |
| **invalid_grant** | Недействительное разрешение авторизации (недействительный код авторизации, токен обновления или несоответствие URI перенаправления) |
| **unsupported_grant_type** | Тип разрешения на авторизацию (grant_type) не поддерживается сервером авторизации |
| **internal_error** | Произошла непредвиденная ошибка |
---
### Описание клэймов access_token
| Значение | Описание |
| :----------------- | :-------------------------------------------------------------------- |
| **iss** | URL-адрес Alfa ID по протоколу https (https://id.alfabank.ru/oidc) |
| **sub** | Уникальный идентификатор Alfa ID пользователя (до 255 символов ASCII) |
| **aud** | Идентификатор сервиса-партнёра (аудитория токена) |
| **exp** | Время окончания срока действия токена (Unix timestamp UTC) |
| **iat** | Время выпуска токена (Unix timestamp UTC) |
| **scope_claims** | Массив клэймов области применения |
| **scope_services** | Массив операций области применения |
---
### Описание клэймов ID_TOKEN
| Значение | Описание | Scope |
| :------------ | :--------------------------------------------------- | :----- |
| **iss** | URL-адрес Alfa ID | openid |
| **sub** | Уникальный идентификатор пользователя | openid |
| **aud** | Идентификатор сервиса-партнёра | openid |
| **exp** | Время окончания срока действия | openid |
| **iat** | Время выпуска | openid |
| **auth_time** | Время аутентификации пользователя | openid |
| **nonce** | Значение для связи сессии и защиты от повторных атак | openid |
| **acr** | Способ аутентификации пользователя | openid |
| **azp** | Сторона, которой выдан токен (client_id) | openid |
---
**Навигация:**
- [← Получение кода авторизации](/products/alfa-api/documentation/articles/alfa-id/articles/acf-h2h/articles/get-auth-code/v1/get-auth-code)
- [Обновление токена доступа →](/products/alfa-api/documentation/articles/alfa-id/articles/acf-h2h/articles/token-update/v1/token-update)

View File

@@ -0,0 +1,59 @@
# Получение кода авторизации
**Тип интеграции:** `H2H`
### Шаг 1. Формирование ссылки
Для получения кода авторизации необходимо сформировать GET-запрос.
#### Эндпоинты:
- **Песочница:**
`GET https://id-sandbox.alfabank.ru/oidc/authorize?response_type=code&client_id={client_id}&redirect_uri={redirect_uri}&scope={scope}&state={state}`
- **Пром:**
`GET https://id.alfabank.ru/oidc/authorize?response_type=code&client_id={client_id}&redirect_uri={redirect_uri}&scope={scope}&state={state}`
#### Параметры:
- `{client_id}` — идентификатор приложения Партнёра API, полученный после регистрации приложения на стороне Банка.
- `{redirect_uri}` — URI-адрес перенаправления для получения кода авторизации (можно использовать [http://localhost](http://localhost)).
- `{scope}` — области применения токена доступа, указывают, какие права должен содержать токен доступа (можно указать несколько через пробел), должны быть озвучены при регистрации приложения на стороне Банка. Например, для получения выписки необходимо указать `openid transactions`.
- `{state}` — любое строковое значение для защиты от CSRF, например `string12345`.
**Пример итоговой ссылки:**
[https://id.alfabank.ru/oidc/authorize?response_type=code&client_id={client_id}&redirect_uri=http://localhost&scope=openid transactions&state=string12345](https://id.alfabank.ru/oidc/authorize?response_type=code&client_id=%7Bclient_id%7D&redirect_uri=http://localhost&scope=openid%20transactions&state=string12345)
> **Внимание**
> Не забывайте заменить `{client_id}` на реальное значение, полученное после регистрации приложения на стороне Банка.
---
### Шаг 2. Аутентификация
1. В окне браузера отобразится страница аутентификации Alfa ID для ввода логина/пароля пользователя:
![authAlfaID](/assets/developers-portal.docs.alfa-api/articles/alfa-id/articles/acf-h2h/articles/get-auth-code/v1/files/picture8.png)
2. После ввода логина/пароля пользователя отобразится страница второго фактора аутентификации для ввода otp-кода (sms, push):
![otpCode](/assets/developers-portal.docs.alfa-api/articles/alfa-id/articles/acf-h2h/articles/get-auth-code/v1/files/picture9.png)
3. Необходимо ввести полученный на телефон otp-код (sms, push), и в адресной строке браузера отобразится код авторизации (`code`):
![authorizationCode](/assets/developers-portal.docs.alfa-api/articles/alfa-id/articles/acf-h2h/articles/get-auth-code/v1/files/picture11.jpg)
---
### Шаг 3. Получение кода авторизации
Полученное в браузере **значение кода авторизации** (параметр `code` в URL) необходимо скопировать и **обменять на [токен доступа](/products/alfa-api/documentation/articles/alfa-id/articles/acf-h2h/articles/get-access-token/v1/get-access-token)**.
> **Внимание**
> Код авторизации по умолчанию действует **2 минуты** и может быть использован только **1 раз**.
---
**Навигация:**
- [← Как использовать ACF для H2H](/products/alfa-api/documentation/articles/alfa-id/articles/acf-h2h/articles/intro/intro)
- [Получение токена доступа →](/products/alfa-api/documentation/articles/alfa-id/articles/acf-h2h/articles/get-access-token/v1/get-access-token)

View File

@@ -0,0 +1,120 @@
# Обновление токена доступа
**Тип интеграции:** H2H (Host-to-Host)
## Эндпоинты
| Среда | Метод и URL |
| :------------ | :-------------------------------------------- |
| **Песочница** | `POST https://sandbox.alfabank.ru/oidc/token` |
| **Пром** | `POST https://baas.alfabank.ru/oidc/token` |
## Описание
В результате запроса, помимо нового токена доступа, вы также получите новый токен обновления, а старый `refresh_token` станет недействительным.
> [!IMPORTANT]
> **Внимание**
>
> - Токен обновления действует **180 дней** и не может быть использован более **2 раз**.
> - Токен обновления может быть отозван, если:
> - пользователь сменил пароль;
> - пользователь превысил допустимое количество попыток ввода пароля;
> - аккаунт пользователя был заблокирован.
### Особенности кодирования
- При использовании `curl` с заголовком `"Content-Type": "application/x-www-form-urlencoded"` необходимо экранировать специальные символы параметра `client_secret`. Параметр `redirect_uri` экранировать не нужно.
- Если запрос отправляется через **Postman** с телом в формате `x-www-form-urlencoded` — экранировать символы вручную не требуется.
- Подробную информацию по экранированию можно посмотреть [здесь](/products/alfa-api/documentation/articles/alfa-id/articles/screening/screening).
---
## Параметры запроса
### HEADERS
| Атрибут | Тип | Обязательность | Описание |
| :--------------- | :----- | :------------- | :---------------------------------- |
| **Accept** | string | required | `application/json` |
| **Content-Type** | string | required | `application/x-www-form-urlencoded` |
### BODY
| Атрибут | Тип | Обязательность | Описание |
| :---------------- | :----- | :------------- | :-------------------------------------------------------------------------------------------------------------------- |
| **grant_type** | string | required | Тип гранта. Возможные значения: `refresh_token` |
| **refresh_token** | string | required | Токен обновления. Обновить `access_token` можно только 2 раза. В дальнейшем нужно использовать новый `refresh_token`. |
| **client_id** | string | required | Идентификатор партнёрского сервиса. |
| **client_secret** | string | required | Секретный ключ партнёрского сервиса. |
### Пример запроса (cURL)
```bash
curl --location 'https://baas.alfabank.ru/oidc/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'Accept: application/json' \
--data-urlencode 'grant_type=refresh_token' \
--data-urlencode 'refresh_token=13b8230b-b6bf-4bb9-b977-3bc0a988a5fd' \
--data-urlencode 'client_id=0cee0683-85ae-49f2-a63d-29f97aad1911' \
--data-urlencode 'client_secret=Qwerty1234567890Qwerty1234567890!'
```
---
## Параметры ответа
### Успешный ответ (200 OK)
**BODY**
| Атрибут | Тип | Обязательность | Описание |
| :--- | :--- | :--- | :--- |
| **access_token** | string | required | Новый токен доступа. |
| **refresh_token** | string | required | Новый токен обновления. |
| **token_type** | string | required | Тип токена (обычно `Bearer`). |
| **expires_in** | integer | optional | Срок жизни токена в секундах. |
**Пример ответа:**
```json
{
"access_token": "eyJraWQiOiJhbGZhLXRlc3Qtand0IiwidHlwIjoiSldUIiwiYWxnIjoiUlMyNTYifQ...",
"refresh_token": "2cc8d34c-130a-4674-91fa-f9835fff6e88",
"token_type": "Bearer",
"expires_in": 3600
}
```
### Ошибка (400 Bad Request)
**BODY**
| Атрибут | Тип | Обязательность | Описание |
| :--- | :--- | :--- | :--- |
| **error** | string | required | Код ошибки. Например: `invalid_request` (неверные входные параметры). |
| **error_description** | string | optional | Текстовое описание ошибки. |
---
## Дополнительная информация
### Таблица возможных значений параметра error
| Значение | Описание |
| :----------------------- | :---------------------------------------------------------------------------------------------------------- |
| `invalid_request` | Отсутствует обязательный параметр, неподдерживаемое значение, повторение параметра или неправильный формат. |
| `invalid_client` | Ошибка аутентификации клиента (неизвестный ID или неверный secret). |
| `invalid_grant` | Недействительный токен обновления или несоответствие URI. |
| `unsupported_grant_type` | Тип `grant_type` не поддерживается сервером. |
| `internal_error` | Внутренняя ошибка сервера. |
### Описание клэймов access_token
| Значение | Описание |
| :----------------- | :----------------------------------------------- |
| **iss** | URL-адрес Alfa ID (https://id.alfabank.ru/oidc). |
| **sub** | Уникальный идентификатор пользователя. |
| **aud** | Идентификатор сервиса-партнёра (аудитория). |
| **exp** | Время окончания срока действия (Unix timestamp). |
| **iat** | Время выпуска токена. |
| **scope_claims** | Массив клэймов области применения. |
| **scope_services** | Массив операций области применения. |

View File

@@ -0,0 +1,126 @@
# Обновление токена доступа
**Типы интеграции:** `B2B`, `H2H`
## Эндпоинты
| Окружение | Метод | URL |
| :------------ | :----- | :--------------------------------------- |
| **Песочница** | `POST` | `https://sandbox.alfabank.ru/oidc/token` |
| **Пром** | `POST` | `https://baas.alfabank.ru/oidc/token` |
---
## Описание
В результате запроса, помимо нового токена доступа, вы также получите новый токен обновления, а старый `refresh_token` станет недействительным.
> **Внимание**
>
> - Токен обновления действует **180 дней** и не может быть использован **более 2 раз**.
> - При использовании `curl` запроса с заголовком `"Content-Type": "application/x-www-form-urlencoded"` необходимо экранировать специальные символы параметра `client_secret`. При этом `redirect_uri` экранировать не нужно.
> - Если запрос отправляется через **Postman** с телом в формате `x-www-form-urlencoded` — экранировать символы не нужно.
> - Подробную информацию по экранированию можно посмотреть [здесь](/products/alfa-api/documentation/articles/alfa-id/articles/screening/screening).
### Токен обновления может быть отозван, если:
- пользователь сменил пароль;
- пользователь превысил допустимое количество попыток ввода пароля;
- аккаунт пользователя был заблокирован.
---
## Параметры запроса
### HEADERS
| Атрибут | Тип | Обяз. | Описание |
| :--------------- | :----- | :---- | :---------------------------------- |
| **Accept** | string | Да | `application/json` |
| **Content-Type** | string | Да | `application/x-www-form-urlencoded` |
### BODY (x-www-form-urlencoded)
| Атрибут | Тип | Обяз. | Описание |
| :---------------- | :----- | :---- | :-------------------------------------------------- |
| **grant_type** | string | Да | Тип гранта. Значение: `refresh_token` |
| **refresh_token** | string | Да | Токен обновления. Можно использовать только 2 раза. |
| **client_id** | string | Да | Идентификатор партнёрского сервиса |
| **client_secret** | string | Да | Секретный ключ партнёрского сервиса |
### Пример запроса (cURL)
```bash
curl --location 'https://baas.alfabank.ru/oidc/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'Accept: application/json' \
--data-urlencode 'grant_type=refresh_token' \
--data-urlencode 'refresh_token=13b8230b-b6bf-4bb9-b977-3bc0a988a5fd' \
--data-urlencode 'client_id=0cee0683-85ae-49f2-a63d-29f97aad1911' \
--data-urlencode 'client_secret=Qwerty1234567890Qwerty1234567890!'
```
---
## Параметры ответа
### Успешный ответ (200 OK)
| Атрибут | Тип | Описание |
| :---------------- | :------ | :----------------------------------- |
| **access_token** | string | Новый токен доступа |
| **refresh_token** | string | Новый токен обновления |
| **token_type** | string | Тип токена (обычно `Bearer`) |
| **expires_in** | integer | Срок жизни токена доступа в секундах |
**Пример ответа 200:**
```json
{
"access_token": "eyJraWQiOiJhbGZhLXRlc3Qtand0...",
"refresh_token": "2cc8d34c-130a-4674-91fa-f9835fff6e88",
"token_type": "Bearer",
"expires_in": 3600
}
```
### Ошибка (400 Bad Request)
| Атрибут | Тип | Описание |
| :-------------------- | :----- | :--------------------------------------- |
| **error** | string | Код ошибки (например, `invalid_request`) |
| **error_description** | string | Описание ошибки |
---
## Справочные таблицы
### Возможные значения параметра error
| Значение | Описание |
| :----------------------- | :-------------------------------------------------------------------------------------------------------------- |
| `invalid_request` | Отсутствует обязательный параметр, неподдерживаемое значение, повторение параметра или неверный формат запроса. |
| `invalid_client` | Ошибка аутентификации клиента (неизвестный клиент или неверный `client_secret`). |
| `invalid_grant` | Недействительный `refresh_token`. |
| `unsupported_grant_type` | Тип `grant_type` не поддерживается сервером. |
| `internal_error` | Произошла непредвиденная ошибка на стороне сервера. |
### Описание клэймов access_token
| Клэйм | Описание |
| :----------------- | :----------------------------------------------------- |
| **iss** | URL-адрес Alfa ID (https://id.alfabank.ru/oidc) |
| **sub** | Уникальный идентификатор Alfa ID пользователя |
| **aud** | Идентификатор сервиса-партнёра (аудитория токена) |
| **exp** | Время окончания срока действия токена (Unix Timestamp) |
| **iat** | Время выпуска токена (Unix Timestamp) |
| **scope_claims** | Массив клэймов области применения |
| **scope_services** | Массив операций области применения |
---
**Полезные ссылки:**
- [Новости в Telegram](https://t.me/AlfaAPI)
- [Общая спецификация Alfa API](/products/alfa-api/documentation/articles/specification/specification)
- [Инструкция по подключению](/products/alfa-api/documentation/articles/connection/connection)

View File

@@ -0,0 +1,79 @@
# Получение кода авторизации
**Теги:** `B2B` `H2H`
Процесс получения кода авторизации состоит из трех основных этапов:
1. Сформируйте ссылку.
2. Переадресация дочерней компании для прохождения аутентификации.
3. Получение кода авторизации.
---
## Шаг 1. Формирование ссылки
### Эндпоинты
- **Песочница:**
`GET https://id-sandbox.alfabank.ru/oidc/authorize?response_type=code&client_id={client_id}&redirect_uri={redirect_uri}&scope={scope}&state={state}`
- **Пром:**
`GET https://id.alfabank.ru/oidc/authorize?response_type=code&client_id={client_id}&redirect_uri={redirect_uri}&scope={scope}&state={state}`
### Описание
Ссылка должна содержать обязательные параметры, указанные ниже в таблице. Также опционально могут быть использованы необязательные параметры.
При формировании ссылки указывайте весь доступный `scope` через знак пробела или (`%20`). Дополнительный параметр `prompt=consent` использовать только в том случае, если необходимо, чтобы дочерняя компания подписала/переподписала новое согласие.
Сформированную ссылку необходимо передать своим дочерним компаниям.
### Параметры запроса (QUERY)
| Атрибут | Тип | Обязательность | Описание |
| :------------------------ | :----- | :------------- | :--------------------------------------------------------------------------------------------------------------------------------------- |
| **response_type** | string | required | Тип ответа. Возможные значения: `code` |
| **client_id** | string | required | Идентификатор партнёрского сервиса (банк выдает партнёру API) |
| **redirect_uri** | string | required | URI перенаправления, необходимый для переадресации пользователя после успешной авторизации. На этот URI будет отправлен код авторизации. |
| **scope** | string | required | Область применения (партнёр API информирует, какой scope будет использован) |
| **state** | string | required | Параметр для предотвращения межсайтовой подделки запросов. Значение генерирует партнёр (UUID, 36 символов). |
| **nonce** | string | optional | Строковое значение для связи сессии клиента с ID-токеном и защиты от повторных атак. |
| **code_challenge** | string | optional | Код вызова. |
| **code_challenge_method** | string | optional | Метод преобразования кода верификатора. Значения: `plain`, `S256`. |
| **prompt** | string | optional | Параметр повторной аутентификации/согласия. Значения: `none`, `login`, `consent`. |
| **max_age** | string | optional | Максимальный период аутентификации. |
### Пример ссылки
```bash
https://id.alfabank.ru/oidc/authorize?response_type=code&client_id=0cee0683-85ae-49f2-a63d-29f97aad1911&redirect_uri=https%3A%2F%2Fwwww.partner.ru%2Fcode&scope=openid&state=abcdef
```
---
## Шаг 2. Аутентификация дочерней компании
1. При переходе по ссылке дочерняя компания проходит процедуру аутентификации.
![loginPassword](/assets/developers-portal.docs.alfa-api/articles/alfa-id/articles/acf-holding/articles/get-auth-code/v1/files/picture4.png)
2. Выбирает необходимую организацию (при работе с несколькими юридическими лицами).
![organisationUL](/assets/developers-portal.docs.alfa-api/articles/alfa-id/articles/acf-holding/articles/get-auth-code/v1/files/picture6.png)
3. Далее проходит процедуру авторизации, **подписывая форму согласия**.
![signForm](/assets/developers-portal.docs.alfa-api/articles/alfa-id/articles/acf-holding/articles/get-auth-code/v1/files/signForm.png)
4. После прохождения авторизации в адресной строке браузера отобразится код авторизации (`code`). Дочерней компании необходимо скопировать этот код и передать головной компании.
![authorizationCode](/assets/developers-portal.docs.alfa-api/articles/alfa-id/articles/acf-holding/articles/get-auth-code/v1/files/picture11.jpg)
---
## Шаг 3. Получение кода авторизации
Полученное от дочерней компании **значение кода авторизации** (code) необходимо скопировать и **обменять на [токен доступа](/products/alfa-api/documentation/articles/alfa-id/articles/acf-holding/articles/get-access-token/v1/get-access-token)**.
> **Внимание**
> Код авторизации по умолчанию действует **2 минуты** и может быть использован только **1 раз**.
---
**Далее:** [Получение токена доступа](/products/alfa-api/documentation/articles/alfa-id/articles/acf-holding/articles/get-access-token/v1/get-access-token)
**Назад:** [Как использовать ACF для холдингов](/products/alfa-api/documentation/articles/alfa-id/articles/acf-holding/articles/intro/intro)

View File

@@ -0,0 +1,34 @@
Вот преобразованный в Markdown контент страницы. Я очистил его от лишнего программного кода и навигационных элементов портала, оставив только суть документации, ссылки и структуру.
---
# Как использовать ACF для холдингов
**Теги:** `B2B` `H2H`
Холдинги представляют собой интеграцию, которая включает в себя использования двух сценариев: партнёрские сервисы и прямая интеграция.
С помощью одного `client_id` вы сможете выполнять запросы и операции по своей организации. Для этого необходимо получить `access_token` для прямой интеграции по [Authorization Code Flow для H2H-интеграций](/products/alfa-api/documentation/articles/alfa-id/articles/acf-h2h/acf-h2h).
С помощью второго `client_id` вы сможете выполнять операции по своим дочерним компаниям.
### Видео-инструкция
[Скачать или посмотреть видео](/assets/developers-portal.docs.alfa-api/articles/alfa-id/articles/acf-holding/articles/intro/files/acf-holding.mp4)
### Шаги авторизации
1. **Формирование ссылки**
2. **Получение кода авторизации**
3. **Получение токена доступа**
### Согласия пользователей
Срок жизни согласия пользователя – **365 дней**, после его истечения необходимо заново пройти авторизацию. Для этого в ссылке на получение кода авторизации необходимо передать параметр `prompt = consent`.
Узнать дату окончания действия согласия можно с помощью метода [Данные по согласиям пользователей](/products/alfa-api/documentation/articles/alfa-id/articles/expansion/articles/client-consents/v1/client-consents).
### Дополнительно
При необходимости вы можете [обновить](/products/alfa-api/documentation/articles/alfa-id/articles/acf-holding/articles/token-update/v1/token-update) токен или [отозвать](/products/alfa-api/documentation/articles/alfa-id/articles/expansion/articles/revoke-token/v1/revoke-token) его.
---
**Навигация:**
← [Обновление токена доступа](/products/alfa-api/documentation/articles/alfa-id/articles/acf-h2h/articles/token-update/v1/token-update) | [Получение кода авторизации](/products/alfa-api/documentation/articles/alfa-id/articles/acf-holding/articles/get-auth-code/v1/get-auth-code) →

View File

@@ -0,0 +1,139 @@
# Получение токена доступа
### Эндпоинты
| Окружение | Метод | URL |
| :------------ | :----- | :--------------------------------------- |
| **Песочница** | `POST` | `https://sandbox.alfabank.ru/oidc/token` |
| **Пром** | `POST` | `https://baas.alfabank.ru/oidc/token` |
---
### Описание
В результате запроса будет получено три токена: `access_token`, `refresh_token`, `id_token`.
> **⚠️ Внимание**
>
> - Токен доступа действует **1 час**.
> - Токен доступа может быть отозван, если:
> - пользователь сменил пароль;
> - пользователь превысил допустимое количество попыток ввода пароля;
> - аккаунт пользователя был заблокирован;
> - срок жизни согласия пользователя истёк.
#### Особенности кодирования:
- При использовании `curl` с заголовком `"Content-Type": "application/x-www-form-urlencoded"` необходимо **экранировать** специальные символы параметра `client_secret`. Параметр `redirect_uri` экранировать не нужно.
- Если запрос отправляется через **Postman** (формат `x-www-form-urlencoded`) — экранировать символы вручную не требуется.
- Подробную информацию по экранированию можно посмотреть [здесь](/products/alfa-api/documentation/articles/alfa-id/articles/screening/screening).
---
### Параметры запроса
#### HEADERS
| Атрибут | Тип | Обязательность | Описание |
| :--------------- | :----- | :------------- | :---------------------------------- |
| **Accept** | string | required | `application/json` |
| **Content-Type** | string | required | `application/x-www-form-urlencoded` |
#### BODY
| Атрибут | Тип | Обязательность | Описание |
| :---------------- | :----- | :------------- | :--------------------------------------------------- |
| **grant_type** | string | required | Тип гранта. Возможные значения: `authorization_code` |
| **code** | string | required | Код авторизации |
| **client_id** | string | required | Идентификатор партнёрского сервиса |
| **client_secret** | string | required | Секретный ключ партнёрского сервиса |
| **redirect_uri** | string | required | URI перенаправления |
| **code_verifier** | string | optional | Код верификатор |
---
### Пример запроса (cURL)
```bash
curl --location 'https://baas.alfabank.ru/oidc/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'Accept: application/json' \
--data-urlencode 'grant_type=authorization_code' \
--data-urlencode 'code=8962c304-89b1-11ec-a8a3-0242ac120002' \
--data-urlencode 'client_id=0cee0683-85ae-49f2-a63d-29f97aad1911' \
--data-urlencode 'client_secret=Qwerty1234567890Qwerty1234567890!' \
--data-urlencode 'redirect_uri=https://wwww.partner.ru/code' \
--data-urlencode 'code_verifier=string'
```
---
### Параметры ответа
#### Пример ответа 200 (OK)
```json
{
"access_token": "eyJraWQiOiJhbGZhLXRlc3Qtand0IiwidHlwIjoiSldUIiwiYWxnIjoiUlMyNTYifQ...",
"refresh_token": "13b8230b-b6bf-4bb9-b977-3bc0a988a5fd",
"token_type": "Bearer",
"expires_in": 3600,
"id_token": "eyJraWQiOiJhbGZhLXRlc3Qtand0IiwidHlwIjoiSldUIiwiYWxnIjoiUlMyNTYifQ..."
}
```
#### Описание полей ответа (BODY)
| Атрибут | Тип | Обязательность | Описание |
| :---------------- | :------ | :------------- | :--------------------------- |
| **access_token** | string | required | Токен доступа |
| **refresh_token** | string | required | Токен обновления |
| **token_type** | string | required | Тип токена (Bearer) |
| **expires_in** | integer | optional | Срок жизни токена в секундах |
| **id_token** | string | required | Идентификационный токен |
---
### Таблица возможных значений параметра error (400 Bad Request)
| Значение | Описание |
| :----------------------- | :---------------------------------------------------------------------------------------------------------- |
| `invalid_request` | Отсутствует обязательный параметр, неподдерживаемое значение, повторение параметра или неправильный формат. |
| `invalid_client` | Ошибка аутентификации клиента (неизвестный клиент или неверный метод). |
| `invalid_grant` | Недействительный код авторизации, токен обновления или несоответствие URI. |
| `unsupported_grant_type` | Тип `grant_type` не поддерживается сервером. |
| `internal_error` | Произошла непредвиденная ошибка. |
---
### Описание клэймов access_token
| Значение | Описание |
| :----------------- | :------------------------------------------------ |
| **iss** | URL-адрес Alfa ID (https://id.alfabank.ru/oidc) |
| **sub** | Уникальный идентификатор пользователя Alfa ID |
| **aud** | Идентификатор сервиса-партнёра (аудитория токена) |
| **exp** | Время окончания срока действия (Unix timestamp) |
| **iat** | Время выпуска токена |
| **scope_claims** | Массив клэймов области применения |
| **scope_services** | Массив операций области применения |
---
### Описание клэймов ID_TOKEN
| Значение | Описание | Scope |
| :------------ | :-------------------------------------------------- | :----- |
| **iss** | URL-адрес Alfa ID | openid |
| **sub** | Уникальный идентификатор пользователя | openid |
| **aud** | Идентификатор сервиса-партнёра | openid |
| **exp** | Время окончания срока действия | openid |
| **iat** | Время выпуска JWT | openid |
| **auth_time** | Время аутентификации пользователя | openid |
| **nonce** | Значение для связи сессии (если передавалось ранее) | openid |
| **acr** | Способ аутентификации пользователя | openid |
| **azp** | Сторона, которой выдан токен (client_id) | openid |
---
_Документация Alfa API_

View File

@@ -0,0 +1,48 @@
# Кнопка входа по Alfa ID
**Теги:** `B2B` `B2C` `H2H`
Для того чтобы Ваши пользователи могли аутентифицироваться через Alfa ID, вы можете добавить кнопку **«Войти по Alfa ID»**, реализовав её в соответствии с требованиями, указанными на официальной странице руководства:
🔗 [https://alfabank.ru/sme/guide-alfaid](https://alfabank.ru/sme/guide-alfaid)
### Исходные файлы
Вы можете импортировать макет кнопки для использования в своем дизайне из следующего файла:
📥 [Скачать button.fig](https://developers.alfabank.ru/assets/developers-portal.docs.alfa-api/articles/alfa-id/articles/button/files/button.fig)
---
## Общая информация об Alfa ID
_(Данные из справочного раздела системы)_
**Alfa ID** — единая учётная запись пользователя ЮЛ (юридического лица) / ФЛ (физического лица), которая помогает пользователям входить на ваш сайт или в приложение, а также в продукты и сервисы Альфа-Банка.
### Преимущества для пользователей
- Простая и быстрая аутентификация на сайтах и в приложениях;
- Единый и безопасный аккаунт;
- Упрощение процесса покупки или подачи заявки;
- Безопасность персональных данных;
- Не нужно запоминать множество паролей.
### Преимущества для партнёров
- Простая и быстрая аутентификация, выше конверсия на вход;
- Быстрое получение актуальных данных пользователя от Банка;
- Автозаполнение форм и заявок;
- Проверка реальности пользователя;
- Индустриальные стандарты защиты данных и персональной информации;
- Отсутствие необходимости хранить персональные данные на своей стороне.
### Рекомендуемые браузеры
- **Яндекс Браузер:** версии 21 и выше;
- **Safari:** версии 16 и выше;
- **Google Chrome:** версии 117 и выше.
---
**Навигация:**
← [Аутентификация](/products/alfa-api/documentation/articles/alfa-id/articles/authentication/authentication) | [Как использовать ACF](/products/alfa-api/documentation/articles/alfa-id/articles/acf/articles/intro/intro) →

View File

@@ -0,0 +1,92 @@
# Аутентификация
**Теги:** `B2B` `B2C` `H2H`
При входе через Alfa ID для вашего пользователя доступны следующие способы аутентификации:
- логин и пароль;
- QR-код;
- электронная подпись;
- биометрия.
---
### Логин и пароль
Аутентификация по логину и паролю — пользователь вводит свой логин и пароль. После успешной аутентификации пользователь получает доступ к защищённым ресурсам.
**Процесс аутентификации:**
1. Введите свои учётные данные на странице входа.
2. Введите код из СМС.
---
### QR-код
Аутентификация по QR-коду — это технология, которая позволяет пользователям быстро и безопасно подтверждать свою личность путём сканирования QR-кода.
**Процесс аутентификации:**
1. Отсканируйте QR-код камерой мобильного устройства.
2. Подтвердите вход через приложение Альфа-Бизнес Мобайл (АБМ).
3. Введите код из СМС.
> **Примечание**
> Наличие приложения Альфа-Бизнес Мобайл (АБМ) является условием входа по QR-коду.
---
### Электронная подпись
Аутентификация с помощью электронной подписи (ЭП) — это технология, основанная на применении средств криптографической защиты информации, для использования которой необходимо наличие токена (USB-носитель) с сертификатом и специализированного программного обеспечения на компьютере.
Для аутентификации используются следующие виды ЭП:
- квалифицированная электронная подпись (КЭП);
- сертификат Альфа-Банка (неквалифицированная электронная подпись, НЭП).
#### Квалифицированная электронная подпись (КЭП)
**Процесс аутентификации:**
1. Вставить токен с сертификатом КЭП в компьютер.
2. Нажать на кнопку «Войти по токену».
3. Нажать на кнопку «С сертификатом КЭП».
4. Выбрать необходимый сертификат из списка.
5. Ввести пароль (при его наличии) от сертификата.
6. Ввести пароль от учётной записи Банка.
#### Сертификат Альфа-Банка (НЭП)
**Процесс аутентификации:**
1. Вставить токен с сертификатом Альфа-Банка (НЭП) в компьютер.
2. Нажать на кнопку «Войти по токену».
3. Нажать на кнопку «С сертификатом Альфа-Банка».
4. Выбрать необходимый сертификат из списка.
5. Ввести пароль от токена.
6. Ввести пароль от учётной записи Банка.
---
### Биометрия
Аутентификация с помощью биометрических данных является одним из наиболее надёжных методов защиты информации. Она позволяет идентифицировать пользователя на основе его уникальных физических характеристик (отпечаток пальца, лицо).
**Процесс аутентификации:**
1. Выберите «Быстрый вход».
2. Приложите палец или отсканируйте лицо.
> **Примечание**
>
> 1. Данный способ аутентификации работает на устройствах, поддерживающих работу с биометрическими данными.
> 2. Для того чтобы использовать данный способ аутентификации, необходимо предварительно пройти регистрацию биометрических данных при входе через логин и пароль.
---
### Навигация
- [← Что такое Alfa ID](/products/alfa-api/documentation/articles/alfa-id/articles/intro/intro)
- [Кнопка входа по Alfa ID →](/products/alfa-api/documentation/articles/alfa-id/articles/button/button)

View File

@@ -0,0 +1,114 @@
# Как использовать CCF (Client Credentials Flow)
**Теги:** `B2B` `B2C` `H2H`
Вы можете использовать **Client Credentials Flow** в своих приложениях для получения доступа к определённому числу сервисов Alfa API. Доступ осуществляется с помощью `access_token`, который Вы получаете без участия пользователя.
### Доступные методы
Методы, доступные с помощью `access_token`, полученного по Client Credentials Flow:
- [Платежи через СБП](/products/alfa-api/documentation/articles/sbp/articles/sbp-b2c/articles/intro/intro)
- [Кредиты](/products/alfa-api/documentation/articles/scoring/scoring)
- [Оплата покупок через СБП](/products/alfa-api/documentation/articles/sbp/articles/sbp-c2b/articles/intro/intro)
- [Операции СБП для юрлиц](/products/alfa-api/documentation/articles/sbp/articles/sbp-b2b/articles/intro/intro)
- [Дебетовая анкета](/products/alfa-api/documentation/articles/debit-cards/articles/intro/intro)
- [Цифровые финансовые активы (ЦФА)](/products/alfa-api/documentation/articles/dfa/dfa)
> **Важно:** Client Credentials Flow не позволяет использовать методы, которые содержат персональные данные пользователя или банковскую тайну. В соответствии с регуляторными требованиями, Банк обязан проверить полномочия представителя на получение такой информации.
---
## Шаги авторизации
1. **Получение токена доступа** (см. детали ниже).
### Дополнительно
При необходимости вы можете [отозвать токен](/products/alfa-api/documentation/articles/alfa-id/articles/expansion/articles/revoke-token/v1/revoke-token).
---
## Техническая спецификация API
### Получение токена доступа
**Endpoint:** `POST https://baas.alfabank.ru/oidc/token`
#### Заголовки (Headers)
| Название | Обязательно | Значение |
| :------------- | :---------- | :---------------------------------- |
| `Content-Type` | Да | `application/x-www-form-urlencoded` |
| `Accept` | Да | `application/json` |
#### Параметры тела запроса (Request Body)
| Параметр | Тип | Описание |
| :-------------- | :----- | :---------------------------------------------------------------------------------------------------------- |
| `grant_type` | string | Тип гранта. Для CCF обычно используется `client_credentials` (в данном примере указан `authorization_code`) |
| `client_id` | uuid | Идентификатор партнёрского сервиса |
| `client_secret` | string | Секретный ключ партнёрского сервиса |
| `code` | uuid | Код авторизации |
| `redirect_uri` | string | URI перенаправления |
---
## Примеры кода
### cURL
```bash
curl --location 'https://baas.alfabank.ru/oidc/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'Accept: application/json' \
--data-urlencode 'grant_type=authorization_code' \
--data-urlencode 'code=8962c304-89b1-11ec-a8a3-0242ac120002' \
--data-urlencode 'client_id=0cee0683-85ae-49f2-a63d-29f97aad1911' \
--data-urlencode 'client_secret=Qwerty1234567890Qwerty1234567890!' \
--data-urlencode 'redirect_uri=https://wwww.partner.ru/code'
```
### Python
```python
import requests
url = "https://baas.alfabank.ru/oidc/token"
payload = 'grant_type=authorization_code&code=8962c304-89b1-11ec-a8a3-0242ac120002&client_id=0cee0683-85ae-49f2-a63d-29f97aad1911&client_secret=Qwerty1234567890Qwerty1234567890!&redirect_uri=https%3A%2F%2Fwwww.partner.ru%2Fcode'
headers = {
'Content-Type': 'application/x-www-form-urlencoded',
'Accept': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
```
---
## Возможные ошибки (параметр `error`)
| Значение | Описание |
| :----------------------- | :------------------------------------------------------------------ |
| `invalid_request` | Отсутствует обязательный параметр или неверный формат запроса. |
| `invalid_client` | Ошибка аутентификации клиента (неизвестный ID или неверный secret). |
| `invalid_grant` | Недействительный код авторизации или несоответствие redirect_uri. |
| `unsupported_grant_type` | Тип grant_type не поддерживается сервером. |
| `internal_error` | Внутренняя ошибка сервера. |
---
## Структура ответа (Success 200 OK)
При успешном запросе возвращается JSON со следующими полями:
- `access_token`: Токен доступа (JWT). Действует 1 час.
- `refresh_token`: Токен для обновления access_token.
- `id_token`: Идентификационный токен.
- `expires_in`: Срок жизни токена в секундах (3600).
- `token_type`: Тип токена (Bearer).
---
_Документация Alfa API. [Портал разработчика](https://developers.alfabank.ru)_

View File

@@ -0,0 +1,119 @@
# Данные по согласиям пользователей
**Теги:** `B2B` `B2C` `H2H`
## Эндпоинты
### Песочница
`GET https://sandbox.alfabank.ru/oidc/client-consents`
### Пром
`GET https://baas.alfabank.ru/oidc/client-consents`
---
## Описание
Данный метод можно включать в `scope` с типом гранта [Client Credentials Flow](/products/alfa-api/documentation/articles/alfa-id/articles/ccf/articles/intro/intro) или с типом гранта [Authorization Code Flow](/products/alfa-api/documentation/articles/alfa-id/articles/acf/acf).
---
## Параметры запроса
### HEADERS
| Атрибут | Тип | Обязательность | Описание |
| :---------------- | :----- | :------------- | :-------------------- |
| **Authorization** | string | required | Bearer {access_token} |
| **Accept** | string | required | application/json |
### QUERY
| Атрибут | Тип | Обязательность | Описание |
| :--------------------- | :------ | :------------- | :------------------------------------------------------------------------------------ |
| **clientId** | string | optional | Идентификатор партнёрского сервиса |
| **sub** | string | optional | Идентификатор субъекта (пользователя) |
| **organizationIdHash** | string | optional | Хэш идентификатора ЮЛ (организации) |
| **isActive** | boolean | optional | Признак активного согласия |
| **limit** | integer | optional | Количество объектов на одной странице. Значение по умолчанию: 1000 |
| **offset** | integer | optional | Количество объектов в списке, которые необходимо пропустить. Значение по умолчанию: 0 |
---
## Пример запроса (cURL)
```bash
curl --location --globoff 'https://baas.alfabank.ru/oidc/client-consents?clientId={clientId}&sub={sub}&organizationIdHash={organizationIdHash}&isActive={isActive}&limit={limit}&offset={offset}' \
--header 'Authorization: Bearer {access-token}' \
--header 'Accept: application/json'
```
---
## Параметры ответа
### 200 OK
**HEADERS**
- **Content-Type**: `application/json` (optional)
**BODY**
| Атрибут | Тип | Описание |
| :--- | :--- | :--- |
| **pagination** | object | Данные пагинации |
| ∟ **limit** | number | Количество записей на одной странице |
| ∟ **offset** | number | Количество записей в списке, которые были пропущены |
| ∟ **totalCount** | number | Общее количество записей |
| **items** | array of objects | Массив объектов результата |
| ∟ **createDateTime** | string | Дата и время создания (required) |
| ∟ **sub** | string | Идентификатор субъекта (пользователя) (required) |
| ∟ **organizationIdHash** | string | Хэш идентификатора ЮЛ (организации) (optional) |
| ∟ **clientId** | string | Идентификатор партнёрского сервиса (required) |
| ∟ **isActive** | boolean | Признак активного согласия (required) |
| ∟ **expireDate** | string | Дата окончания действия (required) |
#### Пример ответа 200
```json
{
"pagination": {
"limit": 1,
"offset": 0,
"totalCount": 1000
},
"items": [
{
"createDateTime": "2022-10-10T12:15:10",
"sub": "3228e68e-cc34-4b82-b43d-49112b5d9d3e",
"organizationIdHash": "665f4c5837ea35d1b081f4feb05de61522b6854c2268583f3f5865a0981f9268",
"clientId": "0cee0683-85ae-49f2-a63d-29f97aad1911",
"isActive": true,
"expireDate": "2023-04-10"
}
]
}
```
---
### Ошибки
| Код | Описание | Возможные значения `error` |
| :------ | :-------------------- | :------------------------------------------------------------ |
| **400** | Bad Request | `invalid_request` — неверные входные параметры запроса |
| **401** | Unauthorized | `invalid_token` — токен просрочен, отозван или недействителен |
| **500** | Internal Server Error | `internal_error` — внутренняя ошибка сервиса |
---
## Навигация
- ← [Отзыв токена доступа](/products/alfa-api/documentation/articles/alfa-id/articles/expansion/articles/revoke-token/v1/revoke-token)
- → [Экранирование](/products/alfa-api/documentation/articles/alfa-id/articles/screening/screening)
---
_Документация Alfa API. [Официальный портал](https://developers.alfabank.ru/)_

View File

@@ -0,0 +1,76 @@
# Отзыв токена доступа
**Теги:** `B2B` `B2C` `H2H`
## Эндпоинты
| Окружение | Метод и URL |
| :------------ | :--------------------------------------------- |
| **Песочница** | `POST https://sandbox.alfabank.ru/oidc/revoke` |
| **Пром** | `POST https://baas.alfabank.ru/oidc/revoke` |
## Описание
Данный метод используется для отзыва `access_token` и `refresh_token`.
В случае отзыва `refresh_token`, `access_token` будет также отозван.
## Параметры запроса
### HEADERS
| Атрибут | Тип | Обязательность | Описание |
| :--------------- | :----- | :------------- | :---------------------------------- |
| **Content-Type** | string | required | `application/x-www-form-urlencoded` |
### BODY
| Атрибут | Тип | Обязательность | Описание |
| :------------------ | :----- | :------------- | :----------------------------------------------------------------------------------------------------------------------- |
| **client_id** | string | required | Идентификатор партнёрского сервиса |
| **client_secret** | string | required | Секретный ключ партнёрского сервиса |
| **token** | string | required | Отзываемый токен |
| **token_type_hint** | string | optional | Тип отзываемого токена. Возможные значения:<br>• `access_token` — токен доступа;<br>• `refresh_token` — токен обновления |
---
## Пример запроса (cURL)
```bash
curl --location 'https://baas.alfabank.ru/oidc/revoke' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'client_id=0cee0683-85ae-49f2-a63d-29f97aad1911' \
--data-urlencode 'client_secret=Qwerty1234567890Qwerty1234567890!' \
--data-urlencode 'token=string' \
--data-urlencode 'token_type_hint=refresh_token'
```
---
## Параметры ответа
### 200 OK
Нет тела ответа.
### 400 Bad Request
**Headers:**
- `Content-Type: application/json` (optional)
**Body:**
| Атрибут | Тип | Обязательность | Описание |
| :--- | :--- | :--- | :--- |
| **error** | string | required | Код ошибки. Возможные значения:<br>• `invalid_request` — неверные входные параметры запроса |
| **error_description** | string | optional | Описание ошибки |
---
## Навигация
- [← Проверка подписи](/products/alfa-api/documentation/articles/alfa-id/articles/expansion/articles/signature-checking/signature-checking)
- [Данные по согласиям пользователей →](/products/alfa-api/documentation/articles/alfa-id/articles/expansion/articles/client-consents/v1/client-consents)
---
_Документация Alfa ID / Расширение сценариев_

View File

@@ -0,0 +1,155 @@
# Проверка подписи
Проверить подпись можно для трех сущностей:
- `id_token`;
- `access_token`;
- `userinfo`.
Партнёр API получает ответ в формате сформированного токена **JWS**, который состоит из:
- **Заголовка (Header)**, содержащего алгоритм подписи, идентификатор ключа и тип токена;
- **JSON-объекта (Payload)**, в котором перечислены клэймы полезной нагрузки;
- **Электронной подписи (Signature)**, содержащей подпись данных секретным ключом, парным открытому ключу, выпущенному для Alfa ID.
### Декодирование компактной сериализации JWS
JWS формируется из трех составляющих и представляет структуру вида:
`Base64URL(Header).Base64URL(Payload).Base64URL(Signature)`
---
#### Пример access_token
**Закодированный токен:**
`eyJraWQiOiJhbGZhLXRlc3Qtand0IiwidHlwIjoiSldUIiwiYWxnIjoiUlMyNTYifQ.eyJzdWIiOiIzMjI4ZTY4ZS1jYzM0LTRiODItYjQzZC00OTExMmI1ZDlkM2UiLCJhdWQiOiIwY2VlMDY4My04NWFlLTQ5ZjItYTYzZC0yOWY5N2FhZDE5MTEiLCJpc3MiOiJodHRwczpcL1wvaWQuYWxmYWJhbmsucnUiLCJleHAiOjE2MzE2NjY2NjMsInNjb3BlX3NlcnZpY2VzIjpbInBheW1lbnQiLCJzdGF0ZW1lbnQiXSwiaWF0IjoxNjMxNjYzMDYzLCJzY29wZV9jbGFpbXMiOlsibmFtZSIsImdpdmVuX25hbWUiLCJmYW1pbHlfbmFtZSIsIm1pZGRsZV9uYW1lIiwiZW1haWwiLCJwaG9uZV9udW1iZXIiXX0.WVr5xkQSEGqpPXN3aIo0zHZLDL0vvtxEEQ83BrgJo7l0BjjALeGDRYENF2bL8j3n1pXRnduiBQcYNV6teBhESI8V_8kd7Kh7LTePkJWadPSvD__KskC69b4XZ-zN-IQ73NmAcBDStnnhSXGKL6xhdRy-TGiAoKPsRWiDVntsDlpCQNHAt3tJk8q_SQS4S1k6qju9eJ2GFkgmd6z8rR2vaBykaOF0K61ltksw6YgXhuek3OlYkqIAivyKYl59uio8zMpJk-YrPlmawwmvWPF0vKhaLj8Mvn4mVMsVSfuVVKP2ksHG0MAlWpO3Sh9GoKO4d6TQplJ4vgIIeNx-44npqw`
**Раскодированные данные:**
**Header**
```json
{
"kid": "alfa-test-jwt",
"typ": "JWT",
"alg": "RS256"
}
```
**Payload**
```json
{
"sub": "3228e68e-cc34-4b82-b43d-49112b5d9d3e",
"aud": "0cee0683-85ae-49f2-a63d-29f97aad1911",
"iss": "https://id.alfabank.ru",
"exp": 1631666663,
"scope_services": ["payment", "statement"],
"iat": 1631663063,
"scope_claims": [
"name",
"given_name",
"family_name",
"middle_name",
"email",
"phone_number"
]
}
```
**Signature**
```javascript
RSASHA256(
base64UrlEncode(header) + "." + base64UrlEncode(payload),
your - 256 - bit - secret,
); // secret base64 encoded
```
---
#### Пример JWS идентификационного токена id_token
Каждая часть, разделённая точкой, должна декодироваться отдельно с использованием алгоритма Base64URL Encoding.
**Закодированный токен:**
`eyJraWQiOiJhbGZhLXRlc3Qtand0IiwidHlwIjoiSldUIiwiYWxnIjoiUlMyNTYifQ .eyJzdWIiOiIzMjI4ZTY4ZS1jYzM0LTRiODItYjQzZC00OTExMmI1ZDlkM2UiLCJhdWQiOiIwY2VlMDY4My04NWFlLTQ5ZjItYTYzZC0yOWY5N2FhZDE5MTEiLCJhY3IiOiJMb0EzIiwiYXpwIjoiMGNlZTA2ODMtODVhZS00OWYyLWE2M2QtMjlmOTdhYWQxOTExIiwiYXV0aF90aW1lIjoxNjMxNjYzMDUzLCJpc3MiOiJodHRwczpcL1wvaWQuYWxmYWJhbmsucnUiLCJleHAiOjE2MzE2NjY2NjMsImlhdCI6MTYzMTY2MzA2Mywibm9uY2UiOiJuLTBTNl9XekEyTWoifQ .xBE6LEUxOKleHCZVQacldJfKr5KtyyvJKCCmInqapmRJ_aRF-cEoVfpJd_kxlNmJYT7AcjMMppovNkmhB49VL5DK8FhF0fvRgLskKR9Eohy4eiC8ued03Z1LyLz1H7EcKSkusaCIajzIvxxZfVtSHI4jmgLg6ItXPdZgIDUWINgESkl6I7IP5CbfONHweNnbkWEOEzxDgGGnxxtPxrWVoPVP-ijUeUSH_iESHfrhY_ePRMYi2If62IsKX_0GT5BHRYOhXVDZ9fyn5fRCvg8_QoCykDVIOZMtWQ3w4TadqS0dfMlsLBxkVbVftzH2fWRLTCX3SJ5AXiytHkpow8V45w`
**Раскодированные данные:**
**Header**
```json
{
"kid": "alfa-test-jwt",
"typ": "JWT",
"alg": "RS256"
}
```
**Payload**
```json
{
"sub": "3228e68e-cc34-4b82-b43d-49112b5d9d3e",
"aud": "0cee0683-85ae-49f2-a63d-29f97aad1911",
"acr": "LoA3",
"azp": "0cee0683-85ae-49f2-a63d-29f97aad1911",
"auth_time": 1631663053,
"iss": "https://id.alfabank.ru",
"exp": 1631666663,
"iat": 1631663063,
"nonce": "n-0S6_WzA2Mj"
}
```
---
#### Пример userinfo
**Закодированный токен:**
`eyJraWQiOiJhbGZhLXRlc3Qtand0IiwidHlwIjoiSldUIiwiYWxnIjoiUlMyNTYifQ.eyJjdXMiOiJVQUFBQUEiLCJzdWIiOiIzMjI4ZTY4ZS1jYzM0LTRiODItYjQzZC00OTExMmI1ZDlkM2UiLCJiaXJ0aGRhdGUiOiIyMDAwLTAyLTIwIiwicm9sZSI6IkFDQ09VTlRBTlQsIE1BTkFHRVIiLCJnZW5kZXIiOiJNQUxFIiwiaWRlbnRpdHlfZG9jdW1lbnRfbmFtZSI6ItCf0LDRgdC_0L7RgNGCINCz0YDQsNC20LTQsNC90LjQvdCwINCg0KQiLCJpZGVudGl0eV9kb2N1bWVudF9udW1iZXIiOjIyMjIyMiwiaXNzIjoiaHR0cHM6XC9cL2JhYXMuYWxmYWJhbmsucnUiLCJpbm4iOjc0MTUxMTExMjIyMiwiZWlvIjp0cnVlLCJnaXZlbl9uYW1lIjoi0KLQtdGB0YIiLCJtaWRkbGVfbmFtZSI6ItCi0LXRgdGC0L7QstC40YciLCJhY3VzIjoiWEFBQUFBIiwiaWRlbnRpdHlfZG9jdW1lbnRfc2VyaWVzIjoxMTExLCJhdWQiOiIwY2VlMDY4My04NWFlLTQ5ZjItYTYzZC0yOWY5N2FhZDE5MTEiLCJhY2xjIjoiWEFBQUExIiwidXBkYXRlZF9hdCI6IjIwMjItMDEtMjAiLCJuYW1lIjoi0KLQtdGB0YLQvtCyINCi0LXRgdGCINCi0LXRgdGC0L7QstC40YciLCJwaG9uZV9udW1iZXIiOjc5MTkxMTEyMjMzLCJjbGMiOiJVQUFBQTEiLCJmYW1pbHlfbmFtZSI6ItCi0LXRgdGC0L7QsiIsImVtYWlsIjoiZW1haWxAZW1haWwucnUifQ.WVr5xkQSEGqpPXN3aIo0zHZLDL0vvtxEEQ83BrgJo7l0BjjALeGDRYENF2bL8j3n1pXRnduiBQcYNV6teBhESI8V_8kd7Kh7LTePkJWadPSvD__KskC69b4XZ-zN-IQ73NmAcBDStnnhSXGKL6xhdRy-TGiAoKPsRWiDVntsDlpCQNHAt3tJk8q_SQS4S1k6qju9eJ2GFkgmd6z8rR2vaBykaOF0K61ltksw6YgXhuek3OlYkqIAivyKYl59uio8zMpJk-YrPlmawwmvWPF0vKhaLj8Mvn4mVMsVSfuVVKP2ksHG0MAlWpO3Sh9GoKO4d6TQplJ4vgIIeNx-44npqw`
**Payload (раскодированный)**
```json
{
"cus": "UAAAAA",
"sub": "3228e68e-cc34-4b82-b43d-49112b5d9d3e",
"birthdate": "2000-02-20",
"role": "ACCOUNTANT, MANAGER",
"gender": "MALE",
"identity_document_name": "Паспорт гражданина РФ",
"identity_document_number": 222222,
"iss": "https://baas.alfabank.ru",
"inn": 741511112222,
"eio": true,
"given_name": "Тест",
"middle_name": "Тестович",
"acus": "XAAAAA",
"identity_document_series": 1111,
"aud": "0cee0683-85ae-49f2-a63d-29f97aad1911",
"aclc": "XAAAA1",
"updated_at": "2022-01-20",
"name": "Тестов Тест Тестович",
"phone_number": 79191112233,
"clc": "UAAAA1",
"family_name": "Тестов",
"email": "email@email.ru"
}
```
---
### Алгоритм проверки подписи
1. Вычислите хэш-функцию **SHA256** от данных `Base64URL(Header).Base64URL(Payload)`.
2. Дешифруйте данные `Base64URL(Signature)`, используя алгоритм **RS256** и открытый ключ с идентификатором, переданным в Заголовке (Header) в клэйме `kid` (в приведенном выше примере это `alfa-test-jwt`).
3. Сравните вычисленный хэш из 1 шага и дешифрованные данные из 2 шага. Если значения равны, значит, подпись верна.
**Сертификат для проверки электронной подписи:** [certificate-prod](/assets/developers-portal.docs.alfa-api/articles/alfa-id/articles/expansion/articles/signature-checking/files/cert.cer)
---
_Навигация:_
[← Получение токена доступа](/products/alfa-api/documentation/articles/alfa-id/articles/ccf/articles/get-access-token/v1/get-access-token) | [Отзыв токена доступа →](/products/alfa-api/documentation/articles/alfa-id/articles/expansion/articles/revoke-token/v1/revoke-token)

View File

@@ -0,0 +1,70 @@
Вот преобразованный контент страницы в формат Markdown. Я сохранил структуру, иерархию заголовков, примеры кода и таблицу кодировки.
---
# Экранирование
**Теги:** `B2B` `B2C` `H2H`
**Путь:** [Главная](https://developers.alfabank.ru/) / Alfa ID / Экранирование
---
**Экранирование специальных символов** — это процесс преобразования специальных символов (например, кавычек, пробелов, знаков препинания) в их соответствующие эквиваленты для передачи данных через различные протоколы и форматы.
Процентное кодирование или кодирование URI-адресов представляет собой метод кодирования произвольных данных с использованием ограниченных символов US-ASCII, разрешённых в URI.
Синтаксис URI содержит зарезервированные символы (двух типов) и незарезервированные символы.
### Зарезервированные символы
* **gen-delims**: `":"`, `"/"`, `"?"`, `"# "`, `"["`, `"]"`, `"@"` — символы, разделяющие URI на крупные компоненты.
* **sub-delims**: `"!"`, `"$ "`, `"&"`, `"' "`, `"("`, `")"`, `"* "`, `"+"`, `","`, `";"`, `"="` — символы, разделяющие крупный компонент на более мелкие составляющие.
### Незарезервированные символы
В общем случае незарезервированные символы — это `ALPHA`, `DIGIT`, `"-"`, `"."`, `"_"`, `"~"`, где `ALPHA` — это буквы, а `DIGIT` — десятичные цифры.
Если символ из набора зарезервированных символов используется в другом контексте, то он должен быть закодирован в процентах. Процентное кодирование зарезервированного символа представляет собой замену/преобразование символа в соответствующее ему значение.
Например, зарезервированный символ `"/"` может быть заменен следующими символами: `%2F`.
---
### Примеры запросов
#### Пример запроса без экранирования
```bash
https://id.alfabank.ru/oidc/authorize?response_type=code&client_id=0cee0683-85ae-49f2-a63d-29f97aad1911&redirect_uri=https://wwww.partner.ru/code&scope=openid&state=abcdef
```
#### Пример запроса с экранированием
```bash
https://id.alfabank.ru/oidc/authorize?response_type=code&client_id=0cee0683-85ae-49f2-a63d-29f97aad1911&redirect_uri=https%3A%2F%2Fwwww.partner.ru%2Fcode&scope=openid&state=abcdef
```
---
### Таблица кодирования символов
| Символ | ANSI (Percent-encoding) |
| :--- | :--- |
| `~` | `%7E` |
| `` ` `` | `%60` |
| `'` | `%27` |
| `"` | `%22` |
| `@` | `%40` |
| `?` | `%3F` |
| `!` | `%21` |
| `#` | `%23` |
| `№` | `%B9` |
| `$` | `%24` |
---
### Навигация
* ← [Данные по согласиям пользователей](/products/alfa-api/documentation/articles/alfa-id/articles/expansion/articles/client-consents/v1/client-consents)
* [API Key](/products/alfa-api/documentation/articles/api-key/api-key) →
---
*Документация Alfa API*

View File

@@ -0,0 +1,83 @@
# Что такое Alfa ID
**Alfa ID** — единая учётная запись пользователя ЮЛ (юридического лица) / ФЛ (физического лица), которая помогает пользователям входить на ваш сайт или в приложение, а также в продукты и сервисы Альфа-Банка.
### Преимущества для пользователей
- Простая и быстрая аутентификация на сайтах и в приложениях;
- Единый и безопасный аккаунт;
- Упрощение процесса покупки или подачи заявки;
- Безопасность персональных данных;
- Не нужно запоминать множество паролей.
### Преимущества для партнёров
- Простая и быстрая аутентификация, выше конверсия на вход;
- Быстрое получение актуальных данных пользователя от Банка;
- Автозаполнение форм и заявок;
- Проверка реальности пользователя;
- Индустриальные стандарты защиты данных и персональной информации;
- Отсутствие необходимости хранить персональные данные на своей стороне.
### Рекомендуемые браузеры для работы с Alfa ID
- **Яндекс Браузер** версии 21 и выше;
- **Safari** версии 16 и выше;
- **Google Chrome** версии 117 и выше.
---
## Инструкция: Настройка прав доступа
По умолчанию доступ к Порталу разработчика имеет только руководитель вашей организации. Для предоставления доступа другим пользователям (например, разработчикам), необходимо создать соответствующую роль в «Альфа-Бизнес».
> **Внимание для ИП:**
> Права разработчика можно назначить от имени самого ИП (роль «Руководитель») или от имени любого другого сотрудника с ролью «Руководитель» (потребуется подтверждение от владельца ИП).
### Шаг 1. Перейдите в раздел «Пользователи и роли»
На главном экране Альфа-Бизнес перейдите в настройки компании.
![image](files/1.png)
![image](files/2.png)
В разделе **Моя компания** выберите карточку **Пользователи и роли**.
![image](files/3.png)
### Шаг 2. Создайте новую роль
Нажмите **Создать роль**.
![image](files/4.png)
Укажите название роли (например, «Разработчик API»).
![image](files/5.png)
Далее настройте права. Рекомендуется создавать роль на основании прав руководителя, сбросив лишнее:
1. Нажмите **Снять все**, чтобы сбросить права руководителя.
![image](files/6.png)
2. В разделе **Обслуживание бизнеса** выберите **Alfa API**, указав необходимые права.
![image](files/7.png)
3. Нажмите **Создать роль** для сохранения.
### Шаг 3. Назначьте роль разработчику
В разделе **Пользователи** нажмите на три точки справа от нужного сотрудника и выберите **Сменить роль**.
![image](files/9.png)
Выберите созданную роль и нажмите **Сменить**.
![image](files/11.png)
Подтвердите смену роли кодом из СМС.
![image](files/12.png)
После успешной смены в записи пользователя отобразится статус **Подключён**. Теперь пользователь может работать с Порталом разработчика.
![image](files/13.png)
---
## Требования к полномочиям для авторизации
Для корректной работы H2H-интеграций ключ доступа (`access_token` / `API Key`) должен получать пользователь, обладающий правами на конкретные сервисы:
- **При использовании ACF H2H:** Авторизацию в Alfa ID должен проходить пользователь, у которого в Альфа-Бизнес настроены полномочия на использование выбранных `scopes`.
- **При использовании API Key:** Выпускать ключ должен пользователь, имеющий права на те продукты, которые выбраны при выпуске ключа.
**Пример:** Если у разработчика есть права на редактирование интеграций, но нет прав на «Просмотр выписки», то выпущенный им API Key для сервиса `transactions` работать не будет.

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,120 @@
# Создание вебхука
**Типы интеграции:** `B2B` `B2C` `H2H`
**Метод:** `POST`
Сервис информирования при наступлении в системе события, на которое подписан Партнёр API.
## Эндпоинты
| Окружение | URL |
| :------------ | :------------------------------------------------- |
| **Песочница** | `POST https://sandbox.alfabank.ru/api/v1/webhooks` |
| **Пром** | `POST https://baas.alfabank.ru/api/v1/webhooks` |
---
## Scope
`scope` события, на которое подписываетесь, с допустимыми значениями можно посмотреть [здесь](/products/alfa-api/documentation/articles/webhooks/webhooks).
---
## Параметры запроса
### HEADERS
| Атрибут | Тип | Обязательность | Описание |
| :---------------- | :------- | :------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Authorization** | `string` | **required** | Bearer {access_token}, полученный по [Authorization Code Flow](/products/alfa-api/documentation/articles/alfa-id/articles/acf/articles/intro/intro) / [Authorization Code Flow H2H](/products/alfa-api/documentation/articles/alfa-id/articles/acf-h2h/articles/intro/intro) |
| **Accept** | `string` | **required** | `application/json` |
| **Content-Type** | `string` | **required** | `application/json` |
### BODY
| Атрибут | Тип | Обязательность | Описание |
| :---------------- | :---------------- | :------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **object** | `string` | **required** | Объект/сущность, на который партнёр API хочет подписаться. Возможные значения:<br>• `ul_transaction_default` — получение выписки;<br>• `jp_sbp_incoming_payments` — получение входящих платежей. |
| **data** | `object` | optional | Дополнительные данные по вебхукам. Список полей зависит от события. Для `jp_sbp_incoming_payments` не заполняется. |
| **data.accounts** | `array of string` | optional | Список счетов. Заполняется при `object: ul_transaction_default`. Если не переданы, вебхук создается на все доступные счета. |
| **callbackUri** | `string` | **required** | URL партнёра. Должен соответствовать хосту `redirect_uri` из настроек Alfa ID (проверка по домену второго уровня). |
| **version** | `integer` | optional | Версия формата данных. Для текущих объектов возможное значение — `1`. |
---
## Пример запроса
```bash
curl -X POST https://baas.alfabank.ru/api/v1/webhooks \
-H 'Authorization: Bearer {token}' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"object": "ul_transaction_default",
"data": {
"accounts": [
"40702810800000000001",
"40702810800000000004",
"40702810800000000007"
]
},
"callbackUri": "https://webhook.partner.ru/api/v1/webhook-events",
"version": 1
}'
```
---
## Параметры ответа
### Успешный ответ (201 Created)
| Атрибут | Тип | Описание |
| :-------------- | :-------- | :------------------------------------------------------------------------ |
| **id** | `uuid` | Идентификатор записи вебхука. |
| **object** | `string` | Сущность подписки (`ul_transaction_default`, `jp_sbp_incoming_payments`). |
| **enabled** | `boolean` | Статус вебхука (`true` — включён, `false` — выключен). |
| **data** | `object` | Дополнительные данные (например, список `accounts`). |
| **callbackUri** | `string` | URL партнёра, на который будет отправлен вебхук. |
| **version** | `integer` | Версия формата данных. |
**Пример JSON ответа:**
```json
{
"id": "f9f8c674-7a2a-4297-bdb8-ddd3013de3a3",
"object": "ul_transaction_default",
"enabled": true,
"data": {
"accounts": [
"40702810800000000001",
"40702810800000000004",
"40702810800000000007"
]
},
"callbackUri": "https://webhook.partner.ru/api/v1/webhook-events",
"version": 1
}
```
---
## Ошибки
| Код | Описание (error) | Описание ошибки (error_description) |
| :------ | :------------------------ | :-------------------------------------------------------------- |
| **400** | `invalid_request` | Неверные входные параметры запроса. |
| **401** | `invalid_token` | Токен просрочен, отозван или имеет неправильный формат. |
| **403** | `insufficient_scope` | Нет прав на использование сервиса (настройки scope). |
| **403** | `insufficient_privileges` | Нет доступа к `callbackUri` или вебхуки выключены для партнёра. |
| **404** | `unknown_route` | Эндпоинт не найден или неактивен. |
| **429** | — | Too Many Requests (превышение лимита запросов). |
| **500** | `internal_error` | Внутренняя ошибка сервиса. |
| **503** | — | Service Unavailable (сервис временно недоступен). |
> **Примечание:** Значения параметров ошибок могут изменяться. Рекомендуем предусмотреть стандартную обработку ошибок, не описанных выше.
---
**Навигация:**
← [Как подключить](/products/alfa-api/documentation/articles/webhooks/articles/intro/intro) | [Редактирование вебхука](/products/alfa-api/documentation/articles/webhooks/articles/edit-webhook/v1/edit-webhook) →

View File

@@ -0,0 +1,98 @@
Ниже представлен сконвертированный из HTML текст документации в формате Markdown. Все ссылки сохранены, структура таблиц и примеров кода приведена к удобному для чтения виду.
---
# Удаление вебхука
**Теги:** `B2B` `B2C` `H2H`
## Эндпоинты
| Среда | Метод и URL |
| :--- | :--- |
| **Песочница** | `DELETE https://sandbox.alfabank.ru/api/v1/webhooks/{id}` |
| **Пром** | `DELETE https://baas.alfabank.ru/api/v1/webhooks/{id}` |
### Scope
`scope` события, на которое подписываетесь, с допустимыми значениями можно посмотреть [здесь](https://developers.alfabank.ru/products/alfa-api/documentation/articles/webhooks/webhooks).
---
## Параметры запроса
### HEADERS
| Атрибут | Тип | Обязательность | Описание |
| :--- | :--- | :--- | :--- |
| **Authorization** | string | **required** | Bearer {access_token}, полученный по [Authorization Code Flow](https://developers.alfabank.ru/products/alfa-api/documentation/articles/alfa-id/articles/acf/articles/intro/intro) / [Authorization Code Flow H2H](https://developers.alfabank.ru/products/alfa-api/documentation/articles/alfa-id/articles/acf-h2h/articles/intro/intro) |
| **Accept** | string | **required** | `application/json` |
| **Content-Type** | string | optional | `application/json` |
### PATH
| Атрибут | Тип | Обязательность | Описание |
| :--- | :--- | :--- | :--- |
| **id** | uuid | **required** | Идентификатор вебхука |
### QUERY
| Атрибут | Тип | Обязательность | Описание |
| :--- | :--- | :--- | :--- |
| **object** | string | **required** | Объект/сущность, на который партнёр API хочет подписаться. Возможные значения:<br>• `ul_transaction_default` — получение выписки;<br>• `jp_sbp_incoming_payments` — получение входящих платежей. |
---
## Пример запроса
```bash
curl -X DELETE https://baas.alfabank.ru/api/v1/webhooks/f9f8c674-7a2a-4297-bdb8-ddd3013de3a3?object=ul_transaction_default \
-H 'Authorization: Bearer {token}' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json'
```
---
## Параметры ответа
### 200 — OK
Нет тела ответа.
### 400 — Bad Request
| Атрибут | Тип | Обязательность | Описание |
| :--- | :--- | :--- | :--- |
| **error** | string | required | Код ошибки: `invalid_request` — неверные входные параметры запроса |
| **error_description** | string | optional | Описание ошибки |
### 401 — Unauthorized
| Атрибут | Тип | Обязательность | Описание |
| :--- | :--- | :--- | :--- |
| **error** | string | required | Код ошибки: `invalid_token` — предоставленный токен просрочен, отозван или недействителен |
| **error_description** | string | optional | Описание ошибки |
### 403 — Forbidden
| Атрибут | Тип | Обязательность | Описание |
| :--- | :--- | :--- | :--- |
| **error** | string | required | Код ошибки:<br>• `insufficient_scope` — нет прав (настройки scope);<br>• `insufficient_privileges` — вебхуки выключены для клиента или сервиса |
| **error_description** | string | optional | Описание ошибки |
### 404 — Not Found
| Атрибут | Тип | Обязательность | Описание |
| :--- | :--- | :--- | :--- |
| **error** | string | required | Код ошибки: `unknown_route` — эндпоинт не найден или неактивен |
| **error_description** | string | optional | Описание ошибки |
### 429 — Too Many Requests
Нет тела ответа.
### 500 — Internal Server Error
| Атрибут | Тип | Обязательность | Описание |
| :--- | :--- | :--- | :--- |
| **error** | string | required | Код ошибки: `internal_error` — внутренняя ошибка сервиса |
| **error_description** | string | optional | Описание ошибки |
### 503 — Service Unavailable
Нет тела ответа.
> **Примечание:** Значения параметров ошибок могут изменяться. Рекомендуем предусмотреть стандартную обработку ошибок, не описанных в данной документации.
---
**Навигация:**
[← Редактирование вебхука](https://developers.alfabank.ru/products/alfa-api/documentation/articles/webhooks/articles/edit-webhook/v2/edit-webhook) | [Получение вебхука →](https://developers.alfabank.ru/products/alfa-api/documentation/articles/webhooks/articles/get-webhook/v1/get-webhook)

View File

@@ -0,0 +1,132 @@
Ниже представлено содержимое документа, преобразованное в структурированный Markdown.
---
# Редактирование вебхука
**Теги:** `B2B` `B2C` `H2H`
**Версия:** Последняя версия v2
## Эндпоинты
| Окружение | Метод и URL |
| :--- | :--- |
| **Песочница** | `PUT https://sandbox.alfabank.ru/api/v2/webhooks/{id}` |
| **Пром** | `PUT https://baas.alfabank.ru/api/v2/webhooks/{id}` |
### Scope
`scope` события, на которое подписываетесь, с допустимыми значениями можно посмотреть [здесь](/products/alfa-api/documentation/articles/webhooks/webhooks).
---
## Параметры запроса
### HEADERS
| Атрибут | Тип | Обязательность | Описание |
| :--- | :--- | :--- | :--- |
| **Authorization** | `string` | **required** | Bearer {access_token}, полученный по [Authorization Code Flow](/products/alfa-api/documentation/articles/alfa-id/articles/acf/articles/intro/intro) / [Authorization Code Flow H2H](/products/alfa-api/documentation/articles/alfa-id/articles/acf-h2h/articles/intro/intro) |
| **Accept** | `string` | **required** | `application/json` |
| **Content-Type** | `string` | **required** | `application/json` |
### PATH
| Атрибут | Тип | Обязательность | Описание |
| :--- | :--- | :--- | :--- |
| **id** | `uuid` | **required** | Идентификатор вебхука |
### BODY
| Атрибут | Тип | Обязательность | Описание |
| :--- | :--- | :--- | :--- |
| **object** | `string` | **required** | Объект/сущность для подписки: <br>• `ul_transaction_default` — получение выписки;<br>• `jp_sbp_incoming_payments` — получение входящих платежей |
| **enabled** | `boolean` | optional | Статус: `true` (включён), `false` (выключен) |
| **organizationIdHash** | `string` | optional | Хэш идентификатора организации |
| **data** | `object` | optional | Дополнительные данные. Для `jp_sbp_incoming_payments` не заполняется. |
| **data.accounts** | `array of string`| optional | Список счетов. При `object: ul_transaction_default` — **обязательно** (передавать все счета). Пустой массив = вебхук на все счета. |
| **callbackUri** | `string` | optional | URL партнёра. Можно менять только `path`, менять `host` нельзя. |
| **version** | `integer` | optional | Версия формата данных. Допустимое значение — `1`. |
---
## Пример запроса
```bash
curl -X PUT https://baas.alfabank.ru/api/v2/webhooks/f9f8c674-7a2a-4297-bdb8-ddd3013de3a3 \
-H 'Authorization: Bearer {token}' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-H 'X-Request-ID: {uuid}' \
-d '{
"object": "ul_transaction_default",
"enabled": true,
"data": {
"accounts": [
"40802810401300015422",
"40802810401300015422"
]
},
"callbackUri": "https://webhook.partner.ru/api/v1/webhook-events",
"version": 1
}'
```
---
## Параметры ответа
### Пример ответа 200 (ОК)
```json
{
"id": "f9f8c674-7a2a-4297-bdb8-ddd3013de3a3",
"object": "ul_transaction_default",
"enabled": true,
"organizationIdHash": "ff22df927f36344155f7075fae297541fcfca87e3dabef5aa9c951a21c4f072c",
"data": {
"accounts": [
"40702810800000000001",
"40702810800000000004",
"40702810800000000007"
]
},
"callbackUri": "https://webhook.partner.ru/api/v1/webhook-events",
"version": 1,
"statusDescriptions": [
{
"cause": "Revocation of agreement",
"description": "The webhook is disabled due to the agreement being revoked in Alfa ID"
},
{
"cause": "Disabled by administrator",
"description": "Webhook disabled by administrator"
}
]
}
```
### Описание полей ответа (200 OK)
| Атрибут | Тип | Описание |
| :--- | :--- | :--- |
| **id** | `uuid` | Идентификатор записи |
| **object** | `string` | Сущность подписки (`ul_transaction_default` или `jp_sbp_incoming_payments`) |
| **enabled** | `boolean` | Статус активации |
| **data.accounts** | `array` | Список счетов (для выписок) |
| **callbackUri** | `string` | URL получения уведомлений |
| **statusDescriptions** | `array` | Причины выключения вебхука (если есть) |
---
## Коды ошибок
| Код | Описание | Возможные значения `error` |
| :--- | :--- | :--- |
| **400** | Bad Request | `invalid_request` — неверные входные параметры |
| **401** | Unauthorized | `invalid_token` — токен просрочен или недействителен |
| **403** | Forbidden | `insufficient_scope` — нет прав доступа; `insufficient_privileges` — нет доступа к callbackUri |
| **404** | Not Found | `unknown_route` — эндпоинт не найден |
| **429** | Too Many Requests | Нет тела ответа |
| **500** | Internal Error | `internal_error` — внутренняя ошибка сервиса |
| **503** | Service Unavailable | Нет тела ответа |
> **Рекомендация:** Значения параметров ошибок могут изменяться. Рекомендуем предусмотреть стандартную обработку ошибок, не описанных в текущей версии документации.
---
[← Назад к списку: Редактирование вебхука v1](/products/alfa-api/documentation/articles/webhooks/articles/edit-webhook/v1/edit-webhook) | [Вперёд: Удаление вебхука →](/products/alfa-api/documentation/articles/webhooks/articles/delete-webhook/v1/delete-webhook)

View File

@@ -0,0 +1,124 @@
# Получение вебхука
**Типы интеграции:** `B2B`, `B2C`, `H2H`
**Версия API:** `v2` (Последняя)
Метод позволяет получить информацию о конкретном вебхуке по его идентификатору.
---
## Эндпоинты
| Среда | Метод и URL |
| :------------ | :----------------------------------------------------- |
| **Песочница** | `GET https://sandbox.alfabank.ru/api/v2/webhooks/{id}` |
| **Пром** | `GET https://baas.alfabank.ru/api/v2/webhooks/{id}` |
### Scope
`scope` события, на которое подписываетесь, с допустимыми значениями можно посмотреть [здесь](/products/alfa-api/documentation/articles/webhooks/webhooks).
---
## Параметры запроса
### HEADERS
| Атрибут | Тип | Обяз. | Описание |
| :---------------- | :----- | :------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Authorization** | string | required | `Bearer {access_token}`, полученный по [Authorization Code Flow](/products/alfa-api/documentation/articles/alfa-id/articles/acf/articles/intro/intro) / [Authorization Code Flow H2H](/products/alfa-api/documentation/articles/alfa-id/articles/acf-h2h/articles/intro/intro) |
| **Accept** | string | required | `application/json` |
| **Content-Type** | string | optional | `application/json` |
### PATH (Параметры пути)
| Атрибут | Тип | Обяз. | Описание |
| :------ | :--- | :------- | :-------------------- |
| **id** | uuid | required | Идентификатор вебхука |
### QUERY (Параметры строки запроса)
| Атрибут | Тип | Обяз. | Описание |
| :--------- | :----- | :------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **object** | string | required | Объект/сущность, на который партнер хочет подписаться:<br>• `ul_transaction_default` — получение выписки;<br>• `jp_sbp_incoming_payments` — получение входящих платежей. |
---
## Пример запроса
```bash
curl -X GET https://baas.alfabank.ru/api/v2/webhooks/f9f8c674-7a2a-4297-bdb8-ddd3013de3a3?object=ul_transaction_default \
-H 'Authorization: Bearer {token}' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json'
```
---
## Параметры ответа
### Успешный ответ (200 OK)
| Атрибут | Тип | Описание |
| :--------------------- | :------------ | :------------------------------------------------------------------------ |
| **id** | uuid | Идентификатор записи |
| **object** | string | Объект подписки (`ul_transaction_default` или `jp_sbp_incoming_payments`) |
| **enabled** | boolean | Статус вебхука: `true` — включен, `false` — выключен |
| **organizationIdHash** | string | Хэш идентификатора организации |
| **data** | object | Дополнительные данные. Список полей зависит от события. |
| └ **accounts** | array[string] | Список счетов (для `ul_transaction_default`) |
| **callbackUri** | string | URL партнёра, на который отправляется вебхук |
| **version** | integer | Версия формата данных. Для текущих объектов значение — `1`. |
| **statusDescriptions** | array[object] | Описание статуса выключения вебхука |
| └ **cause** | string | Причина выключения |
| └ **description** | string | Описание причины |
#### Пример ответа 200:
```json
{
"id": "f9f8c674-7a2a-4297-bdb8-ddd3013de3a3",
"object": "ul_transaction_default",
"enabled": true,
"organizationIdHash": "ff22df927f36344155f7075fae297541fcfca87e3dabef5aa9c951a21c4f072c",
"data": {
"accounts": [
"40702810800000000001",
"40702810800000000004",
"40702810800000000007"
]
},
"callbackUri": "https://webhook.partner.ru/api/v1/webhook-events",
"version": 1,
"statusDescriptions": [
{
"cause": "Revocation of agreement",
"description": "The webhook is disabled due to the agreement being revoked in Alfa ID"
},
{
"cause": "Disabled by administrator",
"description": "Webhook disabled administrator"
}
]
}
```
---
## Коды ошибок
| Код | Описание | Ошибка (`error`) |
| :------ | :------------------ | :--------------------------------------------------------------- |
| **400** | Bad Request | `invalid_request` — неверные входные параметры |
| **401** | Unauthorized | `invalid_token` — токен просрочен, отозван или недействителен |
| **403** | Forbidden | `insufficient_scope` — нет прав на использование сервиса (scope) |
| **404** | Not Found | `unknown_route` — эндпоинт не найден или неактивен |
| **429** | Too Many Requests | Нет тела ответа |
| **500** | Internal Error | `internal_error` — внутренняя ошибка сервиса |
| **503** | Service Unavailable | Нет тела ответа |
> **Рекомендация:** Значения параметров ошибок могут изменяться. Рекомендуем предусмотреть стандартную обработку ошибок, не описанных в текущей версии документации.
---
_Документация Alfa API_

View File

@@ -0,0 +1,131 @@
# Получение списка вебхуков
`B2B` `B2C` `H2H`
Метод позволяет получить список всех настроенных вебхуков для конкретного объекта подписки.
### Эндпоинты
| Окружение | Метод | URL |
| :------------ | :---- | :-------------------------------------------- |
| **Песочница** | `GET` | `https://sandbox.alfabank.ru/api/v2/webhooks` |
| **Пром** | `GET` | `https://baas.alfabank.ru/api/v2/webhooks` |
### Scope
`scope` события, на которое подписываетесь, с допустимыми значениями можно посмотреть [здесь](/products/alfa-api/documentation/articles/webhooks/webhooks).
---
## Параметры запроса
### HEADERS
| Атрибут | Тип | Обяз. | Описание |
| :---------------- | :----- | :------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Authorization** | string | required | Bearer {access_token}, полученный по [Authorization Code Flow](/products/alfa-api/documentation/articles/alfa-id/articles/acf/articles/intro/intro) / [Authorization Code Flow H2H](/products/alfa-api/documentation/articles/alfa-id/articles/acf-h2h/articles/intro/intro) |
| **Accept** | string | required | `application/json` |
| **Content-Type** | string | optional | `application/json` |
### QUERY
| Атрибут | Тип | Обяз. | Описание |
| :--------- | :------ | :------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **object** | string | required | Объект/сущность, на который партнёр API хочет подписаться. Возможные значения:<br>• `ul_transaction_default` — получение выписки;<br>• `jp_sbp_incoming_payments` — получение входящих платежей. |
| **offset** | integer | optional | Смещение в результатах поиска. |
| **limit** | integer | optional | Количество элементов на странице. |
### Пример запроса
```bash
curl -X GET https://baas.alfabank.ru/api/v2/webhooks?offset=20&limit=10&object=ul_transaction_default \
-H 'Authorization: Bearer {token}' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json'
```
---
## Параметры ответа
### Успешный ответ (200 OK)
#### Тело ответа (JSON)
| Атрибут | Тип | Описание |
| :----------------------- | :------ | :---------------------------------------------------------------------------------------------------------- |
| **pagination** | object | Данные пагинации |
| ∟ **limit** | number | Количество объектов на одной странице |
| ∟ **offset** | number | Количество объектов в списке, которые необходимо пропустить |
| ∟ **totalCount** | number | Общее количество записей |
| **items** | array | Массив объектов результата |
| ∟ **id** | uuid | Идентификатор записи |
| ∟ **object** | string | Объект/сущность подписки (`ul_transaction_default`, `jp_sbp_incoming_payments`) |
| ∟ **enabled** | boolean | Статус вебхука: `true` — включён, `false` — выключен |
| ∟ **organizationIdHash** | string | Хэш идентификатора организации |
| ∟ **data** | object | Дополнительные данные. Поле **accounts** (array of string) заполняется при `object: ul_transaction_default` |
| ∟ **callbackUri** | string | URL партнёра, на который отправляется вебхук |
| ∟ **version** | integer | Версия формата данных (возможные значения — `1`) |
| ∟ **statusDescriptions** | array | Описание причин выключения вебхука |
| ∟∟ **cause** | string | Причина выключения |
| ∟∟ **description** | string | Описание причины |
#### Пример ответа 200
```json
{
"pagination": {
"offset": 45,
"limit": 10,
"totalCount": 100
},
"items": [
{
"id": "f9f8c674-7a2a-4297-bdb8-ddd3013de3a3",
"object": "ul_transaction_default",
"enabled": true,
"organizationIdHash": "ff22df927f36344155f7075fae297541fcfca87e3dabef5aa9c951a21c4f072c",
"data": {
"accounts": [
"40702810800000000001",
"40702810800000000004",
"40702810800000000007"
]
},
"callbackUri": "https://webhook.partner.ru/api/v1/webhook-events",
"version": 1,
"statusDescriptions": [
{
"cause": "Revocation of agreement",
"description": "The webhook is disabled due to the agreement being revoked in Alfa ID"
},
{
"cause": "Disabled by administrator",
"description": "Webhook disabled administrator"
}
]
}
]
}
```
---
## Ошибки
| Код | Описание | Возможные `error` |
| :------ | :------------------ | :--------------------------------------------------- |
| **400** | Bad Request | `invalid_request` — неверные входные параметры |
| **401** | Unauthorized | `invalid_token` — токен просрочен или недействителен |
| **403** | Forbidden | `insufficient_scope` — недостаточно прав (scope) |
| **404** | Not Found | `unknown_route` — эндпоинт не найден |
| **429** | Too Many Requests | Нет тела ответа (превышен лимит запросов) |
| **500** | Internal Error | `internal_error` — внутренняя ошибка сервиса |
| **503** | Service Unavailable | Нет тела ответа (сервис временно недоступен) |
> Значения параметров ошибок могут изменяться. Рекомендуем предусмотреть стандартную обработку ошибок, не описанных в текущей версии документации.
---
**Навигация:**
← [Получение вебхука](/products/alfa-api/documentation/articles/webhooks/articles/get-webhook/v2/get-webhook) | [Партнёрский метод для получения вебхуков](/products/alfa-api/documentation/articles/webhooks/articles/partner-webhook/v1/partner-webhook) →

View File

@@ -0,0 +1,136 @@
# Партнёрский метод для получения вебхуков
На стороне партнёра должен быть реализован метод **POST** с URL, на который будет отправляться вебхук. Важно, чтобы второй уровень домена совпадал со вторым уровнем домена, который указывали в качестве `redirect_uri` при интеграции с Alfa ID. Подробнее [в инструкции по подключению вебхуков](/products/alfa-api/documentation/articles/webhooks/webhooks).
### **Авторизация**
Реализованный метод может быть как открытым, так и закрыт авторизацией. В случае, если метод закрыт авторизацией, необходимо отправить письмо на почту [alfa_api@alfabank.ru](mailto:alfa_api@alfabank.ru) с данными, как авторизоваться в методе. Для авторизации запросов может использоваться:
- **Client Credentials Flow** ([RFC 6749](https://datatracker.ietf.org/doc/html/rfc6749))
- **Basic Authentication** ([RFC 7617](https://datatracker.ietf.org/doc/html/rfc7617))
### **Время ответа**
Метод партнёра должен возвращать ответ не более чем за **300 миллисекунд**. Это оптимальная скорость ответа для обеспечения стабильной работы интеграции и оперативной обработки событий.
### **Retry-запросы**
Если метод партнёра отвечает с ошибкой, превышает сконфигурированное время ожидания или Банку не удаётся отправить запрос, то банк отправляет retry-запросы на доставку вебхука.
**Интервалы повторной отправки:** 30 секунд, 5 минут, 30 минут, 1 час, 3 часа, 6 часов, 12 часов, 24 часа, 48 часов, 72 часа.
**Возможные причины отправки retry-запроса:**
- был получен ответ с одним из следующих статусов: 401, 408, 409, 429, 500, 502, 503, 504, 507, 508, 509;
- ответ на запрос не был получен в пределах сконфигурированного времени ожидания (5 секунд);
- не удалось установить TCP-соединение;
- хост недоступен или не отвечает.
> **Важно:** Для предотвращения отправки Банком лишних retry-запросов необходимо возвращать коды, отличные от 2xx, только при возникновении технических сбоев на стороне партнёра.
### **Выписки**
В сервисе ["Выписки по счетам юрлиц"](/products/alfa-api/documentation/articles/transactions/transactions) в методах есть уникальный идентификатор транзакции (`transactionId`). Важно, чтобы партнёр на своей стороне игнорировал задублированные сообщения по этому идентификатору, возвращая код успешной обработки (2xx).
### **Входящие платежи по СБП для юрлиц**
В методе ["Получение входящих платежей"](/products/alfa-api/documentation/articles/sbp/articles/sbp-b2b/articles/incoming-payments/v1/incoming-payments) есть уникальный идентификатор операции НСПК (`nspkTransactionId`). Важно игнорировать задублированные сообщения по этому идентификатору, возвращая код успешной обработки (2xx).
---
## Параметры запроса (BODY)
| Атрибут | Тип | Обязательность | Описание |
| :----------------- | :----- | :------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **actionType** | string | required | Действие над объектом. Возможные значения: `create` (создание), `update` (обновление), `delete` (удаление). |
| **eventTime** | string | required | Время, когда произошло событие. |
| **object** | string | required | Объект/сущность подписки: `ul_transaction_default` (выписка), `jp_sbp_incoming_payments` (входящие платежи СБП). |
| **data** | object | required | Данные по вебхукам. Поля зависят от объекта (см. методы [«Получение выписки»](/products/alfa-api/documentation/articles/transactions/articles/statement/v1/statement) или [«Получение входящих платежей»](/products/alfa-api/documentation/articles/sbp/articles/sbp-b2b/articles/incoming-payments/v1/incoming-payments)). |
| **organizationId** | string | optional | Идентификатор организации. |
| **sub** | string | optional | Идентификатор субъекта. |
---
## Пример запроса
```bash
curl -X POST https://webhook.partner.ru/api/v1/webhook-events \
-H "Content-Type: application/json" \
-d '[
{
"actionType": "create",
"eventTime": "2022-01-12T00:00:00",
"object": "ul_transaction_default",
"organizationId": "vvvvvv",
"sub": "f7490296-1ae1-11ec-9621-0242ac130002",
"data": {
"amount": {
"amount": 1.00,
"currencyName": "RUR"
},
"amountRub": {
"amount": 1.00,
"currencyName": "RUR"
},
"correspondingAccount": "30101810200000000593",
"direction": "CREDIT",
"documentDate": "2022-01-12",
"filial": "АО \"АЛЬФА-БАНК\" г Москва",
"number": "178",
"operationCode": "01",
"operationDate": "2022-01-12T00:00:00",
"paymentPurpose": "Перевод собственных средств. НДС не облагается.",
"priority": "5",
"revaln": null,
"uuid": "9084d309-b30b-5083-9a54-d4522472e11a",
"transactionId": "1220112MOCO#DS4001415",
"rurTransfer": {
"cartInfo": {
"documentCode": null,
"documentContent": null,
"documentDate": null,
"documentNumber": null,
"paymentNumber": null,
"restAmount": null
},
"deliveryKind": "электронно",
"departmentalInfo": {
"uip": "1",
"drawerStatus101": "01",
"kbk": "18210102010011000110",
"oktmo": "12301000",
"reasonCode106": "ТП",
"taxPeriod107": "ГД.01.2022",
"docNumber108": "123",
"docDate109": "12.01.2022",
"paymentKind110": "1"
},
"payeeAccount": "40702810301300000763",
"payeeBankBic": "044525593",
"payeeBankCorrAccount": "30101810200000000593",
"payeeBankName": "АО \"АЛЬФА-БАНК\" г Москва",
"payeeInn": "0140237176",
"payeeKpp": "770801001",
"payeeName": "Полное наименование Орг № 11329",
"payerAccount": "40702810701300000761",
"payerBankBic": "044525593",
"payerBankCorrAccount": "30101810200000000593",
"payerBankName": "АО \"АЛЬФА-БАНК\" г Москва",
"payerInn": "0140237176",
"payerKpp": "770801001",
"payerName": "Полное наименование Орг № 11329",
"payingCondition": null,
"purposeCode": "2",
"receiptDate": "2022-01-12",
"valueDate": "2022-01-12"
}
}
}
]'
```
---
## Параметры ответа
В случае успешной обработки ответа на стороне клиента необходимо вернуть любой код успешной обработки (**2xx**).

View File

@@ -0,0 +1,57 @@
# Как подключить вебхуки
**Теги:** `B2B` `B2C` `H2H`
Вебхук — это механизм информирования при наступлении в системе события, на которое подписан партнёр API.
Вебхуки повышают эффективность рабочих процессов. Для получения новой информации достаточно будет создать вебхук, и Банк сам будет отправлять информацию по изменениям состояния системы.
Используется токен доступа, полученный по [Authorization Code Flow](/products/alfa-api/documentation/articles/alfa-id/articles/acf/acf) для партнёрских сервисов или по [Authorization Code Flow H2H](/products/alfa-api/documentation/articles/alfa-id/articles/acf-h2h/acf-h2h) для прямой интеграции.
---
### Инструкция по подключению
1. **Отправить письмо** на почту [alfa_api@alfabank.ru](mailto:alfa_api@alfabank.ru) с указанием `callbackUri` и события, на которое хотите подписаться.
2. **Реализовать метод:** Партнёру API на своей стороне необходимо реализовать открытый [Партнёрский метод для получения вебхуков](/products/alfa-api/documentation/articles/webhooks/articles/partner-webhook/v1/partner-webhook).
3. **Подписаться на событие** с помощью метода [«Создание вебхука»](/products/alfa-api/documentation/articles/webhooks/articles/create-webhook/v1/create-webhook).
4. **Управлять вебхуками**, используя следующие методы:
- [Редактирование вебхука](/products/alfa-api/documentation/articles/webhooks/articles/edit-webhook/v2/edit-webhook)
- [Удаление вебхука](/products/alfa-api/documentation/articles/webhooks/articles/delete-webhook/v1/delete-webhook)
- [Получение вебхука](/products/alfa-api/documentation/articles/webhooks/articles/get-webhook/v2/get-webhook)
- [Получение списка вебхуков](/products/alfa-api/documentation/articles/webhooks/articles/get-lists-webhooks/v2/get-lists-webhooks)
Инструкция по тестированию вебхуков представлена [здесь](/products/alfa-api/documentation/articles/sandbox/articles/check-webhook/articles/intro/intro).
---
### Требования к полю callbackUri
В поле `callbackUri` необходимо указывать хост, который указывали в качестве `redirect_uri` при интеграции с Alfa ID. Проверка будет проводиться только на соответствие домена второго уровня.
Это позволяет расширить возможные варианты для `callbackUri`. Например, если в качестве `redirect_uri` был указан [https://partner.ru](https://partner.ru), то можно создать следующие `callbackUri`:
- [https://partner.ru](https://partner.ru)
- [https://webhook.alfa.partner.ru](https://webhook.alfa.partner.ru)
- [https://webhook.partner.ru](https://webhook.partner.ru)
- [https://webhook.partner.partner.partner.ru](https://webhook.partner.partner.partner.ru)
> **Важно**
> Для создания вебхука с другим хостом необходимо удалить уже существующий вебхук.
---
### Допустимые значения scope
| Событие | scope |
| :-------------------------------- | :------------- |
| Операции по счетам | `transactions` |
| Входящие платежи по СБП для юрлиц | `b2b-sbp` |
---
**Дополнительные материалы:**
- **Предыдущая тема:** [Шифрование TXT ГОСТ-сертификатом](/products/alfa-api/documentation/articles/signature-encryption/articles/encryption/articles/text-gost/text-gost)
- **Следующая тема:** [Создание вебхука](/products/alfa-api/documentation/articles/webhooks/articles/create-webhook/v1/create-webhook)
- **Видео-инструкция:** [Смотреть MP4](/assets/developers-portal.docs.alfa-api/articles/webhooks/articles/intro/files/webhooks.mp4)

View File

@@ -0,0 +1,114 @@
# Скачивание файла
**Метки:** `B2B` `B2C` `H2H`
## Этапы процесса
1. **Получите ссылку для скачивания файла.** Подробнее в пункте «Получение ссылки».
2. **Выполните запрос на скачивание файла.** Подробнее в пункте «Запрос на скачивание».
3. **Скачивание файла.**
---
## Получение ссылки
Первым шагом необходимо получить ссылку на скачивание файла в рамках Вашего взаимодействия. Ниже приведен пример получаемой Вами ссылки для скачивания файла с описанием параметров.
### Атрибуты тела ответа (BODY)
| Атрибут | Тип | Обязательность | Описание |
| :------------------------------------ | :-------------- | :------------- | :------------------------------------------- |
| **downloadFileLinks** | array of object | optional | Ссылка для скачивания файла из Банка |
| └─ **url** | string | optional | Ссылка для скачивания файла |
| └─ **method** | string | optional | Метод, используемый для скачивания файла |
| └─ **detachedSignatureLink** | object | optional | Открепленная ЭЦП содержимого файла |
| &nbsp;&nbsp;&nbsp;&nbsp;└─ **url** | string | optional | Ссылка для скачивания файла открепленной ЭЦП |
| &nbsp;&nbsp;&nbsp;&nbsp;└─ **method** | string | optional | Метод для скачивания открепленной ЭЦП |
### Пример ссылок на скачивание
```json
{
"downloadFileLinks": [
{
"url": "https://baas.alfabank.ru/filebox/secure-file-transfer.incoming-files.to-processing/12345678-90ab-cdef-1234-1234567890ab?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20230608T152952Z&X-Amz-SignedHeaders=host&X-Amz-Expires=3600&X-Amz-Credential=secure-file-transfer%2F20230608%2Fdev%2Fs3%2Faws4_request&X-Amz-Signature=e78c051fcff1017a68795620c20e50db33126ab8374c2ee9644ef4743b3625c6",
"method": "GET",
"detachedSignatureLink": {
"url": "https://baas.alfabank.ru/filebox/secure-file-transfer.incoming-files.to-processing/12345678-90ab-cdef-1234-1234567890ab.sign?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20230608T152952Z&X-Amz-SignedHeaders=host&X-Amz-Expires=3600&X-Amz-Credential=secure-file-transfer%2F20230608%2Fdev%2Fs3%2Faws4_request&X-Amz-Signature=36ef1ccf28bdf6e54710fc3c1dd235c8f383275c2bbb0c9db365da272d3c24a8",
"method": "GET"
}
},
{
"url": "https://baas.alfabank.ru/filebox/secure-file-transfer.incoming-files.to-processing/12345678-90ab-cdef-1234-1234567890ac?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20230608T152952Z&X-Amz-SignedHeaders=host&X-Amz-Expires=3600&X-Amz-Credential=secure-file-transfer%2F20230608%2Fdev%2Fs3%2Faws4_request&X-Amz-Signature=e78c051fcff1017a68795620c20e50db33126ab8374c2ee9644ef4743b3625c6",
"method": "GET",
"detachedSignatureLink": {
"url": "https://baas.alfabank.ru/filebox/secure-file-transfer.incoming-files.to-processing/12345678-90ab-cdef-1234-1234567890ac.sign?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20230608T152952Z&X-Amz-SignedHeaders=host&X-Amz-Expires=3600&X-Amz-Credential=secure-file-transfer%2F20230608%2Fdev%2Fs3%2Faws4_request&X-Amz-Signature=36ef1ccf28bdf6e54710fc3c1dd235c8f383275c2bbb0c9db365da272d3c24a8",
"method": "GET"
}
}
]
}
```
---
## Запрос на скачивание
Для скачивания файла по полученной ссылке необходимо выполнить `http` запрос методом, указанным в параметре `method`, и полученной в параметре `url` ссылкой `https://baas.alfabank.ru/filebox/{bucketName}/{objectKey}` с параметрами запроса.
### Параметры запроса
#### HEADERS
| Атрибут | Тип | Обязательность | Описание |
| :----------------- | :----- | :------------- | :------------------------- |
| **Accept** | string | required | `*/*` |
| **Content-Length** | string | required | 1024 |
| **Content-Type** | string | optional | `application/octet-stream` |
#### PATH
| Атрибут | Тип | Обязательность | Описание |
| :------------- | :----- | :------------- | :-------------------------------- |
| **bucketName** | string | required | Имя bucket'а для сохранения файла |
| **objectKey** | string | required | Имя файла |
#### QUERY
| Атрибут | Тип | Обязательность | Описание |
| :------------------- | :------ | :------------- | :------------------------------------------------------- |
| **X-Amz-Date** | string | required | Дата и время генерации ссылки |
| **X-Amz-Expires** | integer | required | TTL ссылки (в секундах) относительно времени её создания |
| **X-Amz-Credential** | string | required | Данные об учётной записи s3 и подписи запроса |
| **X-Amz-Algorithm** | string | required | Алгоритм подписи запроса |
| **X-Amz-Signature** | string | required | Подпись запроса |
| **Content-Length** | integer | required | Размер содержимого файла |
### Пример запроса
```bash
curl -X GET https://baas.alfabank.ru/filebox/secure-file-transfer.incoming-files.to-processing/12345678-90ab-cdef-1234-1234567890ab?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20230608T152952Z&X-Amz-SignedHeaders=host&X-Amz-Expires=3600&X-Amz-Credential=secure-file-transfer%2F20230608%2Fdev%2Fs3%2Faws4_request&X-Amz-Signature=e78c051fcff1017a68795620c20e50db33126ab8374c2ee9644ef4743b3625c6 \
-H 'Accept: */*' \
-H 'Content-Length: 1024' \
-H 'Content-Type: application/octet-stream'
```
---
## Параметры ответа
| Код | Описание | Тело ответа |
| :---------------------------- | :------------------------ | :---------------------------------------------------------------------------------------------- |
| **200 OK** | Успешное скачивание | Нет тела ответа |
| **400 Bad Request** | Ошибка в запросе | `{"error": "Код ошибки"}` |
| **403 Forbidden** | Доступ запрещен | `{"error": "Время жизни ссылки истекло / Используется некорректный метод или ссылка изменена"}` |
| **404 Not Found** | Файл не найден | `{"error": "Код ошибки"}` |
| **500 Internal Server Error** | Внутренняя ошибка сервера | `{"error": "Код ошибки"}` |
---
### См. также:
- [Требования и ограничения](/products/alfa-api/documentation/articles/secure-file-transfer/articles/intro/intro)
- [Загрузка файла](/products/alfa-api/documentation/articles/secure-file-transfer/articles/upload/v1/upload)
- [Официальный портал разработчиков Alfa-Bank](https://developers.alfabank.ru/)

View File

@@ -0,0 +1,44 @@
# Требования и ограничения
**Область применения:** `B2B`, `B2C`, `H2H`
**Раздел:** Обмен файлами
Механизм для загрузки и скачивания файлов. В рамках продуктового метода API, который предполагает загрузку или скачивание файлов, Вы получите атрибут `downloadFileLinks`, который используется для скачивания файла, или атрибут `uploadFileLinks`, который используется для загрузки файла.
### Ограничения
1. По одной ссылке можно загрузить только один файл.
2. Для загрузки нескольких файлов необходимо поместить их в архив формата `.zip` (без пароля), либо загружать файлы отдельными загрузками (каждая в рамках своей задачи, переиспользовать ссылку нельзя).
### Форматы и размеры файлов
1. Для файлов, чей `MIME-тип = text/plain`, максимальный размер одного файла — **250 Мбайт**.
2. Для файлов, чей `MIME-тип ≠ text/plain`, максимальный размер одного файла — **60 Мбайт**.
### Время жизни ссылки
Ссылка содержит в себе параметр с датой и временем генерации ссылки `X-Amz-Date`.
- **Формат параметра:** `YYYYMMDDTHHMISSZ`.
- **Длительность:** Время жизни ссылки указывается в секундах параметром `X-Amz-Expires`.
Отсчёт времени жизни идет от времени генерации ссылки.
---
## Навигация
- [← SDK для подписи](/products/alfa-api/documentation/articles/sdk/articles/signature/v1/signature)
- [Скачивание файла →](/products/alfa-api/documentation/articles/secure-file-transfer/articles/download/v1/download)
---
### Структура раздела «Обмен файлами»
- **Требования и ограничения** (текущая страница)
- [Скачивание файла](/products/alfa-api/documentation/articles/secure-file-transfer/articles/download/v1/download)
- [Загрузка файла](/products/alfa-api/documentation/articles/secure-file-transfer/articles/upload/v1/upload)
---
_Документация Alfa-Bank (Alfa API)_

View File

@@ -0,0 +1,124 @@
# Загрузка файла
**Теги:** `B2B` `B2C` `H2H`
Процесс загрузки файла состоит из трех основных этапов:
1. **Получите ссылку для загрузки файла** (Подробнее в пункте «Получение ссылки»)
2. **Выполните запрос на загрузку файла** (Подробнее в пункте «Запрос на загрузку»)
3. **Загрузка файла**
---
## Получение ссылки
Первым шагом необходимо получить ссылку на загрузку файла в рамках Вашего взаимодействия. Ниже приведен пример получаемой Вами ссылки для загрузки файла с описанием параметров.
### Атрибуты ответа (BODY)
| Атрибут | Тип | Обязательность | Описание |
| :------------------ | :---------------- | :------------- | :------------------------------------- |
| **uploadFileLinks** | `array of object` | optional | Ссылка для загрузки файла в Банк |
| ↳ **url** | `string` | optional | Ссылка для загрузки файла |
| ↳ **method** | `string` | optional | Метод, используемый для загрузки файла |
### Пример ссылок на загрузку
```json
{
"uploadFileLinks": [
{
"url": "https://baas.alfabank.ru/filebox/secure-file-transfer.incoming-files.to-processing/12345678-90ab-cdef-1234-1234567890ab?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20230608T152952Z&X-Amz-SignedHeaders=host&X-Amz-Expires=3600&X-Amz-Credential=secure-file-transfer%2F20230608%2Fdev%2Fs3%2Faws4_request&X-Amz-Signature=36ef1ccf28bdf6e54710fc3c1dd235c8f383275c2bbb0c9db365da272d3c24a8",
"method": "PUT"
},
{
"url": "https://baas.alfabank.ru/filebox/secure-file-transfer.incoming-files.to-processing/12345678-90ab-cdef-1234-1234567890ac?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20230608T152952Z&X-Amz-SignedHeaders=host&X-Amz-Expires=3600&X-Amz-Credential=secure-file-transfer%2F20230608%2Fdev%2Fs3%2Faws4_request&X-Amz-Signature=36ef1ccf28bdf6e54710fc3c1dd235c8f383275c2bbb0c9db365da272d3c24a8",
"method": "PUT"
}
]
}
```
---
## Запрос на загрузку
Для загрузки файла по полученной ссылке необходимо выполнить `http` запрос методом, указанным в параметре `method`, и полученной в параметре `url` ссылкой:
`https://baas.alfabank.ru/filebox/{bucketName}/{objectKey}` с параметрами запроса.
### Параметры запроса
#### HEADERS
| Атрибут | Тип | Обязательность | Описание |
| :----------------- | :------- | :------------- | :------------------------- |
| **Accept** | `string` | **required** | `*/*` |
| **Content-Length** | `string` | **required** | Например: `1024` |
| **Content-Type** | `string` | optional | `application/octet-stream` |
#### PATH
| Атрибут | Тип | Обязательность | Описание |
| :------------- | :------- | :------------- | :-------------------------------- |
| **bucketName** | `string` | **required** | Имя bucket'а для сохранения файла |
| **objectKey** | `string` | **required** | Имя файла |
#### QUERY
| Атрибут | Тип | Обязательность | Описание |
| :------------------- | :-------- | :------------- | :------------------------------------------------------- |
| **X-Amz-Date** | `string` | **required** | Дата и время генерации ссылки |
| **X-Amz-Expires** | `integer` | **required** | TTL ссылки (в секундах) относительно времени её создания |
| **X-Amz-Credential** | `string` | **required** | Данные об учётной записи s3 и подписи запроса |
| **X-Amz-Algorithm** | `string` | **required** | Алгоритм подписи запроса |
| **X-Amz-Signature** | `string` | **required** | Подпись запроса |
| **Content-Length** | `integer` | **required** | Размер содержимого файла |
### Пример запроса
```bash
curl -X PUT https://baas.alfabank.ru/filebox/secure-file-transfer.incoming-files.to-processing/12345678-90AB-CDEF-1234-1234567890AB?X-Amz-Date=20230608T152952Z&X-Amz-Expires=3600&X-Amz-Credential=secure-file-transfer%2F20230608%2Fbaas%2Fs3%2Faws4_request&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Signature=36ef1ccf28bdf6e54710fc3c1dd235c8f383275c2bbb0c9db365da272d3c24a8 \
-H 'Accept: */*' \
-H 'Content-Length: 1024' \
-H 'Content-Type: application/octet-stream' \
--data-binary 'Выписка по счету.pdf'
```
---
## Параметры ответа
### 200 OK
_Нет тела ответа_
### 400 Bad Request
| Атрибут | Тип | Обязательность | Описание |
| :-------- | :------- | :------------- | :--------- |
| **error** | `string` | **required** | Код ошибки |
### 403 Forbidden
| Атрибут | Тип | Обязательность | Описание |
| :-------- | :------- | :------------- | :------------------------------------------------------------------------------------------- |
| **error** | `string` | **required** | Код ошибки. Время жизни ссылки истекло / Используется некорректный метод или ссылка изменена |
### 404 Not Found
| Атрибут | Тип | Обязательность | Описание |
| :-------- | :------- | :------------- | :--------- |
| **error** | `string` | **required** | Код ошибки |
### 500 Internal Server Error
| Атрибут | Тип | Обязательность | Описание |
| :-------- | :------- | :------------- | :--------- |
| **error** | `string` | **required** | Код ошибки |
---
**Навигация:**
- [← Скачивание файла](/products/alfa-api/documentation/articles/secure-file-transfer/articles/download/v1/download)
- [Для чего это нужно →](/products/alfa-api/documentation/articles/signature-encryption/articles/intro/intro)

View File

@@ -0,0 +1,32 @@
# Авторизация
Теги: `B2B` `B2C` `H2H`
---
Получить доступ к продуктам и сервисам Alfa API можно двумя способами: с помощью Alfa ID или API Key.
Выбор способа авторизации зависит от типа интеграции, используемых вами продуктов и сервисов, требований безопасности и настроек вашей интеграции.
## Alfa ID
`B2B` `B2C` `H2H`
Этот способ подходит для любого типа интеграций и позволяет работать со всеми продуктами и сервисами Alfa API. Контроль безопасности обеспечивается за счёт использования токенов с коротким сроком действия и проведения аутентификации пользователей.
Подойдёт вам в следующих случаях:
•вы хотите выполнять операции по другим организациям (партнёрская интеграция);•вы хотите выполнять операции по своей организации (H2H-интеграция) и вам необходимо, чтобы ваши сотрудники проходили аутентификацию для получения доступа к продуктам и сервисам Alfa API.
## API Key
`H2H`
Это упрощённый способ авторизации запросов без аутентификации сотрудников вашей организации, который не требует регулярного обновления ключа доступа. Подходит для выполнения операций по своей организации. Контроль безопасности обеспечивается за счёт того, что запросы принимаются только с ваших доверенных серверов.
Доступные с помощью этого способа авторизации продукты и сервисы можно посмотреть [здесь](https://developers.alfabank.ru/products/alfa-api/documentation/articles/selfservice/articles/api-key/api-key).
Использование упрощённого способа авторизации будет оптимальным вариантом, если у вас H2H-интеграция, использующая продукты и сервисы, доступные с помощью `API Key` , и вам не требуется аутентификация сотрудников для доступа к продуктам и сервисам Alfa API.
Подробнее о способах авторизации можно прочитать в статьях ниже.
[Alfa ID](https://developers.alfabank.ru/products/alfa-api/documentation/articles/alfa-id/articles/intro/intro)[API Key](https://developers.alfabank.ru/products/alfa-api/documentation/articles/api-key/api-key)

View File

@@ -0,0 +1,17 @@
# Защита канала
Теги: `B2B` `B2C` `H2H`
---
## Введение
Защита данных с применением криптографических преобразований - одно из решений проблем информационной безопасности. Механизмы шифрования и дешифрования канала обеспечивает надёжность передачи информации. Защитить канал можно, используя асимметричные алгоритмы шифрования данных (RSA-сертификат) и транспортную подпись.
## Шифрование канала
Шифрование канала происходит исходя из выбора метода шифрования. Это может быть:
•шифрование с применением сертификата RSA (как применить RSA-сертификат смотрите в разделе [Требования к сертификату](https://developers.alfabank.ru/products/alfa-api/documentation/articles/connection/articles/tls/tls));•шифрование с применением сертификатов ГОСТ (раздел в подготовке).Выбор того или иного метода шифрования канала определяется критичностью данных:
•если персональные данные не передаются, то TLS RSA будет самым простым, дешёвым и гибким инструментом интеграции;•если персональные данные передаются, то обязательно использование сертификата ГОСТ. Партнёр API может выбирать, что использовать - TLS ГОСТ или вариант с ФПСУ ГОСТ.

View File

@@ -0,0 +1,32 @@
## Чек-лист готовности к тестовой интеграции
1. **Заключите соглашение и договор**
Заключите соглашение о конфиденциальности и неразглашении информации, договор на информационно-технологическое взаимодействие с банком и подпишите приложения к нему. Подробнее в шаге 1 [инструкции по подключению](https://developers.alfabank.ru/products/alfa-api/documentation/articles/connection/articles/instruction/instruction).
2. **Получите тестовые client_id и scope**
Подробнее в шаге 2 [инструкции по подготовке к работе с песочницей](https://developers.alfabank.ru/products/alfa-api/documentation/articles/connection/articles/instruction/instruction).
3. **Установите тестовый TLS-сертификат, сертификаты Минцифры и проверьте доступ до Swagger UI**
Подробнее в шагах 3-5 [инструкции по подготовке к работе с песочницей](https://developers.alfabank.ru/products/alfa-api/documentation/articles/sandbox/sandbox).
4. **Получите тестовый client_secret**
Подробнее [на странице Client secret](https://developers.alfabank.ru/products/alfa-api/documentation/articles/connection/articles/clientsecret/clientsecret).
5. **Реализуйте и протестируйте интеграцию Alfa ID и Alfa API в песочнице**
## Чек-лист готовности к промышленной интеграции
1. **Выполните все пункты из подраздела «Проверьте готовность к тестовой интеграции»**
2. **Создайте интеграцию в проме на Портале разработчика**
Подробнее [на странице Создание интеграции в проме](https://developers.alfabank.ru/products/alfa-api/documentation/articles/selfservice/articles/prod/prod)
3. **Выпустите TLS-сертификат**
Подробнее [на странице TLS-сертификат](https://developers.alfabank.ru/products/alfa-api/documentation/articles/connection/articles/tls/tls)
4. **Получите client_secret**
Подробнее [на странице Client secret](https://developers.alfabank.ru/products/alfa-api/documentation/articles/connection/articles/clientsecret/clientsecret)
5. **Начните использовать Alfa ID и Alfa API**

View File

@@ -0,0 +1,40 @@
`B2B` `B2C` `H2H`
# Введение
Добро пожаловать в документацию для разработчиков!
Мы рады приветствовать вас на нашем портале, где вы найдёте исчерпывающую информацию об Alfa API и все необходимые инструменты для успешного и безопасного использования наших услуг.
Перед началом работы рекомендуем внимательно ознакомиться с нашей документацией, которая содержит всю необходимую информацию для успешной интеграции.
[Подключение к Alfa API](https://developers.alfabank.ru/products/alfa-api/documentation/articles/connection/connection)
[Песочница](https://developers.alfabank.ru/products/alfa-api/documentation/articles/sandbox/sandbox)
## Преимущества
Alfa API предоставляет ряд преимуществ для наших клиентов и партнёров, включая:
- быстрый и безопасный доступ к нашим банковским услугам;
- простоту интеграции с вашими приложениями и сервисами;
- возможность управления счетами, переводами и другими банковскими операциями;
- доступ к актуальным данным о состоянии счетов и истории операций.
## Типы интеграций
`B2B` `B2C`
**Партнёрские сервисы** — при данном типе интеграции предоставляется возможность выполнять операции по другим организациям (при наличии от них согласия) для предоставления им услуг. В рамках этой интеграции можно выполнять операции по юридическим лицам (другие компании), взаимодействие бизнеса с бизнесом. А также можно выполнять операции, где конечным потребителем услуг является физическое лицо.
`H2H`
**H2H-интеграции (Host-to-Host)** — при данном типе интеграции предоставляется возможность встроить банковские продукты в ERP-систему для выполнения операций по своей организации.
**Холдинги** — при данном типе интеграции предоставляется возможность для головной организации выполнять казначейские функции по своим дочерним компаниям.
Поможем выбрать интеграцию за 15 секунд — **[Пройдите опрос]**
При создании Alfa API и Alfa ID использовались спецификации: [OAuth 2.0](https://datatracker.ietf.org/doc/html/rfc6749); [OIDC 1.0](https://openid.net/specs/openid-connect-core-1_0.html); [формат JSON](https://www.json.org/json-en.html); RESTful архитектура и синхронный обмен данными.
Обновления по релизам публикуются в [Телеграм-канал](https://t.me/AlfaAPI)

View File

@@ -0,0 +1,85 @@
[](https://developers.alfabank.ru/) / Общая информация / Пагинация
`B2B` `B2C` `H2H`
# Пагинация
---
Пагинация - разделение ответа на несколько страниц. Механизм пагинации может быть использован в REST-запросах GET.
## Параметры запроса
**Пример запроса**
```bash
1curl -X GET '{host}/claims?limit=5&offset=5'
-H 'Content-Type: application/json'
```
### QUERY
| Атрибут | Тип | Описание |
| :--- | :--- | :--- |
| **limit** | `NUMBER` _(optional)_ | Количество объектов на одной странице. Значение по умолчанию: 1000. Максимальное значение: 1000 |
| **offset** | `NUMBER` _(optional)_ | Количество объектов в списке, которые необходимо пропустить. Значение по умолчанию: 0 |
Количество объектов на одной странице. Значение по умолчанию: 1000. Максимальное значение: 1000
Количество объектов в списке, которые необходимо пропустить. Значение по умолчанию: 0
## Параметры ответа
| Атрибут | Тип | Описание |
| :--- | :--- | :--- |
| **limit** | `NUMBER` _(optional)_ | Количество объектов на одной странице |
| **offset** | `NUMBER` _(optional)_ | Количество объектов в списке, которые необходимо пропустить |
| **totalCount** | `NUMBER` _(optional)_ | Общее количество записей |
#### Ответ: 200 OK
| Атрибут | Тип | Описание |
| :--- | :--- | :--- |
| **limit** | `NUMBER` _(optional)_ | Количество объектов на одной странице |
| **offset** | `NUMBER` _(optional)_ | Количество объектов в списке, которые необходимо пропустить |
| **totalCount** | `NUMBER` _(optional)_ | Общее количество записей |
Количество объектов на одной странице
Количество объектов в списке, которые необходимо пропустить
Общее количество записей
| Атрибут | Тип | Описание |
| :--- | :--- | :--- |
| **error** | `STRING` **(required)** | Код ошибки. Принимает возможные значения: invalid_request - неверные входные параметры запроса |
| **error_description** | `STRING` _(optional)_ | Описание ошибки |
#### Ответ: 400 Bad Request
```json
invalid_request
```
| Атрибут | Тип | Описание |
| :--- | :--- | :--- |
| **error** | `STRING` **(required)** | Код ошибки. Принимает возможные значения: invalid_request - неверные входные параметры запроса |
| **error_description** | `STRING` _(optional)_ | Описание ошибки |
Код ошибки. Принимает возможные значения: invalid_request - неверные входные параметры запроса
Описание ошибки
## Алгоритм работы пагинации
Пример 1: Если клиент запрашивает limit = 100, offset = 0, то клиенту вернётся с 1-ой по 100-ую запись.
Пример 2: Если клиент запрашивает limit = 100, offset = 1000, то клиенту вернётся с 1001-ой по 1100-ую запись.
Сортировка в пагинации происходит следующим образом: вверху списка возвращаются новые записи, внизу - старые записи.
---
[Версионирование](https://developers.alfabank.ru/products/alfa-api/documentation/articles/specification/articles/version/version) | [Термины и определения](https://developers.alfabank.ru/products/alfa-api/documentation/articles/specification/articles/terms/terms)

View File

@@ -0,0 +1,49 @@
* / Общая информация / Scopes (области применения)*
`B2B` `B2C` `H2H`
# Scopes (области применения)
| SCOPE | DESCRIPTION | RESOURSES |
| --- | --- | --- |
| transactions | Выписки по счетам юрлиц | `GET /jp/v1/statement/transactions`<br>`GET /jp/v2/accounts/{accountNumber}/transactions/1C`<br>`GET /jp/v1/accounts/{accountNumber}/transactions/MT940`<br>`GET /jp/v1/correspondent-accounts/{accountNumber}/transactions`<br>`GET /jp/v1/statement/summary`<br>`POST /jp/v1/accounts/{accountNumber}/transactions/files/requests`<br>`GET /jp/v1/accounts/transactions/files/requests/{requestId}` |
| escrow | Эскроу-счета 214-ФЗ. Резервирование | `GET /build-projects`<br>`POST /escrow-orders`<br>`GET /jp/v1/escrow-orders/{referenceID}`<br>`GET /jp/v1/escrow-orders`<br>`PATCH /escrow-orders/{referenceID}/execute`<br>`DELETE /escrow-orders/{referenceID}`<br>`POST /jp/v1/escrow-orders/{referenceID}/cancel`<br>`POST /jp/v1/escrow-orders-full` |
| escrow-reports | Эскроу-счета 214-ФЗ. Формирование отчётов | `GET /jp/v1/escrow-reports/developers/build-projects`<br>`POST /jp/v1/escrow-reports` |
| customer | Профиль организации | `GET /jp/v2/customer-info` |
| payment | Платёжные поручения | `POST /jp/v2/payments`<br>`GET /jp/v2/payments/{externalId}/state`<br>`GET /jp/v1/payments/{externalId}`<br>`GET /jp/v1/payments/{externalId}/print-form`<br>`GET /jp/v1/payments/{externalId}/print-form/download`<br>`PATCH /jp/v2/payments/{externalId}/state` |
| as-operation-with-selfemployed | Добавление самозанятых, получение справочных данных | `POST /semp/v1/agreement-pages`<br>`POST /semp/v1/selfemployed/registries/add-selfemployed`<br>`GET /semp/v1/selfemployed/registries/add-selfemployed/{requestId}`<br>`GET /semp/v1/dictionary/activities`<br>`GET /semp/v1/dictionary/regions`<br>`GET /semp/v1/selfemployed/lists`<br>`GET /semp/v1/selfemployed/{vatin}`<br>`PUT /semp/v1/selfemployed/{vatin}` |
| as-selfemployed-fts-status | Статус самозанятого | `POST /semp/v1/selfemployed/taxpayer-statuses`<br>`GET /semp/v1/selfemployed/taxpayer-statuses/{requestId}` |
| as-accrual-and-debt | Налоговые начисления, задолженности и пени самозанятого | `POST /semp/v1/selfemployed/accruals-and-debts`<br>`GET /semp/v1/selfemployed/accruals-and-debts/{requestId}`<br>`POST /semp/v1/selfemployed/payment-documents`<br>`GET /semp/v1/selfemployed/payment-documents/{requestId}`<br>`POST /semp/v1/selfemployed/income-for-period`<br>`GET /semp/v1/selfemployed/income-for-period/{requestId}`<br>`POST /semp/v1/selfemployed/income`<br>`GET /semp/v1/selfemployed/income/{requestId}`<br>`POST /semp/v1/selfemployed/taxpayer-account-info`<br>`GET /semp/v1/selfemployed/taxpayer-account-info/{requestId}` |
| as-receipt-and-payout | Проведение выплат и формирование чеков, список банков-участников СБП | `POST /semp/v1/payouts/registries/receipts-and-payouts`<br>`GET /semp/v1/payouts/registries/{requestId}`<br>`GET /semp/v1/payouts`<br>`GET /semp/v1/dictionary/sbp-banks`<br>`GET /semp/v1/payouts/lists`<br>`GET /semp/v1/payouts/selfemployed/{vatin}`<br>`POST /semp/v1/payouts/registries/cancel-receipts`<br>`POST /semp/v1/payouts/registries/accept/{requestId}` |
| as-receipt | Декларация доходов, аннулирование чеков | `POST /semp/v1/payouts/registries/receipts`<br>`POST /semp/v1/payouts/registries/cancel-receipts`<br>`GET /semp/v1/payouts/registries/cancel-receipts/{requestId}`<br>`GET /semp/v1/payouts/registries/{requestId}`<br>`GET /semp/v1/payouts`<br>`GET /semp/v1/payouts/lists`<br>`GET /semp/v1/payouts/selfemployed/{vatin}`<br>`POST /semp/v1/payouts/registries/accept/{requestId}` |
| as-payout-with-check-status | Проведение выплат самозанятым, список банков-участников СБП | `POST /semp/v1/payouts/registries/with-selfemployed-check-status`<br>`GET /semp/v1/payouts/registries/{requestId}`<br>`GET /semp/v1/payouts`<br>`GET /semp/v1/dictionary/sbp-banks`<br>`GET /semp/v1/payouts/lists`<br>`GET /semp/v1/payouts/selfemployed/{vatin}`<br>`POST /semp/v1/payouts/registries/accept/{requestId}` |
| as-payout | Осуществление выплат самозанятым | `POST /semp/v1/payouts/registries/payouts`<br>`GET /semp/v1/payouts/registries/{requestId}`<br>`GET /semp/v1/payouts`<br>`GET /semp/v1/dictionary/sbp-banks`<br>`GET /semp/v1/payouts/lists`<br>`GET /semp/v1/payouts/selfemployed/{vatin}`<br>`POST /semp/v1/payouts/registries/accept/{requestId}` |
| sbp_terminals_reg | Приём оплаты через СБП | `GET /jp/v1/legal`<br>`GET /jp/v1/merchants/{merchantId}`<br>`POST /jp/v1/terminals` |
| loan-applications | Кредиты | `POST /smart-loans/jp/v1/loan-applications`<br>`POST /loan-applications`<br>`GET /smart-loans/jp/v1/loan-applications/{dealId}/status` |
| signature | Электронная подпись | `GET /jp/v3/signature/dn`<br>`GET /jp/v3/signature/dn/file`<br>`POST /jp/v3/signature/rsa-certificates/requests/issue`<br>`POST /jp/v3/signature/requests/{id}/operations`<br>`PUT /jp/v3/signature/requests/operations/{id}`<br>`GET /jp/v3/signature/requests/{id}`<br>`GET /jp/v3/signature/rsa-certificates/{id}`<br>`POST /jp/v3/signature/rsa-certificates/{id}/requests/activation`<br>`PUT /jp/v3/signature/sign-settings`<br>`POST /jp/v3/signature/rsa-certificates/{Id}/requests/switch`<br>`POST /jp/v3/signature/rsa-certificates/{Id}/requests/reissue`<br>`POST /jp/v3/signature/rsa-certificates/{Id}/requests/revocation`<br>`POST /jp/v3/signature/qes/requests`<br>`POST /jp/v3/signature/qes/requests/{Id}`<br>`PATCH /jp/v3/signature/qes/requests/{Id}`<br>`POST /jp/v3/signature/powers-of-attorney/requests`<br>`GET /jp/v3/signature/powers-of-attorney/requests/{id}/status`<br>`GET /jp/v3/signature/powers-of-attorney/requests/{id}` |
| accounts | Счета | `GET /pp/v1/accounts`<br>`GET /pp/v1/accounts/{accountNumber}`<br>`GET /pp/v1/accounts/{accountNumber}/requisites`<br>`GET /jp/open-banking/v1.3/accounts`<br>`GET /jp/open-banking/v1.3/accounts/{accountId}/statements`<br>`POST /jp/open-banking/v1.3/statements`<br>`GET /jp/open-banking/v1.3/statements/{statementId}` |
| cards | Карты | `GET /pp/v1/cards`<br>`GET /pp/v1/cards/{cardId}/tariffs`<br>`GET /pp/v1/cards/{cardId}/subscriptions` |
| card-sec-actions | Тарифы и операции по карте | `GET /pp/v1/cards/{cardId}/actions`<br>`POST /pp/v1/cards/{cardId}/actions`<br>`PUT /pp/v1/cards/{cardId}/actions` |
| operations-history | Истории операций | `GET /pp/v1/operations`<br>`GET /pp/v1/operations/{id}` |
| reports-downloading | Получение документов | `GET /pp/v1/reports`<br>`GET /pp/v1/reports/{reportId}/body` |
| debit-statements | Выписки по счёту | `POST /pp/v1/reports/type/account`<br>`POST /pp/v1/reports/type/account/balance/eng`<br>`POST /pp/v1/reports/type/account/balance/rus` |
| credit-statements | Справки по кредитам | `POST /pp/v1/reports/type/credit/closed`<br>`POST /pp/v1/reports/type/credit/info`<br>`POST /pp/v1/reports/type/credit/statement` |
| deposit-statements | Справка по депозиту | `POST /pp/v1/reports/type/deposit` |
| limits-control | Лимиты по операциям | `GET /pp/v1/limits/general`<br>`GET /pp/v1/cards/{cardId}/user-limits`<br>`POST /pp/v1/cards/{cardId}/user-limits`<br>`DELETE /pp/v1/cards/{cardId}/user-limits/{limitId}` |
| loyalty | Программа лояльности | `POST /pp/v1/bonus-accounts-transactions`<br>`GET /pp/v1/bonus-accounts`<br>`GET /pp/v1/bonus-accounts/{accountNumber}` |
| b2c_sbp_payments | Платежи через СБП | `POST /b2cpay/jp/v1/payments`<br>`GET /b2cpay/jp/v1/payments`<br>`GET /b2cpay/jp/v1/payments/packages/{packageId}`<br>`POST /b2cpay/jp/v1/clients/checks`<br>`GET /b2cpay/jp/v1/clients/checks/{checkId}`<br>`GET /b2cpay/jp/v1/clients/info`<br>`GET /b2cpay/jp/v1/banks`<br>`GET /b2cpay/jp/v1/payments/download/{transactionId}` |
| credit | Кредитные предложения | `GET /pp/v1/credit-offers` |
| c2b-sbp | Оплата покупок через СБП | `POST /sbp/jp/v1/qrcs`<br>`POST /sbp/jp/v1/subscriptions`<br>`GET /sbp/jp/v1/qrc-status`<br>`POST /sbp/jp/v1/petitions`<br>`POST /sbp/jp/v1/terminals/{termNo}/cash-qrcs`<br>`POST /sbp/jp/v1/terminals/{termNo}/cash-qrcs/{qrcId}/activation`<br>`DELETE /sbp/jp/v1/terminals/{termNo}/cash-qrcs/{qrcId}/activation`<br>`POST /sbp/jp/v1/refund`<br>`GET /sbp/jp/v1/refund/status` |
| b2b-sbp | Операции СБП для юрлиц | `POST /sbp/jp/v1/payment-urls/one-time-use`<br>`POST /sbp/jp/v1/payment-urls/reusable`<br>`GET /sbp/jp/v1/payment-urls`<br>`GET /sbp/jp/v1/payment-urls/{qrcId}/data`<br>`GET /sbp/jp/v1/incoming-payments`<br>`POST /sbp/jp/v1/outgoing-payments/one-pay`<br>`GET /sbp/jp/v1/outgoing-payments`<br>`GET /sbp/jp/v1/outgoing-payments/{outgoingPaymentId}/status`<br>`POST /sbp/jp/v1/payment-urls/batch`<br>`GET /sbp/jp/v1/payment-urls/batch/{batchId}`<br>`PATCH /sbp/jp/v1/payment-urls` |
| digital-tariff | Дебетовая анкета | `POST /pp/v1/debit-cards/forms`<br>`POST /pp/v1/debit-cards/forms/{formId}/verification-sms`<br>`POST /pp/v1/debit-cards/forms/{formId}/resending-sms`<br>`POST /pp/v1/debit-cards/forms/{formId}/verification-passport` |
| plastic-delivery | Доставка дебетовой карты | `POST /pp/v1/debit-cards/forms/{formId}/verification-sms`<br>`POST /pp/v1/debit-cards/forms/{formId}/resending-sms`<br>`GET /pp/v1/debit-cards/forms/{formId}/draft`<br>`GET /pp/v1/debit-cards/forms/{formId}/delivery-type`<br>`GET /pp/v1/debit-cards/forms/{formId}/time-slots`<br>`POST /pp/v1/debit-cards/forms/{formId}/time-slots`<br>`POST /pp/v1/debit-cards/forms/{formId}/confirmation` |
| dfa | Цифровые финансовые активы (ЦФА) | `GET /dfa/gd/v1/dfa-profile/initial-placement-list` |
| salary-project | Зарплатный проект | `POST /jp/v1/salary-project/accounts/applications`<br>`GET /jp/v1/salary-project/accounts/applications/{applicationId}`<br>`POST /jp/v1/salary-project/payroll/applications`<br>`GET /jp/v1/salary-project/payroll/applications/{applicationId}` |
| loyalty-program | Получение бонусных номеров | `GET /pp/v1/bonus-numbers` |
| payment-registries | Реестры рублёвых платежей | `POST /jp/v2/payments/registries`<br>`GET /jp/v2/payments/registries/{registryId}` |
| invoices | Выставление счёта клиенту | `POST /jp/v1/payments/from-invoice`<br>`POST /jp/v2/payments/from-invoice-budget` |
| factoring | Факторинг | `GET /aff/jp/v1/creditors/compliance`<br>`POST /aff/jp/v1/payments`<br>`POST /aff/jp/v1/registers`<br>`POST /aff/jp/v1/registers/sign`<br>`GET /aff/jp/v1/payments/{paymentId}`<br>`GET /aff/jp/v1/registers/{registerId}`<br>`GET /aff/jp/v1/registers/{registerId}/documents` |
| beneficiaries | Информация о номинальных счетах и их контрагенты | `GET /na/jp/v1/nominal-accounts`<br>`GET /na/jp/v1/beneficiaries/requests/{requestId}/status`<br>`POST /na/jp/v1/beneficiaries`<br>`GET /na/jp/v1/beneficiaries`<br>`GET /na/jp/v1/beneficiaries/{beneficiaryId}`<br>`PUT /na/jp/v1/beneficiaries/{beneficiaryId}`<br>`POST /na/jp/v1/beneficiaries/{beneficiaryId}/scoring`<br>`POST /na/jp/v1/beneficiaries/{beneficiaryId}/requisites`<br>`GET /na/jp/v1/beneficiaries/{beneficiaryId}/requisites`<br>`PATCH /na/jp/v1/beneficiaries/{beneficiaryId}/requisites/{requisiteId}`<br>`GET /na/jp/v1/beneficiaries/{beneficiaryId}/balance`<br>`GET /na/jp/v1/beneficiaries/{beneficiaryId}/transactions`<br>`POST /na/jp/v1/universal-recipients`<br>`GET /na/jp/v1/universal-recipients`<br>`GET/na/jp/v1/universal-recipients/{universalRecipientId}`<br>`POST /na/jp/v1/universal-recipients/{universalRecipientId}/requisites`<br>`GET /na/jp/v1/universal-recipients/{universalRecipientId}/requisites`<br>`PATCH /na/jp/v1/universal-recipients/{universalRecipientId}/requisites/{requisiteId}` |
| deals | Безопасные сделки | `POST /na/jp/v1/deals`<br>`GET /na/jp/v1/deals`<br>`GET /na/jp/v1/deals/{dealId}`<br>`PATCH /na/jp/v1/deals/{dealId}/is-valid`<br>`GET /na/jp/v1/deals/{dealId}/payoffs`<br>`PATCH /na/jp/v1/deals/action`<br>`POST /na/jp/v1/deals/steps`<br>`GET /na/jp/v1/deals/{dealId}/requests/{requestId}/status`<br>`GET /na/jp/v1/deals/{dealId}/steps`<br>`GET /na/jp/v1/deals/{dealId}/steps/{stepId}`<br>`PATCH /na/jp/v1/deals/steps/contractors`<br>`GET /na/jp/v1/deals/{dealId}/steps/{stepId}/contractors` |
| beneficiary-payments | Идентификация пополнений номинального счёта и выплаты с него | `GET /na/jp/v1/unidentified-transactions`<br>`POST /na/jp/v1/unidentified-transactions/{id}/identify`<br>`GET /na/jp/v1/unidentified-transactions/{id}/identify/{identifyId}`<br>`POST /na/jp/v1/unidentified-transactions/{id}/refunds`<br>`GET /na/jp/v1/unidentified-transactions/{id}/refunds/{refundId}`<br>`POST /na/jp/v1/payoffs`<br>`GET /na/jp/v1/payoffs/{payoffId}/status`<br>`PATCH /na/jp/v1/payoffs/{payoffId}/accept`<br>`GET /na/jp/v1/payoffs/{payoffId}`<br>`POST /na/jp/v1/tax-refund`<br>`GET /na/jp/v1/tax-refund/{taxRefundId}/status`<br>`PATCH /na/jp/v1/tax-refund/{taxRefundId}/accept` |

View File

@@ -0,0 +1,65 @@
[](https://developers.alfabank.ru/) / Общая информация / Термины и определения
`B2B` `B2C` `H2H`
# Термины и определения
---
**Аутентификация** – процедура проверки данных пользователя, обратившегося для доступа к информационному ресурсу Партнёра API.
**Банк** – Акционерное общество «Альфа-банк».
**Грант** – вид сценария интеграции, такие как Authorization Code Flow или Client Credentials Flow.
Партнёр API – клиент Банка, использующий канал Alfa API для проведения интеграции своей системы и системы/сервисов Банка. Для Партнёра API необходимо заключить Договор на информационно-технологическое взаимодействие в целях использования канала Alfa API.
**Сервис** – набор методов API, доступ к которым от имени пользователя Вы можете получить.
**Alfa API** – это канал предоставления банковских продуктов и услуг, а также инструмент их безопасной интеграции в бизнес-процессы Партнёров API.
**Alfa ID** – единая учётная запись пользователя ЮЛ (юридического лица) / ФЛ (физического лица), используемая для регистрации и входа пользователей в продукты и сервисы Банка и Партнёров API.
**Access token** – токен доступа, который формируется на основе согласия пользователя на взаимодействие от его имени Партнёра с Банком.
**Claims** – набор данных пользователя, доступ к которым Вы можете получить.
**Client ID** – уникальный идентификатор Партнёра API, который Вы получаете при регистрации.
**Client secret** – секретный ключ партнёрского сервиса.
**Redirect URI** – URL, на который сервер авторизации будет отправлять пользователя после успешной авторизации приложения и которому будет предоставляться код авторизации. Необходим при использовании типа гранта Authorization Code Flow.
**Refresh token** - токен, который даёт возможность получить новый токен доступа взамен истекшего.
**Scopes** – это общий набор операций и/или клэймов.
---
[Пагинация](https://developers.alfabank.ru/products/alfa-api/documentation/articles/specification/articles/pagination/pagination) | [Что это и для чего нужно](https://developers.alfabank.ru/products/alfa-api/documentation/articles/specification/articles/certificate/articles/intro/intro)

View File

@@ -0,0 +1,29 @@
# Версионирование
Теги: `B2B` `B2C` `H2H`
---
Версии методов/эндпоинтов обозначаются как `v1` , `v2` , `v3` и так далее. Это позволяет явно указать, какую версию API использует клиент.
## Мажорные изменения
Мажорные изменения подразумевают выпуск новой версии API. Они включают изменения, которые приводят к обратной несовместимости.
Примеры мажорных изменений:
•добавление обязательных параметров в запрос;•удаление обязательных параметров из запроса или ответа;•трансформация необязательных параметров в обязательные;•изменение типа параметра в запросе или ответе.
## Минорные изменения
Минорные изменения не требуют выпуска новой версии API. Они не нарушают обратную совместимость.
Примеры минорных изменений:
•добавление новой функциональности без нарушения обратной совместимости;•исправление ошибок;•улучшение производительности;•дополнительные необязательные параметры в запросе или ответе.
## Поддержание старой версии
Срок поддержки работы старой версии составляет от двух до шести месяцев. После этого срока Банк оставляет за собой право прекратить поддержку старой версии. При этом будет добавлено уведомление о прекращении поддержки старой версии эндпоинта.
## Тестирование в песочнице
Переход на новую версию обязательно должен включать тестирование в песочнице (тестовой среде).

View File

@@ -0,0 +1,60 @@
*Общая информация / Сертификаты для Android*
B2BB2CH2H# Сертификаты для Android
Инструкция по установке сертификатов на телефон или планшет с системой Android. Для корректной работы нужно два сертификата - корневой и выпускающий.
## Установка корневого сертификата
1. **Скачайте корневой сертификат**
1.Скачайте корневой сертификат [Russian Trusted Root CA](https://developers.alfabank.ru/assets/developers-portal.docs.alfa-api/articles/specification/articles/certificate/articles/android/files/russian_trusted_root_ca.cer).2.Перейдите в «Настройки».3.В поиске введите «Сертификат».4.Выберите «Сертификат CA».5.Если появится окно «Укажите название сертификата», введите «Russian Trusted Root CA».6.Выберите «VPN и приложения» и нажмите «ОК».
![image](https://developers.alfabank.ru/assets/developers-portal.docs.alfa-api/articles/specification/articles/certificate/articles/android/files/android1.png)
2. **Установите сертификат**
Если откроется предупреждение, нажмите «Всё равно установить» или «Установить в любом случае».
![image](https://developers.alfabank.ru/assets/developers-portal.docs.alfa-api/articles/specification/articles/certificate/articles/android/files/android2.png)
3. **Введите пароль**
1.Введите код-пароль от устройства.2.Нажмите «Подтвердить».3.В загрузках выберите «Russian Trusted Root CA.cer».
![image](https://developers.alfabank.ru/assets/developers-portal.docs.alfa-api/articles/specification/articles/certificate/articles/android/files/android3.png)
4. **Сертификат установлен**
После установки в нижней части экрана появится уведомление «Сертификат ЦС установлен».
![image](https://developers.alfabank.ru/assets/developers-portal.docs.alfa-api/articles/specification/articles/certificate/articles/android/files/android4.png)
## Установка выпускающего сертификата
1. **Скачайте выпускающий сертификат**
1.Скачайте выпускающий сертификат [Russian Trusted Sub CA](https://developers.alfabank.ru/assets/developers-portal.docs.alfa-api/articles/specification/articles/certificate/articles/android/files/russian_trusted_sub_ca.cer).2.Перейдите в «Настройки».3.В поиске введите «Сертификат».4.Выберите «Сертификат CA».5.В предупреждении нажмите «Всё равно установить» или «Установить в любом случае».6.Если появится окно «Укажите название сертификата», введите «Russian Trusted Sub CA».7.Выберите «VPN и приложения» и нажмите «ОК».
![image](https://developers.alfabank.ru/assets/developers-portal.docs.alfa-api/articles/specification/articles/certificate/articles/android/files/android1.png)
2. **Установите сертификат**
Если откроется предупреждение, нажмите «Всё равно установить» или «Установить в любом случае».
![image](https://developers.alfabank.ru/assets/developers-portal.docs.alfa-api/articles/specification/articles/certificate/articles/android/files/android3.png)
3. **Введите пароль**
1.Введите код-пароль от устройства.2.Нажмите «Подтвердить».3.В загрузках выберите «Russian Trusted Sub CA.cer».
![image](https://developers.alfabank.ru/assets/developers-portal.docs.alfa-api/articles/specification/articles/certificate/articles/android/files/android4.png)
4. **Сертификат установлен**
После установки в нижней части экрана появится уведомление «Сертификат ЦС установлен».
## Проверка установки сертификатов
Проверьте, что сертификаты успешно установлены:
1. **Перейдите в «Настройки»**
2. **В поиске введите «Надёжные сертификаты» или «Надёжные учётные данные»**
3. **Перейдите во вкладку «Пользователь»**
При успешной установке сертификатов в списке должно отобразиться два установленных сертификата Минцифры: «Russian Trusted Root CA» и «Russian Trusted Sub CA».
![image](https://developers.alfabank.ru/assets/developers-portal.docs.alfa-api/articles/specification/articles/certificate/articles/android/files/android5.png)
Очистите кэш вашего браузераОчистите кэш браузера на устройстве, с которого осуществляется доступ. Это необходимо для корректной работы с ресурсами, защищёнными сертификатами безопасности Минцифры.
[Что это и для чего нужно](https://developers.alfabank.ru/products/alfa-api/documentation/articles/specification/articles/certificate/articles/intro/intro)[Сертификаты для iOS](https://developers.alfabank.ru/products/alfa-api/documentation/articles/specification/articles/certificate/articles/ios/ios)

View File

@@ -0,0 +1,81 @@
*Общая информация / Сертификаты для Linux*
B2BB2CH2H# Сертификаты для Linux
Инструкция по установке сертификатов для владельцев ноутбуков и компьютеров с операционной системой Linux. Для корректной работы нужно два сертификата - корневой и выпускающий.
Процедура установки сертификатов зависит от используемого браузера.
## Red Hat Enterprise Linux
1. **Скачайте сертификаты**
Скачайте [корневой сертификат](https://developers.alfabank.ru/assets/developers-portal.docs.alfa-api/articles/specification/articles/certificate/articles/linux/files/russian_trusted_root_ca_pem.crt) и [выпускающий сертификат](https://developers.alfabank.ru/assets/developers-portal.docs.alfa-api/articles/specification/articles/certificate/articles/linux/files/russian_trusted_sub_ca_pem.crt). Загрузите сертификаты в папку «Downloads».
2. **Установите сертификаты Удостоверяющего Центра Минцифры**
1. Нажмите на «Activities» -> «Terminal», чтобы открыть терминал.
![image](https://developers.alfabank.ru/assets/developers-portal.docs.alfa-api/articles/specification/articles/certificate/articles/linux/files/linux1.png)
2. Убедитесь, что файлы сертификатов «russian_trusted_root_ca_pem.crt» и «russian_trusted_sub_ca_pem.crt» находятся в директории «Downloads». Для проверки перейдите в неё с помощью `cd` и вызовите команду `ls` для отображения списка файлов.
![image](https://developers.alfabank.ru/assets/developers-portal.docs.alfa-api/articles/specification/articles/certificate/articles/linux/files/linux2.png)
3. Скопируйте корневой сертификат в каталог `/usr/share/pki/ca-trust-source/anchors/` . Выполните команду `sudo cp russian_trusted_root_ca_pem.crt /usr/share/pki/ca-trust-source/anchors` .
4. Введите пароль суперпользователя.
![image](https://developers.alfabank.ru/assets/developers-portal.docs.alfa-api/articles/specification/articles/certificate/articles/linux/files/linux3.png)
5. Cкопируйте в этот же каталог выпускающий сертификат. Выполните команду `sudo cp russian_trusted_sub_ca_pem.crt /usr/share/pki/ca-trust-source/anchors` .
6. Обновите общесистемное хранилище сертификатов командой `sudo update-ca-trust` .
![image](https://developers.alfabank.ru/assets/developers-portal.docs.alfa-api/articles/specification/articles/certificate/articles/linux/files/linux4.png)
7. Проверьте хранилище доверенных сертификатов. Воспользуйтесь командой `trust list` . В конце списка должны появиться сертификаты «Russian Trusted Root CA» и «Russian Trusted Sub CA».
Очистите кэш вашего браузераОчистите кэш браузера на устройстве, с которого осуществляется доступ. Это необходимо для корректной работы с ресурсами, защищёнными сертификатами безопасности Минцифры.
## Mozilla Firefox
1. **Скачайте сертификаты**
Скачайте [«корневой сертификат»](https://developers.alfabank.ru/assets/developers-portal.docs.alfa-api/articles/specification/articles/certificate/articles/linux/files/russian_trusted_root_ca_pem.crt) и [«выпускающий сертификат»](https://developers.alfabank.ru/assets/developers-portal.docs.alfa-api/articles/specification/articles/certificate/articles/linux/files/russian_trusted_sub_ca_pem.crt). Загрузите сертификаты в папку «Downloads».
2. **Установите сертификаты Удостоверяющего Центра Минцифры**
1. Откройте браузер Firefox → перейдите в «Настройки» → в поиске введите «Сертификат» → выберите «Просмотр сертификатов…».
2. В открывшемся окне «Управление сертификатами» нажмите на «Импортировать…».
3. Перейдите в папку со скачанными сертификатами. Дважды кликните по сертификату «russian_trusted_root_ca_pem.crt» → установите флажок «Доверять при идентификации веб-сайтов» → нажмите «ОК».
4. В открывшемся окне «Управление сертификатами» нажмите «Импортировать».
5. Вернитесь в папку со скачанными сертификатами. Дважды кликните по сертификату «russian_trusted_sub_ca_pem.crt» → установите флажок «Доверять при идентификации веб-сайтов» → нажмите «ОК».
6. Проверьте список сертификатов. Найдите в нём «The Ministry of Digital Development and Communications». Внутри должны находиться сертификаты «Russian Trusted Root CA» и «Russian Trusted Sub CA».
![image](https://developers.alfabank.ru/assets/developers-portal.docs.alfa-api/articles/specification/articles/certificate/articles/linux/files/linux5.png)
Очистите кэш вашего браузераОчистите кэш браузера на устройстве, с которого осуществляется доступ. Это необходимо для корректной работы с ресурсами, защищёнными сертификатами безопасности Минцифры.
## Chromium
1. **Скачайте сертификаты**
Скачайте [](https://developers.alfabank.ru/assets/developers-portal.docs.alfa-api/articles/specification/articles/certificate/articles/linux/files/russian_trusted_root_ca_pem.crt) и [](https://developers.alfabank.ru/assets/developers-portal.docs.alfa-api/articles/specification/articles/certificate/articles/linux/files/russian_trusted_sub_ca_pem.crt). Загрузите сертификаты в папку «Downloads».
2. **Установите сертификаты Удостоверяющего Центра Минцифры**
1. Откройте браузер Chromium → перейдите в «Настройки» → в строке поиска введите «Сертификат» → нажмите на «Безопасность» в разделе «Конфиденциальность и безопасность» → выберите «Настроить сертификаты».
2. Перейдите во вкладку «Центры сертификации» → выберите «Импорт».
3. Перейдите в папку со скачанными сертификатами. Дважды кликните по сертификату «russian_trusted_root_ca_pem.crt» → установите флажок «Доверять этому сертификату при идентификации сайтов» → нажмите «ОК».
4. Во вкладке «Центры сертификации» снова выберите кнопку «Импорт» → дважды кликните по сертификату «russian_trusted_sub_ca_pem.crt» → установите флажок «Доверять этому сертификату при идентификации сайтов» → нажмите «ОК».
5. Проверьте список сертификатов. Найдите «org-The Ministry of Digital Development and Communications» и раскройте список. Внутри должны находиться сертификаты «Russian Trusted Root CA» и «Russian Trusted Sub CA».
![image](https://developers.alfabank.ru/assets/developers-portal.docs.alfa-api/articles/specification/articles/certificate/articles/linux/files/linux6.png)
Очистите кэш вашего браузераОчистите кэш браузера на устройстве, с которого осуществляется доступ. Это необходимо для корректной работы с ресурсами, защищёнными сертификатами безопасности Минцифры.
[Сертификаты для MacOS](https://developers.alfabank.ru/products/alfa-api/documentation/articles/specification/articles/certificate/articles/macos/macos)[Как подключить](https://developers.alfabank.ru/products/alfa-api/documentation/articles/connection/articles/instruction/instruction)

View File

@@ -0,0 +1,22 @@
[](https://developers.alfabank.ru/) / Общая информация / ... / Что это и для чего нужно
`B2B` `B2C` `H2H`
# Что это и для чего нужно
---
Установка сертификата Министерства цифрового развития, связи и массовых коммуникаций Российской Федерации (Минцифры) необходима для подтверждения личности и безопасности пользователя при работе с определёнными типами данных и сервисов.
Этот сертификат используется для шифрования данных, аутентификации пользователя и защиты от мошенничества и кибератак.
Кроме того, он может потребоваться для доступа к некоторым государственным услугам и сервисам, связанным с электронной подписью и документооборотом.
Для получения защищённого доступа ко всем сайтам и онлайн-сервисам используйте браузеры с поддержкой российских сертификатов: Яндекс Браузер или Атом.
Альтернативный способ - установка корневого сертификата. Если Вы привыкли работать в других браузерах или возникли проблемы с работой сторонних программ, Вы можете установить корневой сертификат в операционную систему.
Ответы на часто задаваемые вопросы можно посмотреть здесь.
---
[Термины и определения](https://developers.alfabank.ru/products/alfa-api/documentation/articles/specification/articles/terms/terms) | [Сертификаты для Android](https://developers.alfabank.ru/products/alfa-api/documentation/articles/specification/articles/certificate/articles/android/android)

View File

@@ -0,0 +1,138 @@
# Инструкция по тестированию
**Теги:** `B2B` `B2C` `H2H`
1. Отправьте письмо на почту [alfa_api@alfabank.ru](mailto:alfa_api@alfabank.ru) с указанием, что хотите подключить вебхуки.
2. На своей стороне реализуйте открытый [Партнёрский метод для получения вебхуков](/products/alfa-api/documentation/articles/webhooks/articles/partner-webhook/v1/partner-webhook).
3. Создайте вебхук в песочнице с помощью метода [«Создание вебхука»](/products/alfa-api/documentation/articles/webhooks/articles/create-webhook/v1/create-webhook).
4. Вызовите метод [«Проверка работы вебхука»](/products/alfa-api/documentation/articles/sandbox/articles/check-webhook/articles/transactions/v1/transactions).
- В результате успешного запроса для `object = ul_transaction_default` создаются тестовые транзакции для следующих счетов:
- `40702810102300000001`
- `40702810402300000002`
- `40702810002300000003`
- `40702978902300000004`
- В результате успешного запроса для `object = jp_sbp_incoming_payments` будет создан тестовый платёж для счёта:
- `40702810100010000000`
5. После создания транзакций на ваш метод будет отправлен вебхук. Примеры форматов представлены ниже.
### Пример формата вебхука для выписки
```json
[
{
"actionType": "update",
"eventTime": "2022-01-12T00:00:00",
"object": "ul_transaction_default",
"organizationId": "vvvvvv",
"data": {
"amount": {
"amount": 1.0,
"currencyName": "RUR"
},
"amountRub": {
"amount": 1.0,
"currencyName": "RUR"
},
"correspondingAccount": "30101810200000000593",
"direction": "CREDIT",
"documentDate": "2022-01-12",
"filial": "АО \"АЛЬФА-БАНК\" г Москва",
"number": "178",
"operationCode": "01",
"operationDate": "2022-01-12T00:00:00",
"paymentPurpose": "Перевод собственных средств. НДС не облагается.",
"priority": "5",
"revaln": null,
"uuid": "9084d309-b30b-5083-9a54-d4522472e11a",
"transactionId": "1220112MOCO#DS4001415",
"rurTransfer": {
"cartInfo": {
"documentCode": null,
"documentContent": null,
"documentDate": null,
"documentNumber": null,
"paymentNumber": null,
"restAmount": null
},
"deliveryKind": "электронно",
"departmentalInfo": {
"uip": "1",
"drawerStatus101": "01",
"kbk": "18210102010011000110",
"oktmo": "12301000",
"reasonCode106": "ТП",
"taxPeriod107": "ГД.01.2022",
"docNumber108": "123",
"docDate109": "12.01.2022",
"paymentKind110": "1"
},
"payeeAccount": "40702810301300000763",
"payeeBankBic": "044525593",
"payeeBankCorrAccount": "30101810200000000593",
"payeeBankName": "АО \"АЛЬФА-БАНК\" г Москва",
"payeeInn": "0140237176",
"payeeKpp": "770801001",
"payeeName": "Полное наименование Орг № 11329",
"payerAccount": "40702810701300000761",
"payerBankBic": "044525593",
"payerBankCorrAccount": "30101810200000000593",
"payerBankName": "АО \"АЛЬФА-БАНК\" г Москва",
"payerInn": "0140237176",
"payerKpp": "770801001",
"payerName": "Полное наименование Орг № 11329",
"payingCondition": null,
"purposeCode": "2",
"receiptDate": "2022-01-12",
"valueDate": "2022-01-12"
}
}
}
]
```
### Пример формата вебхука для входящих платежей
```json
[
{
"actionType": "update",
"eventTime": "2022-01-12T00:00:00",
"object": "jp_sbp_incoming_payments",
"organizationId": "vvvvvv",
"data": {
"qrcId": "AD1000038AQ1FG409KGACUQU5QRSH3FM",
"nspkTransactionId": "B467FC50C59A469A9898AB7B05EE3F07",
"amount": 1000000,
"taxAmount": 200000,
"paymentPurpose": "Оплата по договору №123456789 от 01.09.2001",
"payeeAccount": "40702810100010000000",
"payerAccount": null,
"currency": "RUR",
"timestamp": "2024-11-26T09:09:32Z",
"payerInfo": {
"name": "ИП Викулин",
"inn": "911006876365",
"bik": "044525593",
"accountType": "BBAN",
"bankName": "АО \"АЛЬФА-БАНК\"",
"bankCorrAccount": "30101810200000000593"
},
"recipientInfo": {
"name": "OOO Ромашка",
"inn": "8110068763612",
"bik": "044625503",
"accountType": null,
"bankName": "БАНК",
"bankCorrAccount": "30101810200000000522"
}
}
}
]
```
---
**Навигация:**
- ← [Начало работы в песочнице](/products/alfa-api/documentation/articles/sandbox/articles/intro/intro)
- [Проверка работы вебхука](/products/alfa-api/documentation/articles/sandbox/articles/check-webhook/articles/transactions/v1/transactions) →

View File

@@ -0,0 +1,101 @@
# Проверка работы вебхука
**Теги:** `B2B` `B2C` `H2H`
### Эндпоинт для Песочницы
`POST https://sandbox.alfabank.ru/api/v1/webhooks-events`
### Scope
`transactions` `b2b-sbp`
---
## Параметры запроса
### HEADERS
| Атрибут | Тип | Обязательность | Описание |
| :---------------- | :----- | :------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Authorization** | string | required | Bearer {access_token}, полученный по [Authorization Code Flow](/products/alfa-api/documentation/articles/alfa-id/articles/acf/articles/intro/intro) / [Authorization Code Flow H2H](/products/alfa-api/documentation/articles/alfa-id/articles/acf-h2h/articles/intro/intro) |
| **Accept** | string | required | application/json |
| **Content-Type** | string | required | application/json |
### BODY
| Атрибут | Тип | Обязательность | Описание |
| :--------- | :----- | :------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **object** | string | required | Объект/сущность, на который партнёр API хочет подписаться. Возможные значения:<br>• `ul_transaction_default` — получение выписки;<br>• `jp_sbp_incoming_payments` — получение входящих платежей |
### Пример запроса
```bash
curl -X POST https://sandbox.alfabank.ru/api/v1/webhooks-events \
-H 'Authorization: Bearer {token}' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"object": "ul_transaction_default"
}'
```
---
## Параметры ответа
### 201 Created
Нет тела ответа.
### 400 Bad Request
| Атрибут | Тип | Обязательность | Описание |
| :-------------------- | :----- | :------------- | :--------------------------------------------------------------------------- |
| **error** | string | required | Код ошибки. Значение: `invalid_request` — неверные входные параметры запроса |
| **error_description** | string | optional | Описание ошибки |
### 401 Unauthorized
| Атрибут | Тип | Обязательность | Описание |
| :-------------------- | :----- | :------------- | :----------------------------------------------------------------------------------------------------------------------------- |
| **error** | string | required | Код ошибки. Значение: `invalid_token` — предоставленный токен просрочен, отозван, имеет неправильный формат или недействителен |
| **error_description** | string | optional | Описание ошибки |
### 403 Forbidden
| Атрибут | Тип | Обязательность | Описание |
| :-------------------- | :----- | :------------- | :----------------------------------------------------------------------------------------------------------- |
| **error** | string | required | Код ошибки. Значение: `insufficient_scope` — у пользователя нет прав на использование запрашиваемого сервиса |
| **error_description** | string | optional | Описание ошибки |
### 404 Not Found
| Атрибут | Тип | Обязательность | Описание |
| :-------------------- | :----- | :------------- | :----------------------------------------------------------------------- |
| **error** | string | required | Код ошибки. Значение: `unknown_route` — эндпоинт не найден или неактивен |
| **error_description** | string | optional | Описание ошибки |
### 429 Too Many Requests
Нет тела ответа.
### 500 Internal Server Error
| Атрибут | Тип | Обязательность | Описание |
| :-------------------- | :----- | :------------- | :----------------------------------------------------------------- |
| **error** | string | required | Код ошибки. Значение: `internal_error` — внутренняя ошибка сервиса |
| **error_description** | string | optional | Описание ошибки |
### 503 Service Unavailable
Нет тела ответа.
> **Примечание:** Значения параметров ошибок могут изменяться. Рекомендуем предусмотреть стандартную обработку ошибок, не описанных в текущей версии документации.
---
## Навигация
- ← [Инструкция по тестированию](/products/alfa-api/documentation/articles/sandbox/articles/check-webhook/articles/intro/intro)
- [Тестирование электронной подписи](/products/alfa-api/documentation/articles/sandbox/articles/check-signature/check-signature) →

View File

@@ -0,0 +1,26 @@
# Управление сертификатами для подписи и шифрования
**Теги:** `B2B` `B2C` `H2H`
### RSA
Для тестирования подписи и шифрования сообщений с помощью RSA-сертификата Вам будет необходимо выпустить сертификат в УЦ Альфа-Банка с помощью сервиса [«Электронная подпись»](/products/alfa-api/documentation/articles/signature/signature).
Первым шагом инструкции на выпуск RSA-сертификата выполняется запрос на сертификат. Для получения тестового сертификата на втором пункте с созданием закрытого ключа необходимо воспользоваться тестовым закрытым ключом [key-encrypted.zip](/assets/developers-portal.docs.alfa-api/articles/sandbox/articles/managing-certificates/files/sandbox_alfa_test_jwt_2026.zip) (пароль для архива уточняйте у персонального менеджера).
Для проверки подписи необходимо использовать тестовый [сертификат](/assets/developers-portal.docs.alfa-api/articles/sandbox/articles/managing-certificates/files/sandbox_alfa_test_jwt_2026.cer) ключа проверки подписи.
### ГОСТ
Для тестирования подписи и шифрования сообщений с помощью ГОСТ-сертификата Вам будет необходимо выпустить сертификат в любом специализированном [государственном УЦ](https://digital.gov.ru/ru/activity/govservices/certification_authority/?utm_referrer=https%3a%2f%2fwww.google.com%2f). Далее сертификат необходимо загрузить в Банк с помощью метода [«Добавление сертификата»](/products/alfa-api/documentation/articles/signature-encryption/articles/managing-certificates/articles/post-certificates/post-certificates), указав при этом в поле `type` тип этого сертификата.
Для тестирования методов необходимо использовать URL [https://sandbox.alfabank.ru/api](https://sandbox.alfabank.ru/api).
Для проверки подписи необходимо использовать тестовый сертификат ключа проверки подписи. Для получения сертификата напишите на почту [alfa_api@alfabank.ru](mailto:alfa_api@alfabank.ru).
---
#### Навигация
- ← [Тестирование электронной подписи](/products/alfa-api/documentation/articles/sandbox/articles/check-signature/check-signature)
- [Формат исходного сообщения JSON](/products/alfa-api/documentation/articles/sandbox/articles/signature/articles/jws/v1/jws) →

View File

@@ -0,0 +1,80 @@
# Тестирование платёжных поручений
**Теги:** `B2B` `H2H`
Для тестирования метода [«Создание рублёвого платёжного поручения»](/products/alfa-api/documentation/articles/payments/articles/create/v2/create) в песочнице необходимо сгенерировать уникальный идентификатор для передачи в параметре `externalId`.
При создании рублёвого платёжного поручения **с подписью** в параметре `certificateUuid` необходимо передать серийный номер RSA-сертификата:
`61000366d11e143acbc03a56d70001000366d1`
### Значения БИК банка для тестирования
Эти значения передаются в полях `payerBankBic` и `payeeBankBic`:
- `040173745`
- `044525593`
---
### Пример тестового запроса
```bash
curl --location --request POST 'https://sandbox.alfabank.ru/api/jp/v2/payments' \
--header 'Authorization: Bearer {access-token}' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--data-raw '{
"amount": 1.00,
"date": "2022-10-11",
"deliveryKind": "электронно",
"departmentalInfo": {
"uip": "0",
"drawerStatus101": "01",
"kbk": "18210102010011000110",
"oktmo": "45902000",
"reasonCode106": "ТП",
"taxPeriod107": "МС.02.2022",
"docNumber108": "000000000000001",
"docDate109": "2022-05-25"
},
"digestSignatures": [
{
"base64Encoded": "HlaeIHXXEcGT1bFxo1NlpAzpr+kJ2IQrcxVdvDTep6xjsmD1FDb+6NIyLT+/T24S0mPfVCU75sieOMt71TBS7w==",
"certificateUuid": "61000366d11e143acbc03a56d70001000366d1"
}
],
"externalId": "22a6dd81-103a-4d3a-8e9b-0ba4b527f5f6",
"number": "1047",
"operationCode": "01",
"payeeAccount": "40702810564564564531",
"payeeBankBic": "040173745",
"payeeBankCorrAccount": "30101810800000000745",
"payeeInn": "7723870785",
"payeeKpp": "553453453",
"payeeName": "Общество с ограниченной ответственностью \"Центр \"ИННОВАЦИЯ\"",
"payerAccount": "40702810102300000001",
"payerBankBic": "044525593",
"payerBankCorrAccount": "30101810200000000593",
"payerInn": "0453438040",
"payerKpp": "046773311",
"payerName": "Общество с ограниченной ответственностью \"Клиент\"",
"priority": "5",
"purpose": "Оплата заказа №1. НДС не облагается",
"urgencyCode": "NORMAL",
"vat": {
"rate": "0",
"type": "NO_VAT"
}
}'
```
---
### Навигация
- ← [Формат исходного сообщения TXT](/products/alfa-api/documentation/articles/sandbox/articles/signature/articles/text/v1/text)
- [Для чего нужен SDK](/products/alfa-api/documentation/articles/sdk/articles/intro/intro) →
---
_Примечание: Данный документ предназначен для работы в среде **Песочница**._

View File

@@ -0,0 +1,142 @@
# Начало работы в песочнице
**Теги:** `B2B` `B2C` `H2H`
**Песочница API** — это среда, которую партнёры API могут использовать для имитации промышленной среды и получения смоделированных ответов по всем API.
Песочница позволяет пройти аутентификацию в Alfa ID и вызвать методы Alfa API в тестовом режиме, не воздействуя на реальные данные.
> **Внимание**
> Обработка негативных сценариев (например, ошибки валидации или доступа) **в песочнице** может отличаться от обработки в промышленной среде и спецификации тестируемого метода.
---
## Подготовка к работе в песочнице
Для начала работы в песочнице пройдите следующие шаги:
1. **Заключите договор о техническо-информационном взаимодействии**
Подробнее [на странице Подписание договора](/products/alfa-api/documentation/articles/connection/articles/onboarding/onboarding).
2. **Получите тестовый `client_id` и `scope`**
Получите `client_id` и доступные `scope` [на Портале разработчика](/products/alfa-api/documentation/articles/selfservice/articles/test/test). Также эти данные можно найти в письме, отправленном банком вам на почту после подписания договора.
3. **Установите тестовый TLS-сертификат**
Для получения доступа к тестовой среде необходимо установить тестовый TLS-сертификат – [test_cert.zip](/assets/developers-portal.docs.alfa-api/articles/sandbox/articles/intro/files/test_cert.zip) – пароль для архива уточняйте у персонального менеджера.
**Архив состоит из файлов:**
- `sandbox_cert_2026.cer` – сертификат для клиента (открытый ключ);
- `sandbox_key_2026.key` – закрытый ключ;
- `apica_2022_chain.cer` – цепочка сертификатов УЦ (содержит в себе `root_apica_2022.cer` и `sub_root_apica_2022.cer`);
- `root_apica_2022.cer` – корневой сертификат УЦ;
- `sub_root_apica_2022.cer` – промежуточный сертификат УЦ;
- `baas_swagger_2026.p12` – контейнер p12, содержащий вышеперечисленные файлы.
Для доступа к Swagger UI можно использовать следующие комбинации (в зависимости от выбора Вашего ПО для работы с API):
- открытый ключ + закрытый ключ + цепочка сертификатов УЦ;
- открытый ключ + закрытый ключ + корневой сертификат УЦ + промежуточный сертификат УЦ;
- контейнер p12 (`baas_swagger_2026.p12`) – самый простой способ.
**Важно!** Корневой сертификат УЦ необходимо добавить в доверенные сертификаты на своей стороне.
Для вызова методов можно использовать стандартные программные средства для работы с API: Postman, SoapUI, JMeter, curl или использовать самописные программные средства или встроенные возможности ERP-системы.
4. **Установите сертификаты Минцифры**
Для корректной работы песочницы необходимо установить [сертификаты Минцифры](/products/alfa-api/documentation/articles/specification/articles/certificate/articles/intro/intro).
5. **Проверьте тестовый Swagger UI**
Тестовый Swagger UI находится по адресу [https://sandbox.alfabank.ru/swagger-ui/](https://sandbox.alfabank.ru/swagger-ui/)
6. **Получите тестовый `client_secret`**
Подробнее [на странице Client secret](/products/alfa-api/documentation/articles/connection/articles/clientsecret/clientsecret).
---
## Особенности вызовов
После выполнения указанных шагов вы можете приступать к тестированию запросов в песочнице.
При использовании песочницы все вызовы API должны осуществляться с установкой mTLS-соединения. В зависимости от требований используемого вами клиента при отправке запросов вам может понадобиться сертификат и закрытый ключ. Рекомендуем ознакомиться с документацией используемого клиента.
### Пример запроса (cURL)
```bash
curl -X GET https://sandbox.alfabank.ru/api/v1/endpoint \
-v --cert test_certificate.cer \
--key test_key.key \
--header 'accept: application/json' \
--header 'content-type: application/json'
```
---
## Как сообщить об ошибке
Отправьте письмо на [alfa_api@alfabank.ru](mailto:alfa_api@alfabank.ru), указав следующие данные:
1. `client_id`.
2. Дата и время запроса с указанием часового пояса.
3. Метод и URI запроса.
4. Заголовки и тело запроса.
5. Полученная ошибка и заголовки ответа, включая `X-TraceId`.
6. IP-адрес, с которого был отправлен запрос.
---
## Адреса для тестирования
- **Получение кода авторизации:** [https://id-sandbox.alfabank.ru/oidc/authorize?response_type=code&client_id={client_id}&redirect_uri={redirect_uri}&scope={scope}&state={state}](https://id-sandbox.alfabank.ru/oidc/authorize?response_type=code&client_id=%7Bclient_id%7D&redirect_uri=%7Bredirect_uri%7D&scope=%7Bscope%7D&state=%7Bstate%7D)
- **Другие запросы в Alfa ID:** [https://sandbox.alfabank.ru/oidc](https://sandbox.alfabank.ru/oidc)
- **Запросы в Alfa API:** [https://sandbox.alfabank.ru/api](https://sandbox.alfabank.ru/api)
---
## Счета для тестирования
**Номера счетов:**
- `40702810102300000001`
- `40702810402300000002`
- `40702810002300000003`
- `40702810002300000004`
**Номер корреспондентского счёта:**
- `30102810102300000593`
---
## Рекомендации по тестированию Alfa ID ЮЛ (Юридические лица)
Для прохождения процедуры аутентификации используйте тестовые данные:
- **Login:** `SomeDifficultLogin`
- **Password:** `1qaz!QAZ`
- **One-Time Password (OTP):** `000000`
Для подписания формы согласия используйте:
- **One-Time Password:** `111111`
Подробнее [в разделе Alfa ID](/products/alfa-api/documentation/articles/alfa-id/alfa-id).
---
## Рекомендации по тестированию Alfa ID ФЛ (Физические лица)
Для прохождения процедуры аутентификации используйте тестовые данные:
- **Номер телефона:** `71111111111`
- **Login:** `SomeDifficultLogin`
- **Password:** `000000`
- **One-Time Password (OTP):** `000000`
Для подписания формы согласия используйте:
- **One-Time Password:** `000000`
Подробнее [в разделе Alfa ID](/products/alfa-api/documentation/articles/alfa-id/alfa-id).
---
[← API Key](/products/alfa-api/documentation/articles/api-key/api-key) | [Инструкция по тестированию вебхуков →](/products/alfa-api/documentation/articles/sandbox/articles/check-webhook/articles/intro/intro)

View File

@@ -0,0 +1,40 @@
# Тестирование электронной подписи
**Теги:** `B2B` `H2H`
Во втором шаге инструкции на [выпуск RSA-сертификата](/products/alfa-api/documentation/articles/signature/articles/intro/intro) выполняется запрос на сертификат. Для тестирования в песочнице необходимо использовать приложенный ниже `pkcs10Content` при вызове метода ["Заявка на выпуск RSA-сертификата"](/products/alfa-api/documentation/articles/signature/articles/issue-rsa/v1/issue-rsa).
### Содержимое pkcs10Content (Certificate Request)
```text
-----BEGIN CERTIFICATE REQUEST-----
MIIC/DCCAeQCAQAwgacxJTAjBgkqhkiG9w0BCQEWFlVzZXI1MDRAcG9jaHRvY2hr
YS5jb20xOzA5BgNVBAMMMtCa0YPQtNGA0Y/QstGG0LXQsiDQldGA0LzQvtC70LDQ
nuSDQmNCz0L7RgNC10LLQuNGHMQswCQYDVQQGEwJSVTEbMBkGA1UEBAwS0JrRg9C0
0YDRj9Cy0YbQtdCyMRcwFQYDVQQqDA7QldGA0LzQvtC70LDQuTCCASIwDQYJKoZI
hvcNAQEBBQADggEPADCCAQoCggEBANGTN2bX/kaOHuuEfMiOKg1f8y3SY1AseVjQ
ceoHKdaSeLoUIscPgEsuDsbtF6ezsZqV7bwyRYuJK+kMprczDWKiQNxmZPOafiKG
5MKOcxysgX9LV+R8JhVoycfQqmSqfImQBcPZ6s9bqq6J8cs04FCzy+nhPYoFUs2l
X+ZrFfLF135fO4LlRxfj4dfIbHZ4NVogiezIteBE3SPTtEeXiYj2c7SyB0Z17gbQ
dTmtWIolrb5GTZ6SyjjcMZY3U2ZR+4eyn2l1MFt5F/K9Ke47zu4DYTF7zkitST11
nr5gR64zjVZRtmrVqMU9iB7NmQ8/gS8YEsC3PTSECvqioSDHwNcCAwEAAaAPMA0G
CSqGSIb3DQEJDjEAMA0GCSqGSIb3DQEBCwUAA4IBAQBazGrfYMfeUdJ7ofbQ5lom
EsHO/cA312QUpyzFEsHbjYhy9OZTjiVXLfVExf8QrcRchi4/6IECp01S2Ed+nfMm
E/MtD3rtE2oBtH6FjA9APtZb9NZuiSYCzl7nL3rd0ui+F32Dy/JNkudktn64jsMH
YVt5u8Ik0dtxl0axa3E5RUkpJTTl7iIOWD+P8UkOOpa9EMPA2hrtrZvPr8xr60IS
d2t4vKFcHIdgdI2Qe5ATvaYfbccLGjxdWm05lXVuxRjpEOXjuhc5mRkEj06bPavD
9k7h/Tsz4Jb9gNKDZ3TEzfynQkDFFse8in6IDDkwPO21J6onTMd7KOP1gqMSYjrh
-----END CERTIFICATE REQUEST-----
```
### Данные для подтверждения
Для шага с подписанием заявки с помощью кода из СМС использовать:
**One-Time Password: 11111111**
---
#### Навигация
- ← [Проверка работы вебхука](/products/alfa-api/documentation/articles/sandbox/articles/check-webhook/articles/transactions/v1/transactions)
- [Управление сертификатами для подписи и шифрования](/products/alfa-api/documentation/articles/sandbox/articles/managing-certificates/managing-certificates) →

View File

@@ -0,0 +1,102 @@
# Формат исходного сообщения JSON
**Метод:** `POST`
**Эндпоинт (Песочница):** `https://sandbox.alfabank.ru/api/signature-encryption-tests/json`
---
### Описание
С помощью данного метода можно протестировать подпись и шифрование сообщения в формате JSON с использованием ГОСТ- или RSA-сертификата.
- Процесс формирования и подписания сообщения с использованием RSA-сертификата описан [здесь](/products/alfa-api/documentation/articles/signature-encryption/articles/signature/articles/json-rsa/json-rsa).
- Процесс формирования и шифрования сообщения RSA описан [здесь](/products/alfa-api/documentation/articles/signature-encryption/articles/encryption/articles/json-rsa/json-rsa).
- Подписание запроса и дешифрование ответа происходит с использованием закрытого ключа сертификата. Для тестирования необходимо использовать тестовый [закрытый ключ](/assets/developers-portal.docs.alfa-api/articles/sandbox/articles/signature/articles/jws/v1/files/sandbox_alfa_test_jwt_2026.zip) (пароль уточняйте у персонального менеджера).
- Процесс формирования и подписания сообщения с использованием ГОСТ-сертификата описан [здесь](/products/alfa-api/documentation/articles/signature-encryption/articles/signature/articles/json-gost/json-gost).
- Процесс формирования и шифрования сообщения ГОСТ описан [здесь](/products/alfa-api/documentation/articles/signature-encryption/articles/encryption/articles/json-gost/json-gost).
> **Внимание**
> Способ защиты данных определяется настройками интеграции. Для уточнения информации по настройке Вашей интеграции или запроса для установления нужных настроек необходимо написать на почту [alfa_api@alfabank.ru](mailto:alfa_api@alfabank.ru). При запросе установления настроек необходимо сообщить способ защиты (подпись или подпись с шифрованием), а также алгоритм (RSA или ГОСТ).
---
### Параметры запроса
#### HEADERS
| Атрибут | Тип | Обязательность | Описание |
| :----------------------------- | :----- | :------------- | :------------------------------------------------------------------------------------------------------------------------------------------ |
| **Authorization** | string | required | Bearer {access_token} |
| **Accept** | string | required | application/jose |
| **Content-Type** | string | required | application/jose |
| **X-Request-ChannelSecurity** | string | optional | Тип защиты канала для запроса. Значения: `NO` (без защиты), `SIGNATURE` (проверка подписи), `ENCRYPTION` (дешифрование и проверка подписи). |
| **X-Response-ChannelSecurity** | string | optional | Тип защиты канала для ответа. Значения: `NO` (без защиты), `SIGNATURE` (подписание ответа), `ENCRYPTION` (подписание и шифрование ответа). |
#### BODY
| Атрибут | Тип | Обязательность | Описание |
| :------ | :----- | :------------- | :-------------------------------- |
| (root) | string | required | Тело подписи в виде base64-строки |
---
### Пример запроса
```bash
curl -X POST https://sandbox.alfabank.ru/api/signature-encryption-tests/json \
-H 'Authorization: Bearer {access-token}' \
-H 'Accept: application/jose' \
-H 'Content-Type: application/jose' \
-H 'X-Request-ChannelSecurity: SIGNATURE' \
-H 'X-Response-ChannelSecurity: SIGNATURE' \
-d 'eyJraWQiOiI2MTAwMDM4YWFhYTAxZTRkN2YzOTM5OGQ4NDAwMDEwMDAzOGFhYSIsInR5cCI6IkpXVCIsImFsZyI6IlJTMjU2In0.eyJjb3VudCI6MTAwLCJzb21lRmllbGQiOiJzb21lVmFsdWUiLCJpZCI6IjNiNzk1YTBlLTFjOTctNDIxMi05YTI4LWYyODJkODAxNWI1YSIsImNyZWF0aW9uRGF0ZSI6IjIwMjItMDUtMThUMTA6Mjc6MDkuNzEyWiIsInN0YXR1cyI6ImFjdGl2ZSJ9.WYQKfllUHfs7IN0DdujjKlqpnThfJZgY_A6CZN-ghFohTYbDiRAJBAk4IxIkRfj2Hxcz4rR5DEKX8remdXEOHGrBpNf4okOob0bfIutNRhaeaZAIMFKjungALPRBmMhAiU0t5-Vp3ImUwhidSnSSP08gCHrTD1by5zYrzzYBB6tyikf8lNwYJQKRxscZcXqwOU9gAWBuV4rteClIbDCeTwkx5ci6WKWAq8bv7RDuwU_1KPjh6upJmwJ1g1epmvPdaFOQq5uf9NhAxomeeptmJoBOm3c8ZSYASYMno8KNWxr94B2xAhD7NCakfFCiQZjSH9b6MjM2aJEBhDyKYo2IGw'
```
---
### Параметры ответа
#### 201 Created
| Атрибут | Тип | Обязательность | Описание |
| :------ | :----- | :------------- | :---------- |
| (root) | string | optional | Тело ответа |
#### 400 Bad Request
| Атрибут | Тип | Обязательность | Описание |
| :-------------------- | :----- | :------------- | :----------------------------------------------------------------- |
| **error** | string | required | Код ошибки: `invalid_request` — неверные входные параметры запроса |
| **error_description** | string | optional | Описание ошибки |
#### 401 Unauthorized
| Атрибут | Тип | Обязательность | Описание |
| :-------------------- | :----- | :------------- | :------------------------------------------------------------------------ |
| **error** | string | required | Код ошибки: `invalid_token` — токен просрочен, отозван или недействителен |
| **error_description** | string | optional | Описание ошибки |
#### 404 Not Found
| Атрибут | Тип | Обязательность | Описание |
| :-------------------- | :----- | :------------- | :---------------------------------------------------------------- |
| **error** | string | required | Код ошибки: `unknown_endpoint` — эндпоинт не найден или неактивен |
| **error_description** | string | optional | Описание ошибки |
#### 500 Internal Server Error
| Атрибут | Тип | Обязательность | Описание |
| :-------------------- | :----- | :------------- | :------------------------------------------------------- |
| **error** | string | required | Код ошибки: `internal_error` — внутренняя ошибка сервиса |
| **error_description** | string | optional | Описание ошибки |
---
_Значения параметров ошибок могут изменяться. Рекомендуем предусмотреть стандартную обработку ошибок, не описанных в текущей версии документации._
---
**Навигация:**
- [← Управление сертификатами для подписи и шифрования](/products/alfa-api/documentation/articles/sandbox/articles/managing-certificates/managing-certificates)
- [Формат исходного сообщения XML →](/products/alfa-api/documentation/articles/sandbox/articles/signature/articles/xmldsig/v1/xmldsig)

View File

@@ -0,0 +1,72 @@
Вот преобразованный в Markdown формат документации для метода тестирования подписи и шифрования TXT-сообщений.
---
# Формат исходного сообщения TXT
Метод позволяет протестировать подпись и шифрование сообщения в формате TXT с использованием ГОСТ- или RSA-сертификата.
### Эндпоинт (Песочница)
`POST https://sandbox.alfabank.ru/api/signature-encryption-tests/text`
---
### Описание процесса
* **RSA-сертификат:** Процесс формирования и подписания описан [здесь](https://developers.alfabank.ru/products/alfa-api/documentation/articles/signature-encryption/articles/signature/articles/text-rsa/text-rsa), а шифрования — [здесь](https://developers.alfabank.ru/products/alfa-api/documentation/articles/signature-encryption/articles/encryption/articles/text-rsa/text-rsa).
* **ГОСТ-сертификат:** Процесс формирования и подписания описан [здесь](https://developers.alfabank.ru/products/alfa-api/documentation/articles/signature-encryption/articles/signature/articles/text-gost/text-gost), а шифрования — [здесь](https://developers.alfabank.ru/products/alfa-api/documentation/articles/signature-encryption/articles/encryption/articles/text-gost/text-gost).
* **Тестирование:** Подписание запроса и дешифрование ответа происходит с использованием закрытого ключа. Для тестов используйте [закрытый ключ](https://developers.alfabank.ru/assets/developers-portal.docs.alfa-api/articles/sandbox/articles/signature/articles/text/v1/files/sandbox_alfa_test_jwt_2026.zip) (пароль уточняйте у персонального менеджера).
> **⚠️ Внимание**
> Способ защиты данных определяется настройками интеграции. Для уточнения настроек или их изменения напишите на [alfa_api@alfabank.ru](mailto:alfa_api@alfabank.ru), указав способ защиты (подпись или подпись с шифрованием) и алгоритм (RSA или ГОСТ).
---
### Параметры запроса
#### HEADERS
| Атрибут | Тип | Обязательность | Описание |
| :--- | :--- | :--- | :--- |
| **Authorization** | string | required | Bearer {access_token} |
| **Accept** | string | required | text/plain |
| **Content-Type** | string | required | text/plain |
| **X-Request-ChannelSecurity** | string | optional | Тип защиты запроса. Значения: `NO` (без защиты), `SIGNATURE` (подпись), `ENCRYPTION` (дешифрование и подпись). |
| **X-Response-ChannelSecurity** | string | optional | Тип защиты ответа. Значения: `NO` (без защиты), `SIGNATURE` (подпись), `ENCRYPTION` (подпись и шифрование). |
#### BODY
| Атрибут | Тип | Обязательность | Описание |
| :--- | :--- | :--- | :--- |
| — | string | required | Тело подписи в виде base64-строки |
#### Пример запроса
```bash
curl -X POST https://sandbox.alfabank.ru/api/signature-encryption-tests/text \
-H 'Authorization: Bearer {access-token}' \
-H 'Accept: text/plain' \
-H 'Content-Type: text/plain' \
-H 'X-Request-ChannelSecurity: SIGNATURE' \
-H 'X-Response-ChannelSecurity: SIGNATURE' \
-d 'eyJraWQiOiI2MTAwMDM4YWFhYTAxZTRkN2YzOTM5OGQ4NDAwMDEwMDAzOGFhYSIsInR5cCI6IkpXVCIsImFsZyI6IlJTMjU2In0.eyJjb3VudCI6MTAwLCJzb21lRmllbGQiOiJzb21lVmFsdWUiLCJpZCI6IjNiNzk1YTBlLTFjOTctNDIxMi05YTI4LWYyODJkODAxNWI1YSIsImNyZWF0aW9uRGF0ZSI6IjIwMjItMDUtMThUMTA6Mjc6MDkuNzEyWiIsInN0YXR1cyI6ImFjdGl2ZSJ9.WYQKfllUHfs7IN0DdujjKlqpnThfJZgY_A6CZN-ghFohTYbDiRAJBAk4IxIkRfj2Hxcz4rR5DEKX8remdXEOHGrBpNf4okOob0bfIutNRhaeaZAIMFKjungALPRBmMhAiU0t5-Vp3ImUwhidSnSSP08gCHrTD1by5zYrzzYBB6tyikf8lNwYJQKRxscZcXqwOU9gAWBuV4rteClIbDCeTwkx5ci6WKWAq8bv7RDuwU_1KPjh6upJmwJ1g1epmvPdaFOQq5uf9NhAxomeeptmJoBOm3c8ZSYASYMno8KNWxr94B2xAhD7NCakfFCiQZjSH9b6MjM2aJEBhDyKYo2IGw'
```
---
### Параметры ответа
#### 201 Created
| Атрибут | Тип | Обязательность | Описание |
| :--- | :--- | :--- | :--- |
| **responseTextFiled** | string | optional | Тело ответа |
**Пример ответа:**
```text
responseTextFiled:responseTextValue
```
#### Ошибки (400, 401, 404, 500)
| Атрибут | Тип | Обязательность | Описание |
| :--- | :--- | :--- | :--- |
| **error** | string | required | Код ошибки (например, `invalid_request`, `invalid_token`, `unknown_endpoint`, `internal_error`) |
| **error_description** | string | optional | Детальное описание ошибки |
---
*Примечание: Значения параметров ошибок могут изменяться. Рекомендуется предусмотреть стандартную обработку ошибок.*

View File

@@ -0,0 +1,133 @@
# Формат исходного сообщения XML
**Теги:** `B2B` `B2C` `H2H`
### Эндпоинт для тестирования (Песочница)
`POST https://sandbox.alfabank.ru/api/signature-encryption-tests/xml`
---
### Описание
С помощью данного метода можно протестировать подпись и шифрование сообщения в формате XML с использованием RSA-сертификата.
Процесс формирования и подписания сообщения с использованием RSA-сертификата описан [здесь](/products/alfa-api/documentation/articles/signature-encryption/articles/signature/articles/xml-rsa/xml-rsa), а процесс формирования и шифрования сообщения описан [здесь](/products/alfa-api/documentation/articles/signature-encryption/articles/encryption/articles/xml-rsa/xml-rsa). Подписание запроса и дешифрование ответа происходит с использованием закрытого ключа сертификата. Для тестирования необходимо использовать тестовый [закрытый ключ](/assets/developers-portal.docs.alfa-api/articles/sandbox/articles/signature/articles/xmldsig/v1/files/sandbox_alfa_test_jwt_2026.zip) (пароль уточняйте у персонального менеджера).
Процесс формирования и подписания сообщения с использованием ГОСТ-сертификата описан [здесь](/products/alfa-api/documentation/articles/signature-encryption/articles/signature/articles/xml-gost/xml-gost), а процесс формирования и шифрования сообщения описан [здесь](/products/alfa-api/documentation/articles/signature-encryption/articles/encryption/articles/xml-gost/xml-gost).
> **Внимание**
> Способ защиты данных определяется настройками интеграции. Для уточнения информации по настройке вашей интеграции или запроса для установления нужных настроек необходимо написать на почту [alfa_api@alfabank.ru](mailto:alfa_api@alfabank.ru). При запросе установления настроек необходимо сообщить способ защиты (подпись или подпись с шифрованием), а также алгоритм (RSA или ГОСТ).
---
### Параметры запроса
#### HEADERS
| Атрибут | Тип | Обязательность | Описание |
| :----------------------------- | :----- | :------------- | :------------------------------------------------------------------------------------------------------------------------------------------ |
| **Authorization** | string | required | Bearer {access_token} |
| **Accept** | string | required | application/xml |
| **Content-Type** | string | required | application/xml |
| **X-Request-ChannelSecurity** | string | optional | Тип защиты канала для запроса. Значения: `NO` — без защиты; `SIGNATURE` — проверка подписи; `ENCRYPTION` — дешифрование и проверка подписи. |
| **X-Response-ChannelSecurity** | string | optional | Тип защиты канала для ответа. Значения: `NO` — без защиты; `SIGNATURE` — подписание ответа; `ENCRYPTION` — подписание и шифрование. |
#### BODY
| Атрибут | Тип | Обязательность | Описание |
| :------------- | :----- | :------------- | :-------------------------------- |
| (тело запроса) | string | required | Тело подписи в виде base64-строки |
#### Пример запроса
```bash
curl -X POST https://sandbox.alfabank.ru/api/signature-encryption-tests/xml \
-H 'Authorization: Bearer {access-token}' \
-H 'Accept: application/xml' \
-H 'Content-Type: application/xml' \
-H 'X-Request-ChannelSecurity: SIGNATURE' \
-H 'X-Response-ChannelSecurity: SIGNATURE' \
-d 'eyJraWQiOiI2MTAwMDM4YWFhYTAxZTRkN2YzOTM5OGQ4NDAwMDEwMDAzOGFhYSIsInR5cCI6IkpXVCIsImFsZyI6IlJTMjU2In0.eyJjb3VudCI6MTAwLCJzb21lRmllbGQiOiJzb21lVmFsdWUiLCJpZCI6IjNiNzk1YTBlLTFjOTctNDIxMi05YTI4LWYyODJkODAxNWI1YSIsImNyZWF0aW9uRGF0ZSI6IjIwMjItMDUtMThUMTA6Mjc6MDkuNzEyWiIsInN0YXR1cyI6ImFjdGl2ZSJ9.WYQKfllUHfs7IN0DdujjKlqpnThfJZgY_A6CZN-ghFohTYbDiRAJBAk4IxIkRfj2Hxcz4rR5DEKX8remdXEOHGrBpNf4okOob0bfIutNRhaeaZAIMFKjungALPRBmMhAiU0t5-Vp3ImUwhidSnSSP08gCHrTD1by5zYrzzYBB6tyikf8lNwYJQKRxscZcXqwOU9gAWBuV4rteClIbDCeTwkx5ci6WKWAq8bv7RDuwU_1KPjh6upJmwJ1g1epmvPdaFOQq5uf9NhAxomeeptmJoBOm3c8ZSYASYMno8KNWxr94B2xAhD7NCakfFCiQZjSH9b6MjM2aJEBhDyKYo2IGw'
```
---
### Параметры ответа
#### Успешный ответ (201 Created)
| Атрибут | Тип | Описание |
| :---------------------------- | :----- | :---------------------------------------------------------------- |
| **ds:Signature** | string | Корневой элемент XML Signature |
| **ds:SignedInfo** | string | Содержит информацию об алгоритме канонизации, подписи и дайджесте |
| **ds:CanonicalizationMethod** | string | Алгоритм канонизации (атрибут `Algorithm`) |
| **ds:SignatureMethod** | string | Алгоритм подписи (атрибут `Algorithm`) |
| **ds:DigestMethod** | string | Алгоритм дайджеста (атрибут `Algorithm`) |
| **ds:SignatureValue** | string | Значение тела подписи в кодировке base64 |
| **ds:KeyInfo** | string | Информация о ключах и сертификатах для проверки подписи |
| **ds:X509Data** | string | Информация о сертификатах |
| **ds:X509Certificate** | string | Сертификат, которым подписано тело, в base64 |
#### Пример ответа 201
```xml
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<XmlElementName2>XmlElementValue2</XmlElementName2>
<ds:Signature xmlns="http://www.w3.org/2000/09/xmldsig#" Id="sigID1">
<ds:SignatureValue>H6jGW+bKLwvQ9xxbhZ6jNYRHtupT4aJ4jjlLh4W8svK0w5G7ZXf4OxqRR0t2l6aYOpNBdN2Q0+2T
1LXyadtnz7XJ7QYXNXrnWNcq7mOxM5Lj5bBQa2JPZSiMkp1lsnAV/LFDAJ+Uhruj3mFQxjiFpJLR
W/vRJzmRv925xXWopb94PFvP9mjtAwPXtBGEL5rqJICabzVo8+1BfPwFF5+8sqYzT74mmJIQmeFm
FiYVMNive5lRxlt7nXEgS4iENF1dXq5+prCPloms8hIX6I4HQo3Jn+G37Os57nv8g61gk4jnu2OK
bOsZasIzXSLVG2GrCbDQ+HFjWs3Fgg4JOkULfw==
</ds:SignatureValue>
<ds:SignedInfo>
<ds:Reference URI="">
<ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#sha384">
</ds:DigestMethod>
<ds:DigestValue>xgVcc1UZhuWRp4/8K0OAVLuQUhySUtJg7mYo78Od+WWidnIZr2XZUvPqwxOpFwRY</ds:DigestValue>
<ds:Transforms>
<ds:Transform/>
<ds:Transform/>
</ds:Transforms>
</ds:Reference>
<ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256">
</ds:SignatureMethod>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
</ds:CanonicalizationMethod>
</ds:SignedInfo>
<ds:KeyInfo>
<ds:X509Data>
<ds:X509Certificate>MIIGATCCBLWgAwIBAgITYQADiqqgHk1/OTmNhAABAAOKqjBBBgkqhkiG9w0BAQowNKAPMA0GCWCG... (урезано для краткости)</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</ds:Signature>
<XmlElementName1>XmlElementValue1</XmlElementName1>
</Response>
```
---
### Ошибки
| Код | Описание | Возможные значения `Error` |
| :------ | :-------------------- | :------------------------------------------------------------ |
| **400** | Bad Request | `invalid_request` — неверные входные параметры |
| **401** | Unauthorized | `invalid_token` — токен просрочен, отозван или недействителен |
| **404** | Not Found | `unknown_endpoint` — эндпоинт не найден или неактивен |
| **500** | Internal Server Error | `internal_error` — внутренняя ошибка сервиса |
#### Пример ошибки 400
```xml
<?xml version="1.0" encoding="UTF-8"?>
<ErrorResponse>
<Error>invalid_request</Error>
<ErrorDescription>Authorization header is not present in request headers</ErrorDescription>
</ErrorResponse>
```
---
_Значения параметров ошибок могут изменяться. Рекомендуем предусмотреть стандартную обработку ошибок, не описанных в текущей версии документации._

View File

@@ -0,0 +1,32 @@
# Client ID
**B2B** **B2C** **H2H**
Тестовый `client_id` и доступный для использования `scope` будут отправлены на почту, указанную [при подписании договора](/products/alfa-api/documentation/articles/connection/articles/onboarding/onboarding), сразу после его подписания. Также тестовые учётные данные будут доступны [на Портале разработчика](/products/alfa-api/documentation/articles/selfservice/articles/intro/intro).
Для получения промышленного `client_id` необходимо [создать интеграцию в проме](/products/alfa-api/documentation/articles/selfservice/articles/prod/prod) на Портале разработчика. `client_id` будет указан в карточке интеграции.
У вас может быть несколько `client_id` в случаях, если:
- вы интегрируете Alfa API / Alfa ID в свой сервис, используя разные точки входа для пользователей-физических лиц и пользователей-юридических лиц;
- вы планируете предоставлять разные сервисы своим пользователям;
- вам требуется получение данных по своей организации, а также использование партнёрского сервиса (если есть прямая интеграция банка и ERP-системы пользователя и есть отдельная интеграция продукта пользователя с Alfa API / Alfa ID).
Для получения нескольких `client_id` вам необходимо запросить у сотрудников Банка отдельный `client_id` для каждой интеграции, а также учитывать наличие нескольких `client_id` при реализации интеграции.
---
### Навигация
[← Отзыв договора](/products/alfa-api/documentation/articles/connection/articles/revoke/revoke) | [TLS-сертификат →](/products/alfa-api/documentation/articles/connection/articles/tls/tls)
---
### Содержание раздела «Подключение к Alfa API»
- [Как подключить](/products/alfa-api/documentation/articles/connection/articles/instruction/instruction)
- [Подписание договора](/products/alfa-api/documentation/articles/connection/articles/onboarding/onboarding)
- [Отзыв договора](/products/alfa-api/documentation/articles/connection/articles/revoke/revoke)
- **Client ID** (текущая страница)
- [TLS-сертификат](/products/alfa-api/documentation/articles/connection/articles/tls/tls)
- [Client secret (POST)](/products/alfa-api/documentation/articles/connection/articles/clientsecret/clientsecret)

View File

@@ -0,0 +1,88 @@
# Client secret
**Типы интеграции:** `B2B` | `B2C` | `H2H`
**Метод:** `POST`
> [!IMPORTANT]
> **Внимание**
> Получить и заменить `client_secret` можно двумя способами:
>
> 1. С помощью кнопки в карточке интеграции на **Портале разработчика**.
> 2. С помощью описанного ниже API-метода.
---
## Эндпоинты
| Среда | URL |
| :------------ | :----------------------------------------------------------------------- |
| **Песочница** | `POST https://sandbox.alfabank.ru/oidc/clients/{clientId}/client-secret` |
| **Пром** | `POST https://baas.alfabank.ru/oidc/clients/{clientId}/client-secret` |
---
## Описание
`client_secret` представляет собой уникальную строку символов, которая генерируется один раз и не меняется в процессе работы. Достаточно получить его **один раз** и **не менять** в дальнейшем.
При необходимости вы можете использовать этот метод для замены `client_secret` или в случае его компрометации для получения нового.
Если оперативная замена `client_secret` невозможна, необходимо уведомить Банк о факте компрометации по адресу: [alfa_api@alfabank.ru](mailto:alfa_api@alfabank.ru).
---
## Параметры запроса
### HEADERS
| Атрибут | Тип | Обязательность | Описание |
| :--------- | :----- | :------------- | :----------------------------- |
| **Accept** | string | required | Должен быть `application/json` |
### PATH (Путь)
| Атрибут | Тип | Обязательность | Описание |
| :----------- | :----- | :------------- | :--------------------------------- |
| **clientId** | string | optional | Идентификатор партнёрского сервиса |
### Пример запроса (cURL)
```bash
curl --location --globoff --request POST 'https://baas.alfabank.ru/oidc/clients/{clientId}/client-secret' \
--header 'Accept: application/json'
```
---
## Параметры ответа
### Успешный ответ (200 OK)
| Атрибут | Тип | Описание |
| :--------------- | :----- | :---------------------------------------- |
| **clientId** | string | Идентификатор партнёрского сервиса |
| **clientSecret** | string | Новый секретный ключ партнёрского сервиса |
**Пример ответа:**
```json
{
"clientId": "0cee0683-85ae-49f2-a63d-29f97aad1911",
"clientSecret": "Qwerty1234567890Qwerty1234567890!"
}
```
---
## Коды ошибок
| Код | Описание | Возможные значения `error` |
| :------ | :------------- | :---------------------------------------------------------------------------------- |
| **400** | Bad Request | `invalid_request` — неверный формат запроса или отсутствуют обязательные параметры. |
| **401** | Unauthorized | `invalid_token` — ошибка авторизации. |
| **404** | Not Found | `unknown_endpoint` — эндпоинт не найден или неактивен. |
| **500** | Internal Error | `internal_error` — внутренняя ошибка сервиса. |
---
_Документация Alfa API_

View File

@@ -0,0 +1,78 @@
Вот очищенная и структурированная версия документа в формате Markdown.
---
# Подписание договора
**Теги:** `B2B` `B2C` `H2H`
Для подписания договора на информационно–технологическое взаимодействие посредством Alfa API необходимо выполнить следующие шаги:
### 1. Зайдите в Альфа-Бизнес
Зайдите в Альфа-Бизнес любым удобным для вас способом.
![image](/assets/developers-portal.docs.alfa-api/articles/connection/articles/onboarding/files/1.png)
Далее на странице второго фактора аутентификации введите полученный на телефон otp-ĸод (sms, push).
![image](/assets/developers-portal.docs.alfa-api/articles/connection/articles/onboarding/files/2.png)
Вы зашли в Альфа-Бизнес.
![image](/assets/developers-portal.docs.alfa-api/articles/connection/articles/onboarding/files/3.png)
---
### 2. Перейдите во «Все сервисы и продукты»
Перейдите на страницу **Все сервисы и продукты** и выберите **Alfa API** в разделе **Обслуживание бизнеса**.
![image](/assets/developers-portal.docs.alfa-api/articles/connection/articles/onboarding/files/4.png)
При отсутствии на странице пункта «Alfa API» отправьте письмо на почту [alfa_api@alfabank.ru](mailto:alfa_api@alfabank.ru).
---
### 3. Подключите Alfa API
На открывшемся лендинге нажмите на кнопку **Подключить Alfa API**.
![image](/assets/developers-portal.docs.alfa-api/articles/connection/articles/onboarding/files/5.png)
Выберите необходимую организацию (при наличии нескольких организаций).
![image](/assets/developers-portal.docs.alfa-api/articles/connection/articles/onboarding/files/6.png)
---
### 4. Подпишите договор
Внимательно ознакомьтесь с текстом договора. При необходимости введите e-mail для технических и для иных запросов. Нажмите на кнопку **Подписать**.
![image](/assets/developers-portal.docs.alfa-api/articles/connection/articles/onboarding/files/7.png)
Далее на странице введите полученный на телефон otp-ĸод (sms, push).
![image](/assets/developers-portal.docs.alfa-api/articles/connection/articles/onboarding/files/8.png)
Или подпишите договор при помощи усиленной квалифицированной электронной подписи (**УКЭП**). *Обратите внимание, что данный функционал доступен не всем пользователям.*
Вы успешно подключили Alfa API.
![image](/assets/developers-portal.docs.alfa-api/articles/connection/articles/onboarding/files/9.png)
---
### 5. Просмотрите подписанный договор
Для просмотра договора необходимо нажать в верхнем правом углу на наименование компании. В появившейся боковой панели выберите **Настройки**.
![image](/assets/developers-portal.docs.alfa-api/articles/connection/articles/onboarding/files/10.png)
Далее необходимо выбрать карточку **Управление согласиями**.
![image](/assets/developers-portal.docs.alfa-api/articles/connection/articles/onboarding/files/11.png)
В разделе **Alfa API** будет отображаться подписанный вами договор. Для просмотра нажмите **Прочитать согласие**.
![image](/assets/developers-portal.docs.alfa-api/articles/connection/articles/onboarding/files/12.png)
В открывшемся окне вы сможете прочитать договор и скачать его в формате **PDF**.
![image](/assets/developers-portal.docs.alfa-api/articles/connection/articles/onboarding/files/13.png)
---
### 6. Приступайте к тестированию Alfa API
После успешного подписания договора вы можете:
* Получить тестовые учётные данные [на Портале разработчика](/products/alfa-api/documentation/articles/sandbox/sandbox).
* Приступить к тестированию Alfa API [в Песочнице](/products/alfa-api/documentation/articles/sandbox/sandbox).
Для работы с Порталом вашему разработчику предварительно необходимо получить права на управление настройками Alfa API. Как их назначить, описано [на странице Права доступа](/products/alfa-api/documentation/articles/selfservice/articles/access-rights/access-rights).
---
**Навигация:**
← [Как подключить](/products/alfa-api/documentation/articles/connection/articles/instruction/instruction) | [Отзыв договора](/products/alfa-api/documentation/articles/connection/articles/revoke/revoke) →

View File

@@ -0,0 +1,55 @@
# Отзыв договора
**Теги:** `B2B` `B2C` `H2H`
Для отзыва договора на информационно–технологическое взаимодействие посредством Alfa API необходимо выполнить следующие шаги:
### 1. Зайдите в Альфа-Бизнес
Зайдите в [Альфа-Бизнес](https://link.alfabank.ru) любым удобным для вас способом.
![Скриншот входа](https://developers.alfabank.ru/assets/developers-portal.docs.alfa-api/articles/connection/articles/revoke/files/1.png)
Далее на странице второго фактора аутентификации введите полученный на телефон otp-ĸод (sms, push).
![Скриншот ввода кода](https://developers.alfabank.ru/assets/developers-portal.docs.alfa-api/articles/connection/articles/revoke/files/2.png)
Вы зашли в Альфа-Бизнес.
![Скриншот личного кабинета](https://developers.alfabank.ru/assets/developers-portal.docs.alfa-api/articles/connection/articles/revoke/files/3.png)
### 2. Перейдите в «Управление согласиями»
Нажмите в верхнем правом углу на наименование компании. В появившейся боковой панели выберите **Настройки**.
![Скриншот настроек](https://developers.alfabank.ru/assets/developers-portal.docs.alfa-api/articles/connection/articles/revoke/files/4.png)
Выберите карточку **Управление согласиями**.
![Скриншот управления согласиями](https://developers.alfabank.ru/assets/developers-portal.docs.alfa-api/articles/connection/articles/revoke/files/5.png)
### 3. Отзовите договор
В разделе **Alfa API** будет отображаться подписанный вами договор на информационно–технологическое взаимодействие посредством Alfa API. Для отзыва договора необходимо нажать на кнопку **Отозвать**.
![Скриншот раздела Alfa API](https://developers.alfabank.ru/assets/developers-portal.docs.alfa-api/articles/connection/articles/revoke/files/6.png)
Подтвердите своё намерение, нажав на кнопку **Да, расторгнуть**.
![Скриншот подтверждения](https://developers.alfabank.ru/assets/developers-portal.docs.alfa-api/articles/connection/articles/revoke/files/7.png)
### 4. Подпишите уведомление
Внимательно ознакомьтесь с текстом уведомления. Нажмите на кнопку **Подписать уведомление**.
![Скриншот уведомления](https://developers.alfabank.ru/assets/developers-portal.docs.alfa-api/articles/connection/articles/revoke/files/8.png)
Далее на странице введите полученный на телефон otp-ĸод (sms, push).
![Скриншот подтверждения кодом](https://developers.alfabank.ru/assets/developers-portal.docs.alfa-api/articles/connection/articles/revoke/files/9.png)
Договор отозван.
![Скриншот результата](https://developers.alfabank.ru/assets/developers-portal.docs.alfa-api/articles/connection/articles/revoke/files/10.png)
### 5. Просмотрите отозванный договор
Для просмотра отозванного договора необходимо выбрать вкладку **Отозванные согласия**.
![Скриншот архива согласий](https://developers.alfabank.ru/assets/developers-portal.docs.alfa-api/articles/connection/articles/revoke/files/11.png)
---
**Навигация:**
- ← [Подписание договора](/products/alfa-api/documentation/articles/connection/articles/onboarding/onboarding)
- → [Client ID](/products/alfa-api/documentation/articles/connection/articles/clientid/clientid)

View File

@@ -0,0 +1,26 @@
*Подключение к Alfa API / Как подключить*
`POST` `B2B` `B2C` `H2H`
# Как подключить
> ### Внимание
> Если вы ещё не являетесь клиентом Альфа-Банка, то для подключения к Alfa API вам необходимо открыть [счёт](https://alfabank.ru/sme/quick/docstariffs/), оформить [расчётно-кассовое обслуживание](https://alfabank.ru/sme/) и подключить [Альфа-Бизнес](https://alfabank.ru/corporate/rko/internet-bank/#form).
1. **Подпишите договор**
[Подпишите договор](https://developers.alfabank.ru/products/alfa-api/documentation/articles/connection/articles/onboarding/onboarding).
Комиссия за подключение и использование не взимается. Вопросы по заключению договора можно направлять на почту [alfa_api@alfabank.ru](https://developers.alfabank.rumailto:alfa_api@alfabank.ru).
2. **Проверьте тестовую интеграцию**
Получите тестовые учётные данные и настройте тестовую интеграцию [на Портале разработчика](https://developers.alfabank.ru/products/alfa-api/documentation/articles/selfservice/articles/test/test), реализуйте и протестируйте аутентификацию в Alfa ID и вызов методов Alfa API [в песочнице](https://developers.alfabank.ru/products/alfa-api/documentation/articles/sandbox/sandbox).
3. **Подготовьтесь к промышленной интеграции**
Создайте интеграцию в проме, выпустите TLS-сертификат и `client_secret` . Подробнее [в инструкции](https://developers.alfabank.ru/products/alfa-api/documentation/articles/selfservice/articles/prod/prod).
4. **Используйте Alfa API**
Если вы ещё не являетесь клиентом Альфа-Банка, то для подключения к Alfa API вам необходимо открыть [счёт](https://alfabank.ru/sme/quick/docstariffs/), оформить [расчётно-кассовое обслуживание](https://alfabank.ru/sme/) и подключить [Альфа-Бизнес](https://alfabank.ru/corporate/rko/internet-bank/#form).
---
[← Сертификаты для Linux](https://developers.alfabank.ru/products/alfa-api/documentation/articles/specification/articles/certificate/articles/linux/linux) [← Подписание договора](https://developers.alfabank.ru/products/alfa-api/documentation/articles/connection/articles/onboarding/onboarding)

View File

@@ -0,0 +1,154 @@
# TLS-сертификат
`B2B` `B2C` `H2H`
Взаимодействие между вами и Банком реализовано с использованием двухстороннего TLS-соединения (поддерживаемая версия TLS 1.2), для которого необходимо выпустить сертификат.
---
## Инструкция по выпуску сертификата
Для выпуска сертификата необходимо сгенерировать закрытый ключ и запрос на сертификат в OpenSSL, получить выпущенный сертификат и установить в своей системе:
### 1. Используйте готовый файл конфигурации
Воспользуйтесь заранее подготовленным конфигурационным файлом: [openssl_INNLE.cnf](/assets/developers-portal.docs.alfa-api/articles/connection/articles/tls/files/openssl_INNLE.cnf).
> **Внимание**
> Данный файл уже содержит все необходимые атрибуты и не требует внесения изменений. Все остальные параметры будут введены вручную через терминал в процессе генерации закрытого ключа и запроса на сертификат.
> **Важно**
> Если возникает ошибка `object identifier routines:OBJ_create:oid exists`, необходимо закомментировать строку с объявлением этого OID в начале файла: `INNLE=1.2.643.100.4`.
### 2. Сгенерируйте закрытый ключ
1. Откройте терминал и перейдите в папку с файлом. Если это «Загрузки»:
`cd ~/Downloads`
2. Убедитесь, что файл на месте командой `ls`.
3. Сгенерируйте закрытый ключ:
`openssl genrsa -des3 -out Company.key 2048`
4. Задайте пароль для ключа (**PEM pass phrase**) и запомните его.
5. В папке появится файл `Company.key`.
> **Рекомендация для Mac OS**
> Введите дважды пароль от вашего Mac OS, когда терминал запросит подтверждение действий.
### 3. Сгенерируйте запрос на сертификат (CSR)
1. Введите команду:
`openssl req -utf8 -config openssl_INNLE.cnf -key Company.key -new -sha256 -out Company.csr`
2. Атрибут `CLIENT_ID`, а также поля `An optional company name` и `A challenge password` являются опциональными (можно оставить пустыми).
3. Введите данные организации (название, ФИО, ИНН), когда терминал их запросит.
> **Рекомендации для заполнения полей**
> Поля `OrganizationName` и `CommonName` можно заполнять транслитом или кириллицей (UTF-8).
> **ИНН:** строго 10 цифр для ЮЛ и 12 цифр для ИП (без пробелов).
> Поля `CountryName` и `INNLE` формируют имя профиля в LDAP и должны быть точными.
### 4. Проверьте атрибуты в subject
Проверьте созданный запрос командой:
`openssl req -config openssl_INNLE.cnf -noout -text -in Company.csr`
**Пример корректного ответа:**
```text
Subject: C=RU, L=Moscow, O=Company Name, CN=Ivanov Ivan Ivanovich/emailAddress=example@company.ru/INNLE=01234567890/CLIENT_ID=b95e04ed-91fe-430a-a101-894f06f3ab2a
```
### 5. Отправьте запрос в Банк
Отправьте файл `Company.csr` на почту [alfa_api@alfabank.ru](mailto:alfa_api@alfabank.ru).
- **Тема:** «Запрос на сертификат».
- **Отправитель:** почта, указанная в Договоре.
- **Имя файла:** название организации на латинице.
- **В письме:** укажите e-mail для уведомлений об истечении срока сертификата.
> **Важно!** Никому и никогда не передавайте файл закрытого ключа (`.key`).
### 6. Получите сертификат
Банк пришлет сертификат с адреса `alfa_api@alfabank.ru`.
- **Срок действия:** 375 дней. По истечении нужно выпустить новый.
### 7. Сборка файла контейнера pfx
Для установки в систему соберите контейнер командой:
`openssl pkcs12 -export -out Company.pfx -inkey Company.key -in Company.cer -certfile keys\root_apica_2022.cer -certfile keys\sub_root_apica_2022.cer`
### 8. Действия при компрометации
Если закрытый ключ был украден или утерян, немедленно напишите на [alfa_api@alfabank.ru](mailto:alfa_api@alfabank.ru) для отзыва и перевыпуска.
---
## Требования к сертификату
### Global Subject (Обязательные поля)
| Атрибут | Значение |
| :------------------- | :--------------------------------- |
| **CountryName** | Код страны (ISO). Для России: `RU` |
| **OrganizationName** | Название организации |
| **CommonName** | ФИО представителя организации |
| **EmailAddress** | Служебный адрес для связи |
### Variable Subject (Зависит от формы собственности)
| Атрибут | Значение |
| :------------------------ | :------------------------------------ |
| Для ЮЛ в России | `INNLE = 1.2.643.100.4` |
| Для иностранных партнёров | `FOREIGNID = 1.3.6.1.4.1.16745.100.1` |
| Идентификатор сервиса | `CLIENT_ID = 1.3.6.1.4.1.16745.100.2` |
---
## Настройка UTF-8 для кириллицы
### Windows
1. **Панель управления** > **Часы и регион** > **Регион**.
2. Вкладка **Дополнительно** > **Изменить язык системы**.
3. Включите чекбокс: «Бета-версия: Использовать Юникод (UTF-8) для поддержки языка во всем мире».
4. Перезагрузите ПК.
### MacOS
1. Откройте **Терминал**.
2. В меню: **Terminal** > **Настройки**.
3. Вкладка **Кодировки**: убедитесь, что выбрана «Unicode (UTF-8)».
---
## Использование сертификата
Использование TLS-сертификата обязательно для установки mTLS-соединения. Пример запроса через **cURL**:
```bash
curl -X GET https://baas.alfabank.ru/api/endpoint \
-v --cert Company.cer \
--key Company.key \
-H 'Accept: application/json' \
-H 'Authorization: Bearer {access-token}' \
-H 'Content-Type: application/json'
```
---
## Повторный выпуск сертификата
За **1 месяц** до истечения срока вам придет уведомление. Необходимо сформировать новый запрос по инструкции выше.
> **Внимание**
> При перевыпуске рекомендуем:
>
> - Установить защиту на удаление закрытого ключа.
> - Перезаписать старый закрытый ключ на новый.
_В случае утери сертификата или несвоевременного обновления, ответственность за простой API возлагается на сторону клиента._
---
← [Client ID](/products/alfa-api/documentation/articles/connection/articles/clientid/clientid) | [Client secret](/products/alfa-api/documentation/articles/connection/articles/clientsecret/clientsecret) →

View File

@@ -0,0 +1,57 @@
# Права доступа
По умолчанию доступ к Порталу разработчика имеет только руководитель вашей организации.
Для предоставления доступа к Порталу разработчика другим пользователям руководителю необходимо в **Альфа-Бизнес** создать роль с правами на управление настройками Alfa API и присвоить её пользователю.
> **Внимание**
> В случае если у вас ИП, права разработчика можно назначить:
>
> - от имени самого индивидуального предпринимателя с ролью «Руководитель»;
> - от имени любого другого сотрудника ИП с ролью «Руководитель». В таком случае потребуется подтверждение назначения от владельца ИП. Подробнее в инструкции ниже.
---
## Инструкция по настройке прав
### Шаг 1. Перейдите в раздел «Пользователи и роли»
1. На главном экране Альфа-Бизнес перейдите в настройки компании.
2. В разделе **Моя компания** выберите карточку **Пользователи и роли**.
### Шаг 2. Создайте новую роль
> **Внимание:** Если ранее вы уже создавали роль с правами на управление Alfa API, этот шаг можно пропустить.
1. Нажмите **Создать роль**.
2. Укажите название роли.
3. Настройте права: новую роль рекомендуется создавать на основании прав руководителя, сбросив лишнее.
4. Нажмите **Снять все**, чтобы сбросить текущие права.
5. В разделе **Обслуживание бизнеса** выберите **Alfa API** и укажите необходимые полномочия.
6. При необходимости добавьте права из других разделов.
7. Нажмите **Создать роль** для сохранения.
### Шаг 3. Назначьте роль разработчику
> **Примечание:** Если пользователь еще не подключен к компании, нажмите «Подключить пользователя», заполните данные и выберите созданную роль.
1. В разделе **Пользователи** нажмите на три точки справа от нужного сотрудника.
2. Выберите **Сменить роль**.
3. В открывшейся форме выберите созданную роль и нажмите **Сменить**.
4. Подтвердите смену роли кодом из СМС.
- _Для ИП:_ Если роль назначает не сам владелец, будет создано заявление, которое владелец должен подписать в своем личном кабинете.
5. После успешного назначения статус пользователя изменится на **Подключён**.
---
## Требования к полномочиям для корректной авторизации
Для корректной работы H2H-интеграций ключ доступа (`access_token` / `API Key`) должен получать пользователь, у которого есть полномочия на использование выбранных сервисов и продуктов.
### Особенности способов авторизации:
- **При использовании ACF H2H:** Авторизацию в Alfa ID должен проходить пользователь, у которого в Альфа-Бизнес настроены соответствующие полномочия на использование выбранных `scopes`. Если вы хотите использовать учетные данные разработчика, руководитель должен выдать ему соответствующие права в разделе «Пользователи и роли».
- **При использовании авторизации по API Key:** Выпускать ключ должен пользователь, имеющий права на выбранные продукты. Если у пользователя нет прав (например, на просмотр выписок), то выпущенный им `API Key` не будет работать для этого сервиса.
**Пример:**
Если вы выдали разработчику права на _редактирование интеграций_, но не дали прав на _просмотр выписки_, то созданный им `API Key` для сервиса выписок (`transactions`) работать не будет. Ключ должен выпускать либо руководитель, либо сотрудник с полным доступом к нужным данным.

View File

@@ -0,0 +1,81 @@
# Управление API Key
Портал разработчика позволяет управлять `API Key` – ключами доступа для упрощённой авторизации запросов в H2H-интеграциях. Подробнее о ключе и доступных по нему сервисах [на странице API Key](/products/alfa-api/documentation/articles/api-key/api-key).
Для настройки авторизации с помощью `API Key` вам необходимо выпустить ключ для H2H-интеграции, скопировать его и вручную добавить в свои рабочие инструменты. Значение ключа передаётся в заголовке: `Authorization: ApiKey {API Key}`:
### Пример запроса с использованием API Key
```bash
curl -X GET https://baas.alfabank.ru/api/endpoint \
-H 'Authorization: ApiKey akytnps_YfSpCMb0_Uat5NX4p3c7A50hf27Qapk7nXYQ81h659tSwKml87xA5IhpBXXnpKSVypV60dI2l_2918090335' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json'
```
---
## Выпуск API Key для прома
Перед выпуском `API Key` для промышленной H2H-интеграции рекомендуется сначала пройти описанные ниже шаги для тестовой H2H-интеграции в рабочей среде «Песочница» и протестировать ключ, и только после этого приступать к выпуску ключа для промышленной H2H-интеграции.
> **Важно**
> Выпускать `API Key` необходимо пользователю, у которого в Альфа-Бизнес настроены соответствующие полномочия на использование выбранных при выпуске ключа продуктов и сервисов. Если у пользователя отсутствуют эти полномочия, руководителю организации необходимо выдать их пользователю в Альфа-Бизнес (в разделе **Профиль** – **Пользователи и роли**) или выпустить ключ самому.
### Шаг 1. Нажмите "Выпустить API Key"
Нажмите **Выпустить ключ** в правой части карточки H2H-интеграции.
![image](/assets/developers-portal.docs.alfa-api/articles/selfservice/articles/api-key/files/issue_1.png)
### Шаг 2. Заполните данные для API Key
Укажите IP-адреса, с которых будут отправляться запросы с использованием `API Key`. Отправка запросов с использованием `API Key` будет доступна только с указанных IP-адресов.
Для одного API Key вы можете указать не более 20 IP-адресов.
![image](/assets/developers-portal.docs.alfa-api/articles/selfservice/articles/api-key/files/issue_2.png)
Укажите сервисы и продукты, доступ к которым вы хотите получать с помощью `API Key`. Вам будут доступны сервисы и продукты из набора `scopes` редактируемой H2H-интеграции, доступ к которым возможен с помощью `API Key`.
![image](/assets/developers-portal.docs.alfa-api/articles/selfservice/articles/api-key/files/issue_3.png)
Далее проверьте и сохраните внесённые изменения.
### Шаг 3. Скопируйте и сохраните API Key
После завершения выпуска `API Key` вы получите уведомление. Скопируйте его и вручную добавьте в ваши рабочие инструменты так, чтобы при отправке запросов по H2H-интеграции в запросах передавался заголовок `Authorization: ApiKey {API Key}`.
![image](/assets/developers-portal.docs.alfa-api/articles/selfservice/articles/api-key/files/issue_4.png)
**Срок действия:** Срок действия `API Key` неограничен, но ключ будет автоматически отозван, если с момента последнего запроса прошло более **30 дней**.
В случае потери данных либо компрометации ключа вы можете перевыпустить его. Также вы всегда можете отозвать `API Key`, если больше не хотите использовать упрощённый способ авторизации.
---
## Перевыпуск API Key
### Шаг 1. Нажмите "Перевыпустить API Key"
Нажмите на три точки в правом верхнем углу карточки H2H-интеграции и выберите **Перевыпустить API Key**.
![image](/assets/developers-portal.docs.alfa-api/articles/selfservice/articles/api-key/files/reissue_1.png)
### Шаг 2. Отредактируйте данные для API Key
При необходимости отредактируйте данные для `API Key`.
![image](/assets/developers-portal.docs.alfa-api/articles/selfservice/articles/api-key/files/reissue_2.png)
Далее проверьте внесённые изменения и нажмите «Перевыпустить».
### Шаг 3. Скопируйте и сохраните API Key
После перевыпуска `API Key` вы получите уведомление. Вам будет необходимо скопировать его и заменить в ваших рабочих инструментах. При перевыпуске `API Key` старый ключ, привязанный к этой интеграции, будет автоматически отозван.
Срок действия `API Key` неограничен, но ключ будет автоматически отозван, если с момента последнего запроса прошло более 30 дней.
![image](/assets/developers-portal.docs.alfa-api/articles/selfservice/articles/api-key/files/reissue_3.png)
---
## Отзыв API Key
Для отзыва ключа доступа нажмите на три точки в правом верхнем углу карточки интеграции, выберите **Отозвать API Key** и подтвердите свои действия.
![image](/assets/developers-portal.docs.alfa-api/articles/selfservice/articles/api-key/files/revoke_1.png)
![image](/assets/developers-portal.docs.alfa-api/articles/selfservice/articles/api-key/files/revoke_2.png)
В результате отзыва ключа упрощённая авторизация будет недоступна. При необходимости вы всегда можете выпустить новый `API Key`.

View File

@@ -0,0 +1,85 @@
# Создание интеграции в проме
**Метки:** `β-ТЕСТ` `B2B` `B2C` `H2H`
После успешного тестирования продуктов и сервисов в песочнице вам станет доступно создание интеграций в проме.
## Создание промышленной интеграции
### Шаг 1. Нажмите «Создать интеграцию»
> **Внимание**
> Одновременно у вас может быть не более 5 промышленных интеграций.
Нажмите **Создать интеграцию** в степпере или в списке интеграций, находясь в рабочей среде «Пром» (для выбора рабочей среды используйте переключатель в правом верхнем углу Портала разработчика).
**Важно!** В случае если вы работаете в режиме группы компаний, перед созданием новой интеграции необходимо перейти в профиль пользователя и выбрать компанию, для которой вы хотите создать интеграцию.
![image](/assets/developers-portal.docs.alfa-api/articles/selfservice/articles/prod/files/1.png)
---
### Шаг 2. Выберите тип интеграции
![image](/assets/developers-portal.docs.alfa-api/articles/selfservice/articles/prod/files/2.png)
---
### Шаг 3. Заполните основную информацию
Укажите название интеграции (рекомендуется использовать то же название, что и у соответствующей тестовой интеграции), `redirect_uri` и тип клиентов (выбор типа клиентов доступен только для партнёрских интеграций).
В одной интеграции вы можете указать не более 20 `redirect_uri`.
![image](/assets/developers-portal.docs.alfa-api/articles/selfservice/articles/prod/files/3.png)
---
### Шаг 4. Выберите сервисы и продукты
> **Важно**
> Вам будут доступны сервисы и продукты, по которым при тестировании было выполнено не менее одного успешного запроса в песочнице.
![image](/assets/developers-portal.docs.alfa-api/articles/selfservice/articles/prod/files/4.png)
---
### Шаг 5. Завершите создание промышленной интеграции
Проверьте параметры интеграции перед её сохранением.
Для создания интеграции потребуется некоторое время. После завершения создания промышленной интеграции вы получите уведомление:
![image](/assets/developers-portal.docs.alfa-api/articles/selfservice/articles/prod/files/5.png)
---
### Шаг 6. Разблокируйте промышленную интеграцию
После создания интеграция отображается в статусе **«Заблокирована»**.
Для разблокирования интеграции создайте запрос на TLS-сертификат и отправьте его на почту [alfa_api@alfabank.ru](mailto:alfa_api@alfabank.ru). Подробнее [на странице TLS-сертификат](/products/alfa-api/documentation/articles/connection/articles/tls/tls).
Если вы уже выпускали сертификат, повторно выпускать его не нужно. Вместо этого необходимо сообщить о готовности к промышленной интеграции на почту [alfa_api@alfabank.ru](mailto:alfa_api@alfabank.ru). После этого интеграция будет разблокирована и перейдёт в статус **«Новая»**.
---
### Шаг 7. Активируйте промышленную интеграцию
Чтобы активировать интеграцию, необходимо получить `client_secret`. Для этого нажмите на иконку в карточке интеграции:
![image](/assets/developers-portal.docs.alfa-api/articles/selfservice/articles/prod/files/6.png)
Скопируйте `client_secret` и добавьте его в ваши рабочие инструменты. Получить его можно также с помощью [метода](/products/alfa-api/documentation/articles/connection/articles/clientsecret/clientsecret).
![image](/assets/developers-portal.docs.alfa-api/articles/selfservice/articles/prod/files/7.png)
После того как вы получите `client_secret`, интеграция перейдет в статус **«Активна»** и будет доступна к использованию в промышленной среде.
---
## Подключение новых продуктов к текущей промышленной интеграции
Для подключения новых продуктов и сервисов к промышленной интеграции сначала добавьте новые `scopes` в режиме редактирования тестовой интеграции и протестируйте их в песочнице.
После успешного тестирования отредактируйте промышленную интеграцию, добавив новые `scopes`. После этого новые продукты или сервисы будут доступны в промышленной среде.

View File

@@ -0,0 +1,55 @@
# Тестирование
**Метки:** `β-ТЕСТ` `B2B` `B2C` `H2H`
Перед созданием первой промышленной интеграции или подключением новых продуктов и сервисов к текущей промышленной интеграции необходимо проверить работу интеграций в песочнице.
При входе на Портал разработчика вы увидите две тестовые интеграции: одна для тестирования партнёрской интеграции, другая — для тестирования H2H-интеграции. В зависимости от ваших целей вы редактируете нужную интеграцию в рабочей среде «Песочница» и тестируете её.
---
### Шаг 1. Настройте тестовую интеграцию
Для редактирования тестовой интеграции нажмите на три точки в правом верхнем углу карточки и выберите **Редактировать интеграцию**.
![Редактирование интеграции](/assets/developers-portal.docs.alfa-api/articles/selfservice/articles/test/files/1.png)
1. **Вкладка «Информация»**:
- При необходимости отредактируйте название интеграции.
- Укажите необходимые `redirect_uri` для переадресации пользователя после авторизации через Alfa ID.
- _Пример redirect_uri:_ [https://romashka.ru](https://romashka.ru).
- **Важно:** В одной интеграции вы можете указать не более 20 `redirect_uri`.
![Настройка информации](/assets/developers-portal.docs.alfa-api/articles/selfservice/articles/test/files/2.png)
2. **Вкладка «Scopes»**:
- Выберите продукты и сервисы, которые вы хотите подключить в Alfa API.
- Если вы не нашли нужные `scopes`, напишите на почту [alfa_api@alfabank.ru](mailto:alfa_api@alfabank.ru).
![Выбор Scopes](/assets/developers-portal.docs.alfa-api/articles/selfservice/articles/test/files/3.png)
3. **Сохранение**:
- После завершения редактирования тестовой интеграции необходимо сохранить внесённые изменения.
![Сохранение изменений](/assets/developers-portal.docs.alfa-api/articles/selfservice/articles/test/files/4.png)
---
### Шаг 2. Протестируйте интеграцию
Выполните запросы по выбранным `scopes` в тестовой среде в соответствии с [инструкцией по тестированию](/products/alfa-api/documentation/articles/sandbox/sandbox), используя учётные данные тестовой интеграции.
После успешного тестирования в песочнице вам станет доступно создание промышленной интеграции со `scopes`, по которым было выполнено не менее одного успешного запроса в песочнице.
---
### Дополнительная информация
Вы можете использовать текущие интеграции в песочнице для тестирования новых сервисов и продуктов, добавляя новые `scopes` в режиме редактирования тестовой интеграции. После успешного тестирования в песочнице вы сможете добавить новые `scopes` в промышленную интеграцию и использовать их в своих сервисах.
---
**Навигация:**
- [← Права доступа](/products/alfa-api/documentation/articles/selfservice/articles/access-rights/access-rights)
- [Создание интеграции в проме →](/products/alfa-api/documentation/articles/selfservice/articles/prod/prod)

View File

@@ -0,0 +1,64 @@
# Для чего нужен Портал разработчика
**Портал разработчика** предназначен для управления интеграциями Alfa API. С помощью него вы можете создавать новые и редактировать текущие интеграции, подключать новые продукты и сервисы, а также активировать упрощённую авторизацию запросов с помощью API Key.
Портал разработчика станет доступен после того, как вы [подключите Alfa API](/products/alfa-api/documentation/articles/connection/articles/onboarding/onboarding).
> **Внимание**
> Для работы с порталом вашему разработчику необходимо получить права на управление интеграциями Alfa API. Как их назначить, описано [в статье Права доступа](/products/alfa-api/documentation/articles/selfservice/articles/access-rights/access-rights).
---
## Запуск первой промышленной интеграции
1. **Войдите на Портал разработчика**
Вход осуществляется через Портал документации по кнопке **Войти** и возможен только под учётной записью сотрудника организации, подключённой к Alfa API.
![Интерфейс входа](/assets/developers-portal.docs.alfa-api/articles/selfservice/articles/intro/files/enter.png)
2. **Проверьте тестовую интеграцию**
[Как настроить интеграцию в песочнице и протестировать её](/products/alfa-api/documentation/articles/selfservice/articles/test/test)
3. **Создайте интеграцию в проме**
[Как создать промышленную интеграцию](/products/alfa-api/documentation/articles/selfservice/articles/prod/prod)
4. **Выпустите промышленный TLS-сертификат**
[Как выпустить TLS-сертификат](/products/alfa-api/documentation/articles/connection/articles/tls/tls)
5. **Используйте промышленную интеграцию в своих сервисах**
При необходимости вы можете подключать новые продукты и сервисы к текущей интеграции и создавать новые интеграции на Портале разработчика. Также вы можете настроить упрощённую авторизацию по H2H-интеграциям с помощью [API Key](/products/alfa-api/documentation/articles/selfservice/articles/api-key/api-key).
---
## Выбор рабочей среды
На Портале разработчика предусмотрены две рабочие среды:
- **«Песочница»** — для редактирования тестовых интеграций.
- **«Пром»** — для управления промышленными интеграциями.
Выбор рабочей среды осуществляется с помощью переключателя в правом верхнем углу портала.
![Выбор среды](/assets/developers-portal.docs.alfa-api/articles/selfservice/articles/intro/files/mode.png)
---
## Работа с группой компаний
Пользователи с доступом к интеграциям нескольких компаний могут работать в двух режимах: группы компаний или одной выбранной компании. Это позволяет работать с интеграциями всех доступных компаний в едином окне.
### Как переключить режим:
1. Перейдите в профиль пользователя в правом верхнем углу Портала разработчика.
![Профиль пользователя](/assets/developers-portal.docs.alfa-api/articles/selfservice/articles/intro/files/profile.png)
2. Выберите режим отображения компаний:
- Карточка **Все компании** — чтобы работать с интеграциями всех компаний одновременно. В этом режиме доступна единая таблица со всеми интеграциями.
- Карточка **конкретной компании** — чтобы работать только с интеграциями выбранной организации.
![Выбор компании](/assets/developers-portal.docs.alfa-api/articles/selfservice/articles/intro/files/holding.png)
![Единая таблица](/assets/developers-portal.docs.alfa-api/articles/selfservice/articles/intro/files/expanded-view.png)
---
**Далее:** [Права доступа](/products/alfa-api/documentation/articles/selfservice/articles/access-rights/access-rights) | [Client secret](/products/alfa-api/documentation/articles/connection/articles/clientsecret/clientsecret)

View File

@@ -0,0 +1,109 @@
# Шифрование JSON ГОСТ-сертификатом
Способ защиты данных определяется настройками интеграции. Для уточнения информации по настройке вашей интеграции или запроса для установления нужных настроек необходимо написать на почту [alfa_api@alfabank.ru](mailto:alfa_api@alfabank.ru). При запросе установления настроек необходимо сообщить способ защиты (подпись или подпись с шифрованием), а также алгоритм (RSA или ГОСТ).
> [!IMPORTANT]
> **Внимание**
> Для шифрования и подписания сообщения необходимо предварительно загрузить сертификат, используя следующий [метод](/products/alfa-api/documentation/articles/signature-encryption/articles/managing-certificates/articles/post-certificates/post-certificates). Если вы уже загружали сертификат, используя данный метод — повторно выполнять эту операцию не нужно.
---
## Подпись и шифрование JSON
### 1. Подготовить сообщение в формате JSON
**Пример сообщения:**
```json
{
"sub": "1234567890",
"name": "John Doe",
"admin": true,
"iat": 1657882689,
"exp": 1657886289
}
```
### 2. Подписать запрос
Тело запроса сформировать алгоритмом **ГОСТ Р 34.10-2012 256 бит** в виде компактной сериализации в соответствии с [JSON Web Signature](https://www.rfc-editor.org/rfc/rfc7515#section-3.1) и подписать тело запроса закрытым ключом сертификата.
**Формат JWS:**
`BASE64URL(UTF8(JWS Protected Header)) || '.' || BASE64URL(JWS Payload) || '.' || BASE64URL(JWS Signature)`
**Структура тела запроса (Header):**
- `"alg": "GOST3410_2012_256"`
- `"typ": "JWT"`
- `"cty": "JWS"`
- `"kid": "серийный номер сертификата"`
- `"b64": true`
**Пример JWS:**
```text
ewogICJhbGciIDogIkdPU1QzNDEwXzIwMTJfMjU2IiwKICAidHlwIiA6ICJKV1QiLAogICJjdHkiIDogIkpXUyIsCiAgImtpZCIgOiAiNmQzOGI4ZTAwNjFiMGY5YTk0ZjEwNGJlNTdlNzdhYTE4IiwKICAiYjY0IiA6IHRydWUKfQ.eyJkZWJpdFR1cm5vdmVyIjp7ImFtb3VudCI6MCwiY3VycmVuY3lOYW1lIjoiUlVSIn19.ByCkNenTTtZQrnZplNOo9WyqPTxb6vFq0iExNHpuPCV6LUeXDFTe8tNBZCy1WvpdUCQBrKK447s3NJCC5hNLhA
```
Для тестовой проверки можно использовать [https://token.dev/](https://token.dev/).
### 3. Зашифровать запрос
Зашифруйте полученный на шаге два JWS-контейнер алгоритмом **ГОСТ 34.12.2015** (блочный шифр с длиной блока n = 64 бит «Магма») открытым ключом сертификата Альфа-Банка, чтобы получился **PKCS7-контейнер**, и передайте его в теле запроса. Для получения сертификата напишите на почту [alfa_api@alfabank.ru](mailto:alfa_api@alfabank.ru).
**Информация об используемых стандартах ТК 26:**
- **Алгоритм экспорта ключей KExp15** на основе симметричного блочного шифра "Магма". OID: `1.2.643.7.1.1.7.1.1`
- **Алгоритм шифрования послания "Магма"** в режиме гаммирования CTR с механизмом преобразования ключа ACPKM с вычислением имитовставки. OID: `1.2.643.7.1.1.5.1.2`
**Пример PKCS7:**
```text
MIITdQYJKoZIhvcNAQcDoIITZjCCE2ICAQAxggIAMIIB/AIBADCCASIwggELMRgwFgYFKoUDZAESDTEwMjc3MDAwNjczMjgxGjAYBggqhQMDgQMBARIMMDA3NzI4MTY4OTcxMQswCQYDVQQGEwJSVTEYMBYGA1UECAwPNzcg0JzQvtGB0LrQstCwMRUwEwYDVQQHDAzQnNC+0YHQutCy0LAxKjAoBgNVBAkMIdCj0LsuINCa0LDQu9Cw0L3Rh9C10LLRgdC60LDRjyAyNzEPMA0GA1UECwwG0KPQmNCRMSEwHwYDVQQKDBjQkNCeINCQ0JvQrNCk0JAt0JHQkNCd0JoxNTAzBgNVBAMMLNCi0JXQodCiINCj0KYgMi4wINCQ0J4gItCQ0JvQrNCk0JAt0JHQkNCd0JoiAhEG04uOAGGw+alPEEvlfneqGDAXBgkqhQMHAQEHAQEwCgYIKoUDBwEBBgEEgbcwgbQEKLyfbBL4H33ZmcqKiO1B85UCDlnD2qk05vlU+4dEg34KWZLsLQv05MYwZjAfBggqhQMHAQEBATATBgcqhQMCAiQABggqhQMHAQECAgNDAARAMyQte/ak3j94OBDlA+o+CC/y4VldsMsFTA0z9zqXFR5LFLmyVop7VDJkzeXwk/BM+YIXwbWG0GnbebS3ZjuP/wQgKo8O42NksPcsAGvRWKaYYtk3RQfL9zrMZwdBtDroNjIwghE8BgkqhkiG9w0BBwEwGwYJKoUDBwEBBQECMA4EDJzOZEVIxIU3bLczkICCERA02+pMp1hYBL6KVvGmWD7NOqN0kOF5lrhPg+4Jwk2hbQiod2WFOmK0jOf3wUwF549eNMCRP5Clkz61K9b4p8CEFuodPJ65fetCUi7t1+EmSNwzBKRNzB8gNM4M12KIIJbCGpDAxyWHWe98ZgqDgCe7d/u8Lh5lqKrfrXrwHwqi+Ivdqe5ubpU37jZr1QvoWdyLocdBBoz3musKUDfuwM+tFoEydK9gK86knMXsD7ZJ3LJngy4ztGGdjBRjbF+Pg+RmR1UhCnDLEtCiJnMNN75735pXpFAgLVcUo2oexLRGh8Jw3Uh9+UthY2tRt11/e6iyrkGPmrMlcHd1poj/XC0bsIP6+kNwHMxITO2lkEKIL3B3CRZlNKMPx4dfnLt4u+cMCm+qyLqtXilxSDZp0yETzHy76ee+UdXr0kb3eGPcBidHPNpeb2EqjAE8UCuwmVfOpznl4kioEUNfCcrnPZDqHQTpNs35lQlQocyWPQOugP0OB6BC5/9kXKf5VPHcIMLeWzvor3cuac+nBaRNB4PzvwiAdBvwKp4asbvZak/MPf8I23gpdXGVtMajbUzJUlGd6Bz+G6Kz4vpUUW8IoVwXL/vPU+3N1jKbNyGvrPFrdaIoUJHu+9B92/LlmOpcxF5GssrM9MsC9e6cEl4Cq82QQn3w7AJCdHMDzgANk04cmNKDTl5DPL2YNjcmirXaVXKzO7W4Oa4PIyKAaR811tT9kKAxsJvAWODjM1wdDMSCUlK1C1DHfJdZneXY61sbbpYQoHGuC/Uo+5Z1xdLTYjjVMY5mJ/444zdWGY0Aa2BiS+vd28hx/uSlg0T93eLpJcuWvT5B5aDuBrSFPpMRCeC/VCpwfSbAAekVHGjMb1B/ABLLgbPGnTLH5RCJOUiImihn7LPhlGSop705d9TSwvItP4XO3xebqd0vpr0YvTXy8VRTzSI8UGAs+lzoGbDnqYdPYND5XR+P0vpPA3m5Yd2kBCJJoU9Z8Clzw5+Q/6X3bsa/aLmT4V3L5TZWX169gIip77EqtLUPEGEFHVUE+rmBWKcx6IBDazEsxJ4OAHkRZq7Ls6k5g3P30fwhHmXaTWGTIjRr78LHFPN15MbTthakEoAD4sMnXCmOnZtSskGyNY1U1C1Al0REql4U2dpUDebNcmTqAqwv6rPLCCA69brcXQ8ZFbyuWq39Fz4oN6OulVNNtQ6lhuTOyPCRiEIRWdW5bIROuWs1BD9M/xZOzCIJxuA/t5xusCk1BYx1D4e6cqiwpbPSAJZMDnWlNu1WT1QPEk55ihbTYGwfUmP4SUIJL8DWJvZgs7aD1ZZq5LxjZoghem8TlpwB+dlZ96geD1T6qez0DFSSL6NJkjFGkH1WYYZcTtomUrwg4yqjDlWbZOzSPAWcKwd1vkEruViOOH892FbxRUMC9EXRg4fTaRIfcgtfEO3fGAeB6fJv1pZMdNdLUOOHViuAZrhNDgBnWblqlIbl6HMmiWCoW7JryN2WXl/L1RybXO9QALAaNCmyN0zk+baqXz2ipne3CFkohucv1T++iC+SwQ+iNoxb3DfkRdBQfXPbdY75od4+g0YPN68XW3nAze1NT8kZw7Z5/bs+ZStilJTCfKx9VZaeHF+N7k4J9ll683UYp64gtxVcNx/1MQYkf6hgesh0YRtcf35HBUAilaF+1EStQHdN6tlfaB9rNwAehoHIegset/NeWBekVpo3DKLKX0qf3+J1qBr2q3nYKdApYJwgLRCtR46b865tu8puZAPLTqCk0gp0ay52kHsYxGPAeTyQsygMCQxGjcHsHJEJCEa+NvPNkBsYfick9PKe4gFJPyDiaM4yPPk6YE755Ow8OByHbSE6c4scL1CtinWIQWZJMdtN+77au7nyDwfVvIrQehnT0gWAiTZJcwsJjxpnhdhAsGkm7j1VeT4yCAAX0OvV55LVmGVVBINAJObCsybLuKA0MIPeLH4BPa/aMBGM/XigYPFVbW01PQheuWMTkGF1ru2gc2aqGKbiFY2XSbJ3u14fPUiTpLzV9bdyi15XDpVe9T4b6ioEAHzOjsTlMpwvQZOgyKw8KAyiJ1H+S8DzNlTrbzmpJyVYw8iiLceXepHMToFLnCnmey244g2dOKmMKHZT+xyMjSgiKQ8bNI7hIPhymjeQxxmYfwmfmXxSXX5bfjDuKo7Upt0GnbfKRUGKpJnm0bsK084Lxxy4XBrFQt0aNPTfAyhEylqhkctdpteIMM7gdWwQZrLhrKxJdFaU5HK0aFaIMfE4ANSC93Grpz31NgWlTKd1ZeTbnbP3vRE9wS6N+i/xI6Vmn0v928h/DPMDoiWkCx11+Ey1fAnR3inBTmVnM3j9+SIuo1tNaX2Xq4zoHXTMr5yaY9pvPPMCYrCLxX8J28bUmqR/cA5b+ot4fWyQDh0ascRk2wB2PptjcjQjxWED4vRWj/2oDNMx1lCuwPmagXAYWbDUql4LyknJUZGjePhP+7mDX6AtTtX+70jltAUlC5orD8L+IDKeRU2y+lCvdV8OfrE892XiFfOvPd6t+Pal0a0ML/Kbp7ZH642L5I73RyTFzAv06UPybwdpvEa8rssicVd3sjI5BJnJ2x3Jkl7QcSUqkk28Werjl0+/5F6C+xlJOgZ2tEX4SyiNxfVGd7dn0jsFzAzrfVqFp5tJ3f6IZ3hG4MetoQS2R3PXfETAoHz4qUE0XJ95OTxY9DCmDXtR5ce/5BC0EaJLnAexxwe+TC/kMjqUZTCKla3hhfZCG0ylGc4u8d6MtijTzkKZNiC9ww5q4T392uzltL4jp/YiHGNSvQMtgfjOeFKtNWHGMWJ/8hjYqTG5jEPWNnYwCNmxCW9Ut7jZPAnKomRiO4+cIEavgKiyiYqTBGHMDV6PZ5SvKOTATr3swLHBzSgqoczp992fWocAD9MSc+CK5oULQs2oduBWFJ5zQRuRGpjxqTjh64m1w0Ci2imHX9AY30ccpNjp/g5znWUexmioupdnZGMchy2RnFNMpflGrTGiyXgqsSSykwCLqB56pF/Qqg1v3Eq0NCWt9VKkFIi27SXfPW/jXTBs/r1EkZu2C8DqaTynjWmlo3L1yTrs1ZyXTDSiuQCzLKPEJoYHVIboZ8za1C6oVEnluh7b4rn5DLAgTgHcU2oZbu2qVePSCZwXj6tz9d74dU8DBbowTn33443YAC04VeSA8A+jsT4YKMdhCK8AkTQSAEtUjBj3Mb++T3XKEVth639oEfZ6mioIcjQ8ePu2|... (длинная строка сокращена)
```
### 4. Выполнить запрос
- Если добавить заголовки `Content-Type: application/json` + `X-Request-ChannelSecurity: NO` и отправить запрос, то запрос **не будет** расшифрован и подпись запроса не будет проверяться.
- Если добавить заголовки `Content-Type: application/jose` + `X-Request-ChannelSecurity: ENCRYPTION` и отправить запрос, то запрос **будет** расшифрован и подпись будет проверяться.
Банк дешифрует запрос и проверяет подпись. Если подпись валидна — запрос обрабатывается, если невалидна — Банк определяет запрос как неподлинный и возвращает ошибку. Ошибка также будет подписана и зашифрована. Любые другие комбинации заголовков приведут к ошибке.
---
## Дешифрование и проверка подписи JSON
### 1. Дешифровать ответ
- При заголовках `Accept: application/json` + `X-Response-ChannelSecurity: NO` ответ **не будет** подписан и зашифрован.
- При заголовках `Accept: application/jose` + `X-Response-ChannelSecurity: ENCRYPTION` ответ (включая ошибки) **будет** подписан и зашифрован.
Полученный ответ будет в виде PKCS7-контейнера. Расшифруйте его с использованием вашего закрытого ключа. Используются те же стандарты ТК 26 (Магма, OID: `1.2.643.7.1.1.7.1.1` и `1.2.643.7.1.1.5.1.2`).
### 2. Обработать дешифрованный ответ
Полученный ответ будет представлен в виде компактной сериализации JWS (три части через точку): `Base64URL(Header)`, `Base64URL(Payload)`, `Base64URL(Signature)`.
**Пример декодированного JWS:**
| Закодированный | Раскодированный |
| :------------------------- | :------------------------------------------------------------------------------------------------------------------------------ |
| `ewogICJhbGciIDog...` | **Header:** `{"alg": "GOST3410_2012_256", "typ": "JWT", "cty": "JWS", "kid": "6d38b8e0061b0f9a94f104be57e77aa18", "b64": true}` |
| `eyJkZWJpdFR1cm5vdmVyI...` | **Payload:** `{"debitTurnover": {"amount": 0, "currencyName": "RUR"}}` |
### 3. Проверить подпись ответа от Банка
Используйте открытый ключ сертификата Банка для проверки подписи. Для получения сертификата напишите на [alfa_api@alfabank.ru](mailto:alfa_api@alfabank.ru). В поле `kid` заголовка JWS будет указан серийный номер сертификата Банка.
### 4. Обработать ответ в формате JSON
**Пример итогового ответа:**
```json
{
"debitTurnover": {
"amount": 0,
"currencyName": "RUR"
}
}
```

View File

@@ -0,0 +1,147 @@
# Шифрование JSON RSA-сертификатом
**Метки:** `B2B` `B2C` `H2H`
Способ защиты данных определяется настройками интеграции. Для уточнения информации по настройке Вашей интеграции или запроса для установления нужных настроек необходимо написать на почту [alfa_api@alfabank.ru](mailto:alfa_api@alfabank.ru). При запросе установления настроек необходимо сообщить способ защиты (подпись или подпись с шифрованием), а также алгоритм (RSA или ГОСТ).
> [!IMPORTANT]
> **Внимание**
> Для шифрования сообщения необходимо предварительно выпустить сертификат в УЦ Альфа-Банка, используя сервис [«Электронная подпись»](/products/alfa-api/documentation/articles/signature/signature). Если Вы уже выпускали сертификат — повторно выпускать не нужно.
---
## Подписание и шифрование JSON
### 1. Подготовить сообщение в формате JSON
**Пример сообщения:**
```json
{
"sub": "1234567890",
"name": "John Doe",
"admin": true,
"iat": 1657882689,
"exp": 1657886289
}
```
### 2. Подписать запрос
Тело запроса сформировать алгоритмом **RS256** в виде компактной сериализации в соответствии с [JSON Web Signature](https://www.rfc-editor.org/rfc/rfc7515#section-3.1) и подписать тело запроса закрытым ключом сертификата.
**Формат JWS:**
`BASE64URL(UTF8(JWS Protected Header)) || '.' || BASE64URL(JWS Payload) || '.' || BASE64URL(JWS Signature)`
**Структура тела запроса:**
- **Заголовок (Header):**
- `"kid"`: "серийный номер сертификата"
- `"typ"`: "JWT"
- `"alg"`: "RS256"
- **JSON-документ (Payload)**
- **Подпись запроса (Signature)**
**Пример JWS:**
`eyJhbGciOiJSUzI1NiIsImtpZCI6IjYxMDAwMzYzY2NiNzU5Y2I0NDg2MDc4NjVkMDAwMTAwMDM2M2NjIn0.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTY1Nzg4MjY4OSwiZXhwIjoxNjU3ODg2Mjg5fQ.ApKNzZ9kLMtBY3LzReSHQ7_AyDnzocGo9GTQFRmxTiRS7Lj7a55Kr4ziwZAmmwloF1063JJMOaU0lS947q6_hSct9pxzPdZ9tTmpIDGnQL-ks0oB7zz9vUSUd3G00UZXSYnuhI9BBRXvmmTaue5Y2j5zVZofLdO2dqPWCnsQULyLn_vYf8PeABhnAQ29z1Bq42uxfRFTM35cF40Tp4VBSqXDI1vxfleLusQlOZM-5Sk7O3Vy4Sf-UB03RrRGSBerZjdoMRh7dgEyoYAXS6c4MejCm2vmXKqSd7pu2V2TxOM9UTchkCS16DL-RIJtnfMjznmznU5SoMCpncvs6gRNeQ`
Для тестовой проверки можно использовать [https://token.dev/](https://token.dev/).
### 3. Зашифровать запрос
Преобразуйте полученный JWS-контейнер алгоритмом **RS256** в соответствии с [JSON Web Encryption](https://datatracker.ietf.org/doc/html/rfc7516) и зашифруйте [открытым ключом](/assets/developers-portal.docs.alfa-api/articles/signature-encryption/articles/encryption/articles/json-rsa/files/cert.cer) сертификата.
**Формат JWE:**
`BASE64URL(UTF8(JWE Protected Header)) || '.' || BASE64URL(JWE Encrypted Key) || '.' || BASE64URL(JWE Initialization Vector) || '.' || BASE64URL(JWE Ciphertext) || '.' || BASE64URL(JWE Authentication Tag)`
**Структура заголовка (Protected Header):**
- `"kid"`: "серийный номер сертификата"
- `"enc"`: "A256GCM"
- `"alg"`: "RSA-OAEP-256"
**Пример JWE:**
`eyJlbmiOiJBMjU2R0NNIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0.eFcY1Fv_xN6cFDNxnMoxCjEpVTmAjhrHuB2oW1hYapBXE02qOtdKrC3W7FGVjLFlgV3... (урезано для краткости) ...ZfAY-M8w-t9l9gErE1vQFg`
### 4. Выполнить запрос
Необходимо передать специфические HTTP-заголовки:
- **Без шифрования:**
`Content-Type: application/json` + `X-Request-ChannelSecurity: NO`
- **С шифрованием:**
`Content-Type: application/jose` + `X-Request-ChannelSecurity: ENCRYPTION`
Банк дешифрует запрос и проверяет подпись. Любые другие комбинации заголовков приведут к ошибке.
---
## Дешифрование и проверка подписи JSON
### 1. Дешифровать ответ
Для получения зашифрованного ответа используйте заголовки:
`Accept: application/jose` + `X-Response-ChannelSecurity: ENCRYPTION`
Необходимо дешифровать ответ с помощью вашего закрытого ключа.
**Структура JWE (компактная сериализация):**
1. **Protected Header** (не зашифровано)
2. **Encrypted Key** (зашифровано)
3. **Initialization Vector** (зашифровано)
4. **Ciphertext** (зашифровано)
5. **Authentication Tag** (зашифровано)
| Закодированный JWE (пример) | Раскодированный (Protected Header) |
| :------------------------------------------------------- | :-------------------------------------------- |
| `eyJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0...` | `{ "enc": "A256GCM", "alg": "RSA-OAEP-256" }` |
### 2. Обработать дешифрованный ответ
После дешифрования JWE вы получите компактную сериализацию **JWS**, состоящую из трех частей:
`Base64URL(Header) . Base64URL(Payload) . Base64URL(Signature)`
**Пример раскодированного JWS:**
- **Header:**
```json
{
"kid": "alfa-test-jwt",
"typ": "JWT",
"alg": "RS256"
}
```
- **Payload:**
```json
{
"debitTurnover": {
"amount": 0,
"currencyName": "RUR"
}
}
```
### 3. Проверить подпись ответа от Банка
Используйте [открытый ключ](/assets/developers-portal.docs.alfa-api/articles/signature-encryption/articles/encryption/articles/json-rsa/files/cert.cer) сертификата Банка для проверки подписи. Серийный номер сертификата Банка указан в поле `kid` заголовка JWS.
### 4. Обработать ответ в формате JSON
Итоговый результат:
```json
{
"debitTurnover": {
"amount": 0,
"currencyName": "RUR"
}
}
```
---
**Ссылки для навигации:**
- ← [Подписание TXT ГОСТ-сертификатом](/products/alfa-api/documentation/articles/signature-encryption/articles/signature/articles/text-gost/text-gost)
- → [Шифрование JSON ГОСТ-сертификатом](/products/alfa-api/documentation/articles/signature-encryption/articles/encryption/articles/json-gost/json-gost)

View File

@@ -0,0 +1,103 @@
# Получение сертификатов
**Теги:** `B2B` `B2C` `H2H`
## Эндпоинты
### Песочница
`GET https://sandbox.alfabank.ru/api/gd/v1/crypto-service/certificates`
### Пром
`GET https://baas.alfabank.ru/api/gd/v1/crypto-service/certificates`
---
## Описание
Метод позволяет получить информацию по всем сертификатам, выпущенным вне УЦ Альфа-Банка и далее загруженным с помощью метода [«Добавление нового сертификата»](/products/alfa-api/documentation/articles/signature-encryption/articles/managing-certificates/articles/post-certificates/post-certificates).
> **Внимание**
> Для получения сертификата, выпущенного через сервис [«Электронная подпись»](/products/alfa-api/documentation/articles/signature/signature), используйте метод [«Получение RSA-сертификата»](/products/alfa-api/documentation/articles/signature/articles/get-rsa/v2/get-rsa).
---
## Параметры запроса
### HEADERS
| Атрибут | Тип | Обяз. | Описание |
| :---------------- | :------- | :------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Authorization** | `string` | required | Bearer {access_token}, полученный по [Authorization Code Flow](/products/alfa-api/documentation/articles/alfa-id/articles/acf/articles/intro/intro) / [Authorization Code Flow H2H](/products/alfa-api/documentation/articles/alfa-id/articles/acf-h2h/articles/intro/intro) |
| **Accept** | `string` | required | `application/json` |
| **Content-Type** | `string` | optional | `application/json` |
### Пример запроса
```bash
curl -X GET https://baas.alfabank.ru/api/gd/v1/crypto-service/certificates \
-H 'Authorization: Bearer {access-token}' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json'
```
---
## Параметры ответа
### Успешный ответ (200 OK)
| Атрибут | Тип | Обяз. | Описание |
| :------------------- | :------------- | :------- | :--------------------------------------------------------------------------------------------------------- |
| **id** | `string(uuid)` | required | ID сертификата |
| **clientId** | `string(uuid)` | required | Идентификатор партнёрского сервиса |
| **ownerName** | `string` | required | Имя владельца |
| **fingerprint** | `string` | required | Отпечаток сертификата |
| **organizationName** | `string` | optional | Наименование организации |
| **beginDateTime** | `string` | required | Дата начала действия сертификата |
| **expireDateTime** | `string` | required | Дата окончания действия сертификата |
| **status** | `string` | optional | Статус. Возможные значения:<br>• `ACTIVE` - активен;<br>• `REVOKED` - аннулирован;<br>• `DELETED` - удалён |
| **certificateBody** | `string` | required | Тело сертификата в виде base64-строки |
| **type** | `string` | required | Тип сертификата. Возможные значения:<br>• `SIGNATURE` - для подписи;<br>• `ENCRYPTION` - для шифрования |
| **algorithm** | `string` | required | Алгоритм сертификата |
| **serialNumber** | `string` | required | Серийный номер сертификата |
### Пример ответа 200 (OK)
```json
[
{
"id": "9610bc6b-f06b-41b6-bae9-6bb5b06a54dd",
"clientId": "4aa56f35-abb1-4ebe-9697-389cca4a4475",
"ownerName": "Кудрявцев Ермолай Игоревич",
"fingerprint": "333773d77ef05aa9f7b7bae8e2779418b2aedb6a",
"organizationName": "ООО 'Ромашка'",
"beginDateTime": "2023-07-28T15:11:14Z",
"expireDateTime": "2025-06-19T11:48:06Z",
"status": "ACTIVE",
"certificateBody": "MIIGATCCBLWgAwIBAgITYQADiqqgHk1/OTmNhAABAAOKqjBBBgkqhkiG9w0BAQowNKAPMA0GCWCGSAFlAwQCAwUAoRwwGgYJKoZIhvcNAQEIMA0GCWCGSAFlAwQCAwUAogMCAUAwWzELMAkGA1UEBhMCUlUxEjAQBgNVBAoTCUFsZmEtQmFuazELMAkGA1UECxMCSVQxKzApBgNVBAMTIkFsZmEtQmFuayBJc3N1aW5nIFN1Ym9yZGluYXRlIENBIDEwHhcNMjMwNzI4MTUxMTE0WhcNMjUwNjE5MTE0ODA2WjCBpzEXMBUGA1UEKgwO0JXRgNC80L7Qu9Cw0LkxGzAZBgNVBAQMEtCa0YPQtNGA0Y/QstGG0LXQsjELMAkGA1UEBhMCUlUxOzA5BgNVBAMMMtCa0YPQtNGA0Y/QstGG0LXQsiDQldGA0LzQvtC70LDQuSDQmNCz0L7RgNC10LLQuNGHMSUwIwYJKoZIhvcNAQkBFhZVc2VyNTA0QHBvY2h0b2Noa2EuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ZM3Ztf+Ro4e64R8yI4qDV/zLdJjUCx5WNBx6gcp1pJ4uhQixw+ASy4Oxu0Xp7OxmpXtvDJFi4kr6QymtzMNYqJA3GZk85p+Iobkwo5zHKyBf0tX5HwmFWjJx9CqZKp8iZAFw9nqz1uqronxyzTgULPL6eE9igVSzaVf5msV8sXXfl87guVHF+Ph18hsdng1WiCJ7Mi14ETdI9O0R5eJiPZztLIHRnXuBtB1Oa1YiiWtvkZNnpLKONwxljdTZlH7h7KfaXUwW3kX8r0p7jvO7gNhMXvOSK1JPXWevmBHrjONVlG2atWoxT2IHs2ZDz+BLxgSwLc9NIQK+qKhIMfA1wIDAQABo4ICBzCCAgMwJQYDVR0RBB4wHIILZXhhbXBsZS5jb22CDSouZXhhbXBsZS5jb20wHQYDVR0OBBYEFGbczU3B6IZhHwKsC8ODg8r4xi3nMB8GA1UdIwQYMBaAFMkXMx6bqZSglhhLbnFMgdvpc/5lMIG7BgNVHR8EgbMwgbAwga2ggaqggaeGOWh0dHBzOi8vdGVzdGptYi5hbGZhYmFuay5ydS9kaXN0cnBvaW50L0FsZmEtQmFua19TQ0ExLmNybIYwaHR0cDovL3Zsa3dzNjo5MDgxL2Rpc3RycG9pbnQvQWxmYS1CYW5rX1NDQTEuY3JshjhodHRwOi8vdGVzdGptYi5hbGZhYmFuay5ydS9kaXN0cnBvaW50L0FsZmEtQmFua19TQ0ExLmNybDCB2wYIKwYBBQUHAQEEgc4wgcswRQYIKwYBBQUHMAKGOWh0dHBzOi8vdGVzdGptYi5hbGZhYmFuay5ydS9kaXN0cnBvaW50L0FsZmEtQmFua19TQ0ExLmNydDA8BggrBgEFBQcwAoYwaHR0cDovL3Zsa3dzNjo5MDgxL2Rpc3RycG9pbnQvQWxmYS1CYW5rX1NDQTEuY3J0MEQGCCsGAQUFBzAChjhodHRwOi8vdGVzdGptYi5hbGZhYmFuay5ydS9kaXN0cnBvaW50L0FsZmEtQmFua19TQ0ExLmNydDBBBgkqhkiG9w0BAQowNKAPMA0GCWCGSAFlAwQCAwUAoRwwGgYJKoZIhvcNAQEIMA0GCWCGSAFlAwQCAwUAogMCAUADggEBAHTjDmxldqWkRgpT5gXKuIzyqIHjlDZMMfahcWBxqWV9XC46bcPx8gvlpzb8N+oK+X6AqDt3+vneAiGQn8iNs9ajDKtes9ulZzMUJBwzwv26DsiI3s4/0phypAcqQVHJQxvU+rdrh5FgqJcNZsuOtOaJhiO/i/3J7hoL/oxVwSk+lX4m+X5u76/Vdqk9ydKXNNnzMi12F4FvD+igTrezzLjPHQRx5vLY0cWwLEdBxLJmBwd1u7EBT3j+v9Pyh0pTzXsJC0BY1BIt6VOh6QGKGTKT3cBB6zbIOrY7UTOkYdCqtyB9vhayAyti3aO37PANUQ7dUwUEZyf64/D4/HRlhqI=",
"type": "ENCRYPTION",
"algorithm": "RS256",
"serialNumber": "2163173489423972678179275487230070851350268586"
}
]
```
---
## Ошибки
| Код | Описание | Возможные значения `error` |
| :------ | :------------- | :------------------------------------------------------------------------- |
| **400** | Bad Request | `invalid_request` — неверные входные параметры запроса |
| **401** | Unauthorized | `invalid_token` — токен просрочен, отозван или недействителен |
| **403** | Forbidden | `insufficient_scope` — нет прав на использование сервиса (настройки scope) |
| **500** | Internal Error | `internal_error` — внутренняя ошибка сервиса |
_Значения параметров ошибок могут изменяться. Рекомендуем предусмотреть стандартную обработку ошибок._
---
**Навигация:**
[← Добавление нового сертификата](/products/alfa-api/documentation/articles/signature-encryption/articles/managing-certificates/articles/post-certificates/post-certificates) | [Обновление сертификата →](/products/alfa-api/documentation/articles/signature-encryption/articles/managing-certificates/articles/patch-certificates/patch-certificates)

View File

@@ -0,0 +1,131 @@
# Обновление сертификата
**Метки:** `B2B` | `B2C` | `H2H`
## Эндпоинты
| Окружение | Метод и URL |
| :------------ | :----------------------------------------------------------------------------- |
| **Песочница** | `PATCH https://sandbox.alfabank.ru/api/gd/v1/crypto-service/certificates/{id}` |
| **Пром** | `PATCH https://baas.alfabank.ru/api/gd/v1/crypto-service/certificates/{id}` |
## Описание
Метод позволяет отозвать или активировать ранее отозванный сертификат, выпущенный вне УЦ Альфа-Банка. Отозванный сертификат не может использоваться для криптографических операций.
---
## Параметры запроса
### HEADERS
| Атрибут | Тип | Описание |
| :---------------- | :------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Authorization** | `string` | **Required**. Bearer {access_token}, полученный по [Authorization Code Flow](/products/alfa-api/documentation/articles/alfa-id/articles/acf/articles/intro/intro) / [Authorization Code Flow H2H](/products/alfa-api/documentation/articles/alfa-id/articles/acf-h2h/articles/intro/intro) |
| **Accept** | `string` | **Required**. `application/json` |
| **Content-Type** | `string` | **Required**. `application/json` |
### PATH
| Атрибут | Тип | Описание |
| :------ | :------- | :--------------------------- |
| **id** | `string` | **Required**. ID сертификата |
### BODY
| Атрибут | Тип | Описание |
| :-------- | :------- | :----------------------------------------------------------------------------------------------------------------------------- |
| **op** | `string` | **Optional**. Тип операции. Возможные значения: `replace` — замена |
| **path** | `string` | **Optional**. Путь до изменяемого параметра. Возможные значения: `/status` |
| **value** | `string` | **Optional**. Новое значение. Возможные значения: <br>• `ACTIVE` — сертификат активен;<br>• `REVOKED` — сертификат аннулирован |
### Пример запроса
```bash
curl -X PATCH https://baas.alfabank.ru/api/gd/v1/crypto-service/certificates/{id} \
-H 'Authorization: Bearer {access-token}' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"op": "replace",
"path": "/status",
"value": "ACTIVE"
}'
```
---
## Параметры ответа
### Успешный ответ (200 OK)
| Атрибут | Тип | Описание |
| :------------------- | :------------- | :-------------------------------------------------------------------------- |
| **id** | `string(uuid)` | **Required**. ID сертификата |
| **clientId** | `string(uuid)` | **Required**. Идентификатор партнёрского сервиса |
| **ownerName** | `string` | **Required**. Имя владельца |
| **fingerprint** | `string` | **Required**. Отпечаток сертификата |
| **organizationName** | `string` | **Optional**. Наименование организации |
| **beginDateTime** | `string` | **Required**. Дата начала действия сертификата |
| **expireDateTime** | `string` | **Required**. Дата окончания действия сертификата |
| **status** | `string` | **Required**. Статус: `ACTIVE` (активен), `REVOKED` (аннулирован) |
| **certificateBody** | `string` | **Required**. Тело сертификата в виде base64-строки |
| **type** | `string` | **Required**. Тип: `SIGNATURE` (для подписи), `ENCRYPTION` (для шифрования) |
| **algorithm** | `string` | **Required**. Алгоритм сертификата |
| **serialNumber** | `string` | **Required**. Серийный номер сертификата |
#### Пример ответа 200
```json
{
"id": "9610bc6b-f06b-41b6-bae9-6bb5b06a54dd",
"clientId": "4aa56f35-abb1-4ebe-9697-389cca4a4475",
"ownerName": "Кудрявцев Ермолай Игоревич",
"fingerprint": "333773d77ef05aa9f7b7bae8e2779418b2aedb6a",
"organizationName": "ООО 'Ромашка'",
"beginDateTime": "2023-07-28T15:11:14Z",
"expireDateTime": "2025-06-19T11:48:06Z",
"status": "ACTIVE",
"certificateBody": "MIIGATCCBLWgAwIBAgITYQADiqqgHk1/OTmNhAABAAOKqjBB...",
"type": "ENCRYPTION",
"algorithm": "RS256",
"serialNumber": "2163173489423972678179275487230070851350268586"
}
```
---
## Ошибки
| Код | Описание | Код ошибки (`error`) |
| :------ | :------------- | :------------------------------------------------------------ |
| **400** | Bad Request | `invalid_request` — неверные входные параметры |
| **401** | Unauthorized | `invalid_token` — токен просрочен, отозван или недействителен |
| **403** | Forbidden | `insufficient_scope` — недостаточно прав для вызова сервиса |
| **500** | Internal Error | `internal_error` — внутренняя ошибка сервиса |
### Примеры сообщений об ошибках
**400 Bad Request**
```json
{
"error": "invalid_request",
"error_description": "Authorization header is not present in request headers"
}
```
**401 Unauthorized**
```json
{
"error": "invalid_token",
"error_description": "The access token provided is expired, revoked, malformed, or invalid for other reasons"
}
```
> **Важно:** Значения параметров ошибок могут изменяться. Рекомендуем предусмотреть стандартную обработку ошибок, не описанных в текущей версии документации.
---
_Документация Alfa API_

View File

@@ -0,0 +1,108 @@
# Добавление нового сертификата
**Теги:** `B2B` `B2C` `H2H`
## Эндпоинты
### Песочница
`POST https://sandbox.alfabank.ru/api/gd/v1/crypto-service/certificates`
### Пром
`POST https://baas.alfabank.ru/api/gd/v1/crypto-service/certificates`
## Описание
Метод позволяет загрузить сертификат, выпущенный вне УЦ Альфа-Банка, для проверки подписи запроса Банком и шифрования ответа от Банка.
---
## Параметры запроса
### HEADERS
| Атрибут | Тип | Обязательность | Описание |
| :---------------- | :----- | :------------- | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Authorization** | string | required | Bearer {access_token}, полученный по [Authorization Code Flow](/products/alfa-api/documentation/articles/alfa-id/articles/acf/articles/intro/intro) / [Authorization Code Flow H2H](/products/alfa-api/documentation/articles/alfa-id/articles/acf-h2h/articles/intro/intro) |
| **Accept** | string | required | `application/json` |
| **Content-Type** | string | required | `application/json` |
### BODY
| Атрибут | Тип | Обязательность | Описание |
| :------------------ | :----- | :------------- | :------------------------------------------------------------------------------------------------------- |
| **type** | string | required | Тип сертификата. Возможные значения:<br>• `SIGNATURE` — для подписи;<br>• `ENCRYPTION` — для шифрования. |
| **certificateBody** | string | required | Тело сертификата в виде base64-строки. |
### Пример запроса
```bash
curl -X POST https://baas.alfabank.ru/api/gd/v1/crypto-service/certificates \
-H 'Authorization: Bearer {access-token}' \
-H 'Accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"type": "ENCRYPTION",
"certificateBody": "MIIGATCCBLWgAwIBAgITYQADiqqgHk1/OTmNhAABAAOKqjBBBgkqhkiG9w0BAQowNKAPMA0GCWCGSAFlAwQCAwUAoRwwGgYJKoZIhvcNAQEIMA0GCWCGSAFlAwQCAwUAogMCAUAwWzELMAkGA1UEBhMCUlUxEjAQBgNVBAoTCUFsZmEtQmFuazELMAkGA1UECxMCSVQxKzApBgNVBAMTIkFsZmEtQmFuayBJc3N1aW5nIFN1Ym9yZGluYXRlIENBIDEwHhcNMjMwNzI4MTUxMTE0WhcNMjUwNjE5MTE0ODA2WjCBpzEXMBUGA1UEKgwO0JXRgNC80L7Qu9Cw0LkxGzAZBgNVBAQMEtCa0YPQtNGA0Y/QstGG0LXQsjELMAkGA1UEBhMCUlUxOzA5BgNVBAMMMtCa0YPQtNGA0Y/QstGG0LXQsiDQldGA0LzQvtC70LDQuSDQmNCz0L7RgNC10LLQuNGHMSUwIwYJKoZIhvcNAQkBFhZVc2VyNTA0QHBvY2h0b2Noa2EuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ZM3Ztf+Ro4e64R8yI4qDV/zLdJjUCx5WNBx6gcp1pJ4uhQixw+ASy4Oxu0Xp7OxmpXtvDJFi4kr6QymtzMNYqJA3GZk85p+Iobkwo5zHKyBf0tX5HwmFWjJx9CqZKp8iZAFw9nqz1uqronxyzTgULPL6eE9igVSzaVf5msV8sXXfl87guVHF+Ph18hsdng1WiCJ7Mi14ETdI9O0R5eJiPZztLIHRnXuBtB1Oa1YiiWtvkZNnpLKONwxljdTZlH7h7KfaXUwW3kX8r0p7jvO7gNhMXvOSK1JPXWevmBHrjONVlG2atWoxT2IHs2ZDz+BLxgSwLc9NIQK+qKhIMfA1wIDAQABo4ICBzCCAgMwJQYDVR0RBB4wHIILZXhhbXBsZS5jb22CDSouZXhhbXBsZS5jb20wHQYDVR0OBBYEFGbczU3B6IZhHwKsC8ODg8r4xi3nMB8GA1UdIwQYMBaAFMkXMx6bqZSglhhLbnFMgdvpc/5lMIG7BgNVHR8EgbMwgbAwga2ggaqggaeGOWh0dHBzOi8vdGVzdGptYi5hbGZhYmFuay5ydS9kaXN0cnBvaW50L0FsZmEtQmFua19TQ0ExLmNybIYwaHR0cDovL3Zsa3dzNjo5MDgxL2Rpc3RycG9pbnQvQWxmYS1CYW5rX1NDQTEuY3JshjhodHRwOi8vdGVzdGptYi5hbGZhYmFuay5ydS9kaXN0cnBvaW50L0FsZmEtQmFua19TQ0ExLmNybDCB2wYIKwYBBQUHAQEEgc4wgcswRQYIKwYBBQUHMAKGOWh0dHBzOi8vdGVzdGptYi5hbGZhYmFuay5ydS9kaXN0cnBvaW50L0FsZmEtQmFua19TQ0ExLmNydDA8BggrBgEFBQcwAoYwaHR0cDovL3Zsa3dzNjo5MDgxL2Rpc3RycG9pbnQvQWxmYS1CYW5rX1NDQTEuY3J0MEQGCCsGAQUFBzAChjhodHRwOi8vdGVzdGptYi5hbGZhYmFuay5ydS9kaXN0cnBvaW50L0FsZmEtQmFua19TQ0ExLmNydDBBBgkqhkiG9w0BAQowNKAPMA0GCWCGSAFlAwQCAwUAoRwwGgYJKoZIhvcNAQEIMA0GCWCGSAFlAwQCAwUAogMCAUADggEBAHTjDmxldqWkRgpT5gXKuIzyqIHjlDZMMfahcWBxqWV9XC46bcPx8gvlpzb8N+oK+X6AqDt3+vneAiGQn8iNs9ajDKtes9ulZzMUJBwzwv26DsiI3s4/0phypAcqQVHJQxvU+rdrh5FgqJcNZsuOtOaJhiO/i/3J7hoL/oxVwSk+lX4m+X5u76/Vdqk9ydKXNNnzMi12F4FvD+igTrezzLjPHQRx5vLY0cWwLEdBxLJmBwd1u7EBT3j+v9Pyh0pTzXsJC0BY1BIt6VOh6QGKGTKT3cBB6zbIOrY7UTOkYdCqtyB9vhayAyti3aO37PANUQ7dUwUEZyf64/D4/HRlhqI="
}'
```
---
## Параметры ответа
### Успешный ответ: 201 Created
| Атрибут | Тип | Обязательность | Описание |
| :------------------- | :----------- | :------------- | :---------------------------------------------------------------------- |
| **id** | string(uuid) | required | ID сертификата |
| **clientId** | string | required | Идентификатор партнёрского сервиса |
| **ownerName** | string | required | Имя владельца |
| **fingerprint** | string | required | Отпечаток сертификата |
| **organizationName** | string | optional | Наименование организации |
| **beginDateTime** | string | required | Дата начала действия сертификата |
| **expireDateTime** | string | required | Дата окончания действия сертификата |
| **status** | string | required | Статус: `ACTIVE` (активен), `REVOKED` (аннулирован), `DELETED` (удалён) |
| **certificateBody** | string | required | Тело сертификата в виде base64-строки |
| **type** | string | required | Тип сертификата (`SIGNATURE` или `ENCRYPTION`) |
| **algorithm** | string | required | Алгоритм сертификата |
| **serialNumber** | string | required | Серийный номер сертификата |
#### Пример ответа 201
```json
{
"id": "9610bc6b-f06b-41b6-bae9-6bb5b06a54dd",
"clientId": "4aa56f35-abb1-4ebe-9697-389cca4a4475",
"ownerName": "Кудрявцев Ермолай Игоревич",
"fingerprint": "333773d77ef05aa9f7b7bae8e2779418b2aedb6a",
"organizationName": "ООО 'Ромашка'",
"beginDateTime": "2023-07-28T15:11:14Z",
"expireDateTime": "2025-06-19T11:48:06Z",
"status": "ACTIVE",
"certificateBody": "MIIGATCCBLWgAwIBAgITYQADiqqgHk1/OTmNhAABAAOKqjBBBgkqhkiG9w0BAQowNKAPMA0GCWCGSAFlAwQCAwUAoRwwGgYJKoZIhvcNAQEIMA0GCWCGSAFlAwQCAwUAogMCAUAwWzELMAkGA1UEBhMCUlUxEjAQBgNVBAoTCUFsZmEtQmFuazELMAkGA1UECxMCSVQxKzApBgNVBAMTIkFsZmEtQmFuayBJc3N1aW5nIFN1Ym9yZGluYXRlIENBIDEwHhcNMjMwNzI4MTUxMTE0WhcNMjUwNjE5MTE0ODA2WjCBpzEXMBUGA1UEKgwO0JXRgNC80L7Qu9Cw0LkxGzAZBgNVBAQMEtCa0YPQtNGA0Y/QstGG0LXQsjELMAkGA1UEBhMCUlUxOzA5BgNVBAMMMtCa0YPQtNGA0Y/QstGG0LXQsiDQldGA0LzQvtC70LDQuSDQmNCz0L7RgNC10LLQuNGHMSUwIwYJKoZIhvcNAQkBFhZVc2VyNTA0QHBvY2h0b2Noa2EuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ZM3Ztf+Ro4e64R8yI4qDV/zLdJjUCx5WNBx6gcp1pJ4uhQixw+ASy4Oxu0Xp7OxmpXtvDJFi4kr6QymtzMNYqJA3GZk85p+Iobkwo5zHKyBf0tX5HwmFWjJx9CqZKp8iZAFw9nqz1uqronxyzTgULPL6eE9igVSzaVf5msV8sXXfl87guVHF+Ph18hsdng1WiCJ7Mi14ETdI9O0R5eJiPZztLIHRnXuBtB1Oa1YiiWtvkZNnpLKONwxljdTZlH7h7KfaXUwW3kX8r0p7jvO7gNhMXvOSK1JPXWevmBHrjONVlG2atWoxT2IHs2ZDz+BLxgSwLc9NIQK+qKhIMfA1wIDAQABo4ICBzCCAgMwJQYDVR0RBB4wHIILZXhhbXBsZS5jb22CDSouZXhhbXBsZS5jb20wHQYDVR0OBBYEFGbczU3B6IZhHwKsC8ODg8r4xi3nMB8GA1UdIwQYMBaAFMkXMx6bqZSglhhLbnFMgdvpc/5lMIG7BgNVHR8EgbMwgbAwga2ggaqggaeGOWh0dHBzOi8vdGVzdGptYi5hbGZhYmFuay5ydS9kaXN0cnBvaW50L0FsZmEtQmFua19TQ0ExLmNybIYwaHR0cDovL3Zsa3dzNjo5MDgxL2Rpc3RycG9pbnQvQWxmYS1CYW5rX1NDQTEuY3JshjhodHRwOi8vdGVzdGptYi5hbGZhYmFuay5ydS9kaXN0cnBvaW50L0FsZmEtQmFua19TQ0ExLmNybDCB2wYIKwYBBQUHAQEEgc4wgcswRQYIKwYBBQUHMAKGOWh0dHBzOi8vdGVzdGptYi5hbGZhYmFuay5ydS9kaXN0cnBvaW50L0FsZmEtQmFua19TQ0ExLmNydDA8BggrBgEFBQcwAoYwaHR0cDovL3Zsa3dzNjo5MDgxL2Rpc3RycG9pbnQvQWxmYS1CYW5rX1NDQTEuY3J0MEQGCCsGAQUFBzAChjhodHRwOi8vdGVzdGptYi5hbGZhYmFuay5ydS9kaXN0cnBvaW50L0FsZmEtQmFua19TQ0ExLmNybDBBBgkqhkiG9w0BAQowNKAPMA0GCWCGSAFlAwQCAwUAoRwwGgYJKoZIhvcNAQEIMA0GCWCGSAFlAwQCAwUAogMCAUADggEBAHTjDmxldqWkRgpT5gXKuIzyqIHjlDZMMfahcWBxqWV9XC46bcPx8gvlpzb8N+oK+X6AqDt3+vneAiGQn8iNs9ajDKtes9ulZzMUJBwzwv26DsiI3s4/0phypAcqQVHJQxvU+rdrh5FgqJcNZsuOtOaJhiO/i/3J7hoL/oxVwSk+lX4m+X5u76/Vdqk9ydKXNNnzMi12F4FvD+igTrezzLjPHQRx5vLY0cWwLEdBxLJmBwd1u7EBT3j+v9Pyh0pTzXsJC0BY1BIt6VOh6QGKGTKT3cBB6zbIOrY7UTOkYdCqtyB9vhayAyti3aO37PANUQ7dUwUEZyf64/D4/HRlhqI=",
"type": "ENCRYPTION",
"algorithm": "RS256",
"serialNumber": "2163173489423972678179275487230070851350268586"
}
```
---
## Ошибки
| Код | Описание | Код ошибки (в теле) |
| :------ | :-------------------- | :--------------------------------------------------------- |
| **400** | Bad Request | `invalid_request` — неверные входные параметры |
| **401** | Unauthorized | `invalid_token` — токен просрочен или недействителен |
| **403** | Forbidden | `insufficient_scope` — недостаточно прав (настройки scope) |
| **500** | Internal Server Error | `internal_error` — внутренняя ошибка сервиса |
> Значения параметров ошибок могут изменяться. Рекомендуем предусмотреть стандартную обработку ошибок, не описанных в текущей версии документации.
---
### Навигация
← [Для чего это нужно](/products/alfa-api/documentation/articles/signature-encryption/articles/intro/intro) | [Получение сертификатов](/products/alfa-api/documentation/articles/signature-encryption/articles/managing-certificates/articles/get-certificates/get-certificates) →

View File

@@ -0,0 +1,42 @@
# Для чего это нужно
**Теги:** `B2B` `B2C` `H2H`
Использование транспортной подписи и шифрования с использованием ГОСТ- или RSA-сертификата даёт следующие возможности:
### **Конфиденциальность**
Шифрование сообщений обеспечивает защиту данных от посторонних глаз. Это важно, так как в API могут передаваться конфиденциальные данные, такие как номера счетов или личная информация.
### **Безопасность**
Подписание сообщений подтверждает подлинность и целостность информации. Если сообщение было изменено или подделано, подпись становится недействительной.
### **Доверие**
Подписание и шифрование помогают укрепить доверие между сторонами API, поскольку они подтверждают, что данные не были изменены или подделаны во время передачи.
### **Соответствие требованиям**
В некоторых отраслях, таких как финансовые услуги, подписание и шифрование являются обязательными требованиями для соблюдения регуляторных норм и защиты данных.
### **Аутентификация**
Подписание сообщения может также использоваться для аутентификации источника данных, тем самым предотвращая фальсификацию или манипуляции с данными.
---
## Навигация по разделу
- ← [Загрузка файла](/products/alfa-api/documentation/articles/secure-file-transfer/articles/upload/v1/upload)
- → [Добавление нового сертификата](/products/alfa-api/documentation/articles/signature-encryption/articles/managing-certificates/articles/post-certificates/post-certificates)
---
### Справочная информация (из структуры документа)
Данная статья является частью раздела **Транспортная подпись и шифрование**. В этом разделе также доступны:
1. [Управление сертификатами для подписи и шифрования](/products/alfa-api/documentation/articles/signature-encryption/articles/managing-certificates/managing-certificates)
2. [Транспортная подпись](/products/alfa-api/documentation/articles/signature-encryption/articles/signature/signature)
3. [Шифрование](/products/alfa-api/documentation/articles/signature-encryption/articles/encryption/encryption)

View File

@@ -0,0 +1,105 @@
# Подписание JSON ГОСТ-сертификатом
**B2B | B2C | H2H**
Способ защиты данных определяется настройками интеграции. Для уточнения информации по настройке Вашей интеграции или запроса для установления нужных настроек необходимо написать на почту [alfa_api@alfabank.ru](mailto:alfa_api@alfabank.ru). При запросе установления настроек необходимо сообщить способ защиты (подпись или подпись с шифрованием), а также алгоритм (RSA или ГОСТ).
> **Внимание**
> Для подписания сообщения необходимо предварительно загрузить сертификат, используя следующий [метод](/products/alfa-api/documentation/articles/signature-encryption/articles/managing-certificates/articles/post-certificates/post-certificates). Если Вы уже загружали сертификат, используя данный метод — повторно выполнять эту операцию не нужно.
## Подписание JSON
### 1. Подготовить сообщение в формате JSON
**Пример сообщения:**
```json
{
"sub": "1234567890",
"name": "John Doe",
"admin": true,
"iat": 1657882689,
"exp": 1657886289
}
```
### 2. Подписать запрос
Тело запроса сформировать алгоритмом ГОСТ Р 34.10-2012 256 бит в виде компактной сериализации в соответствии с [JSON Web Signature](https://www.rfc-editor.org/rfc/rfc7515#section-3.1) и подписать тело запроса закрытым ключом сертификата.
**Формат JWS:**
`BASE64URL(UTF8(JWS Protected Header)) || '.' || BASE64URL(JWS Payload) || '.' || BASE64URL(JWS Signature)`
**Структура тела запроса:**
- **Заголовок (Header)**
- `"alg": "GOST3410_2012_256"`
- `"typ": "JWT"`
- `"cty": "JWS"`
- `"kid": "серийный номер сертификата"`
- `"b64": true`
- **JSON-документ (Payload)**
- **Подпись запроса (Signature)**
**Пример JWS:**
```text
ewogICJhbGciIDogIkdPU1QzNDEwXzIwMTJfMjU2IiwKICAidHlwIiA6ICJKV1QiLAogICJjdHkiIDogIkpXUyIsCiAgImtpZCIgOiAiNmQzOGI4ZTAwNjFiMGY5YTk0ZjEwNGJlNTdlNzdhYTE4IiwKICAiYjY0IiA6IHRydWUKfQ.eyJkZWJpdFR1cm5vdmVyIjp7ImFtb3VudCI6MCwiY3VycmVuY3lOYW1lIjoiUlVSIn19.ByCkNenTTtZQrnZplNOo9WyqPTxb6vFq0iExNHpuPCV6LUeXDFTe8tNBZCy1WvpdUCQBrKK447s3NJCC5hNLhA
```
Для тестовой проверки можно использовать [https://token.dev/](https://token.dev/).
### 3. Выполнить запрос
- Если добавить заголовки `Content-Type: application/json` + `X-Request-ChannelSecurity: NO` и отправить запрос, то подпись запроса не будет проверяться.
- Если добавить заголовки `Content-Type: application/jose` + `X-Request-ChannelSecurity: SIGNATURE` и отправить запрос, то подпись запроса будет проверяться.
- Если подпись валидна — запрос обрабатывается, если невалидна — Банк определяет запрос как неподлинный и возвращает ошибку.
Любые другие комбинации заголовков `Content-Type + X-Request-ChannelSecurity` приведут к ошибке.
---
## Проверка подписи JSON
### 1. Получить ответ
- Если добавить заголовки `Accept: application/json` + `X-Response-ChannelSecurity: NO`, то ответ не будет подписан.
- Если добавить заголовки `Accept: application/jose` + `X-Response-ChannelSecurity: SIGNATURE`, то полученный ответ (в том числе ошибки) будет подписан и представлен в виде компактной сериализации.
Любые другие комбинации заголовков `Accept + X-Response-ChannelSecurity` приведут к ошибке.
**Декодирование компактной сериализации JWS**
JWS формируется из трёх составляющих и представляет структуру вида:
1. Base64URL(Header);
2. Base64URL(Payload);
3. Base64URL(Signature).
**Пример JWS:**
| Закодированный | Раскодированный |
| :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `ewogICJhbGciIDogIkdPU1QzNDEwXzIwMTJfMjU2IiwKICAidHlwIiA6ICJKV1QiLAogICJjdHkiIDogIkpXUyIsCiAgImtpZCIgOiAiNmQzOGI4ZTAwNjFiMGY5YTk0ZjEwNGJlNTdlNzdhYTE4IiwKICAiYjY0IiA6IHRydWUKfQ.eyJkZWJpdFR1cm5vdmVyIjp7ImFtb3VudCI6MCwiY3VycmVuY3lOYW1lIjoiUlVSIn19.ByCkNenTTtZQrnZplNOo9WyqPTxb6vFq0iExNHpuPCV6LUeXDFTe8tNBZCy1WvpdUCQBrKK447s3NJCC5hNLhA` | **header** `json { "alg": "GOST3410_2012_256", "typ": "JWT", "cty": "JWS", "kid": "6d38b8e0061b0f9a94f104be57e77aa18", "b64": true } ` **payload** `json { "debitTurnover": { "amount": 0, "currencyName": "RUR" } } ` **verify signature** `text HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), ) ` |
### 2. Проверить подпись ответа от Банка
Используйте открытый ключ сертификата Банка для проверки подписи. Для получения сертификата напишите на почту [alfa_api@alfabank.ru](mailto:alfa_api@alfabank.ru).
Проверьте подпись в соответствии с данными, указанными в Заголовке (Header). В поле `kid` заголовка JWS будет записан серийный номер сертификата Банка.
### 3. Обработать ответ в формате JSON
**Пример ответа:**
```json
{
"debitTurnover": {
"amount": 0,
"currencyName": "RUR"
}
}
```
---
[← Подписание JSON RSA-сертификатом](/products/alfa-api/documentation/articles/signature-encryption/articles/signature/articles/json-rsa/json-rsa) | [Подписание XML RSA-сертификатом →](/products/alfa-api/documentation/articles/signature-encryption/articles/signature/articles/xml-rsa/xml-rsa)

View File

@@ -0,0 +1,104 @@
# Подписание JSON RSA-сертификатом
**B2B** | **B2C** | **H2H**
Способ защиты данных определяется настройками интеграции. Для уточнения информации по настройке Вашей интеграции или запроса для установления нужных настроек необходимо написать на почту [alfa_api@alfabank.ru](mailto:alfa_api@alfabank.ru). При запросе установления настроек необходимо сообщить способ защиты (подпись или подпись с шифрованием), а также алгоритм (RSA или ГОСТ).
> **Внимание**
> Для подписания сообщения необходимо предварительно выпустить сертификат в УЦ Альфа-Банка, используя сервис ["Электронная подпись"](/products/alfa-api/documentation/articles/signature/signature). Если Вы уже выпускали сертификат - повторно выпускать не нужно.
---
## Подписание JSON
### 1. Подготовить сообщение в формате JSON
**Пример сообщения**
```json
{
"sub": "1234567890",
"name": "John Doe",
"admin": true,
"iat": 1657882689,
"exp": 1657886289
}
```
### 2. Подписать запрос
Тело запроса сформировать алгоритмом **RS256** в виде компактной сериализации в соответствии с [JSON Web Signature](https://www.rfc-editor.org/rfc/rfc7515#section-3.1) и подписать тело запроса закрытым ключом сертификата, выпущенным в сервисе "Электронная подпись".
**Формат JWS**
`BASE64URL(UTF8(JWS Protected Header)) || '.' || BASE64URL(JWS Payload) || '.' || BASE64URL(JWS Signature)`
**Структура тела запроса**
- **Заголовок (Header)**
- `"kid"`: "серийный номер сертификата"
- `"typ"`: "JWT"
- `"alg"`: "RS256"
- **JSON-документ (Payload)**
- **Подпись запроса (Signature)**
**Пример JWS**
```text
eyJhbGciOiJSUzI1NiIsImtpZCI6IjYxMDAwMzYzY2NiNzU5Y2I0NDg2MDc4NjVkMDAwMTAwMDM2M2NjIn0.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTY1Nzg4MjY4OSwiZXhwIjoxNjU3ODg2Mjg5fQ.ApKNzZ9kLMtBY3LzReSHQ7_AyDnzocGo9GTQFRmxTiRS7Lj7a55Kr4ziwZAmmwloF1063JJMOaU0lS947q6_hSct9pxzPdZ9tTmpIDGnQL-ks0oB7zz9vUSUd3G00UZXSYnuhI9BBRXvmmTaue5Y2j5zVZofLdO2dqPWCnsQULyLn_vYf8PeABhnAQ29z1Bq42uxfRFTM35cF40Tp4VBSqXDI1vxfleLusQlOZM-5Sk7O3Vy4Sf-UB03RrRGSBerZjdoMRh7dgEyoYAXS6c4MejCm2vmXKqSd7pu2V2TxOM9UTchkCS16DL-RIJtnfMjznmznU5SoMCpncvs6gRNeQ
```
Для тестовой проверки можно использовать [https://token.dev/](https://token.dev/).
### 3. Выполнить запрос
- Если добавить заголовки `Content-Type: application/json` + `X-Request-ChannelSecurity: NO` и отправить запрос, то подпись запроса **не будет** проверяться.
- Если добавить заголовки `Content-Type: application/jose` + `X-Request-ChannelSecurity: SIGNATURE` и отправить запрос, то подпись запроса **будет** проверяться.
Если подпись валидна — запрос обрабатывается, если невалидна — Банк определяет запрос как неподлинный и возвращает ошибку. Любые другие комбинации заголовков `Content-Type + X-Request-ChannelSecurity` приведут к ошибке.
---
## Проверка подписи JSON
### 1. Получить ответ
- Если добавить заголовки `Accept: application/json` + `X-Response-ChannelSecurity: NO`, то ответ **не будет** подписан.
- Если добавить заголовки `Accept: application/jose` + `X-Response-ChannelSecurity: SIGNATURE`, то полученный ответ (в том числе ошибки) **будет подписан** и представлен в виде компактной сериализации.
Любые другие комбинации заголовков `Accept + X-Response-ChannelSecurity` приведут к ошибке.
**Декодирование компактной сериализации JWS**
JWS формируется из трёх составляющих:
- Base64URL(Header);
- Base64URL(Payload);
- Base64URL(Signature).
**Пример JWS**
| ЗАКОДИРОВАННЫЙ | РАСКОДИРОВАННЫЙ |
| :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `eyJraWQiOiJhbGZhLXRlc3Qtand0IiwidHlwIjoiSldUIiwiYWxnIjoiUlMyNTYifQ.`<br>`eyJkZWJpdFR1cm5vdmVyIjp7ImFtb3VudCI6MCwiY3VycmVuY3lOYW1lIjoiUlVSIn19.`<br>`Y1NqCkRjjtJ2GrVsW-a627g6ObfpEaKw-H92QVgVWqL9i7d1SHyaXVghF4ZNZAlrFasKySnKYZf2Ik8zVIlLN7hqeYxoeTdE2OLbiQdvPrD-JnI2Qzh0K32vcImwgGcpq2lt_QKx1f_YmaSRhH9O3xZePVcmFGCqhl_0prQSwcR4g-yuhidvspaF48QlUHcEaZ65Cr8hdyc6g9HPZDy7ipU-zCAZGgK0enxfWn4Osyqch8RRDIsfLG7OJ4wbYwYB22LYO5UaxX8Zy_R2jSnKlNghxQwSqJGxizMFhFhdCrATGTo-ysI-7OtfremD8YNj7z_iYciyYbtAgV0ZodEvMA` | **header**<br>`{"kid": "alfa-test-jwt", "typ": "JWT", "alg": "RS256"}`<br><br>**payload**<br>`{"debitTurnover": {"amount": 0, "currencyName": "RUR"}}`<br><br>**verify signature**<br>`RSASHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload))` |
### 2. Проверить подпись ответа от Банка
Используйте [открытый ключ](/assets/developers-portal.docs.alfa-api/articles/signature-encryption/articles/signature/articles/json-rsa/files/cert.cer) сертификата для проверки подписи.
Проверьте подпись в соответствии с данными, указанными в Заголовке (Header). В поле `kid` заголовка JWS будет записан серийный номер сертификата Банка.
### 3. Обработать ответ в формате JSON
**Пример ответа**
```json
{
"debitTurnover": {
"amount": 0,
"currencyName": "RUR"
}
}
```
---
**← [Обновление сертификата](/products/alfa-api/documentation/articles/signature-encryption/articles/managing-certificates/articles/patch-certificates/patch-certificates)** | **[Подписание JSON ГОСТ-сертификатом](/products/alfa-api/documentation/articles/signature-encryption/articles/signature/articles/json-gost/json-gost) →**

View File

@@ -0,0 +1,113 @@
# Получение списка номинальных счетов
**H2H**
## Эндпоинты
| Среда | Метод и URL |
| :------------ | :-------------------------------------------------------------- |
| **Песочница** | `GET https://sandbox.alfabank.ru/api/na/jp/v1/nominal-accounts` |
| **Пром** | `GET https://baas.alfabank.ru/api/na/jp/v1/nominal-accounts` |
## Scope
`beneficiaries`
## Описание
Метод позволяет получить список номинальных счетов, зарегистрированных в системе.
## Параметры запроса
### HEADERS
| Атрибут | Тип | Описание |
| :---------------- | :------------------ | :---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Authorization** | `string` (required) | Bearer {access_token}, полученный по [Authorization Code Flow H2H](/products/alfa-api/documentation/articles/alfa-id/articles/acf-h2h/articles/intro/intro) |
| **Accept** | `string` (required) | application/json |
### Пример запроса (cURL)
```bash
curl --location 'https://baas.alfabank.ru/api/na/jp/v1/nominal-accounts' \
--header 'Authorization: Bearer {access-token}' \
--header 'Accept: application/json'
```
---
## Параметры ответа
### 200 (OK)
#### Пример ответа
```json
[
{
"accountNumber": "40817810306050000000",
"isActive": true
}
]
```
#### Тело ответа (BODY)
| Атрибут | Тип | Описание |
| :---------------- | :------------------- | :------------------------------------------------------------------------------------------------------------- |
| **accountNumber** | `string` (required) | Номер номинального счёта |
| **isActive** | `boolean` (required) | Статус активности номинального счёта. Принимает значения:<br>• `true` — активен;<br>• `false` — деактивирован. |
---
### Ошибки
#### 400 (Bad Request)
| Атрибут | Тип | Описание |
| :-------------------- | :------------------ | :------------------------------------------------------------------------- |
| **error** | `string` (required) | Код ошибки. Значения:<br>• `invalid_request` — неверные параметры запроса. |
| **error_description** | `string` (optional) | Описание ошибки. |
#### 401 (Unauthorized)
| Атрибут | Тип | Описание |
| :-------------------- | :------------------ | :----------------------------------------------------------------------------------------------- |
| **error** | `string` (required) | Код ошибки. Значения:<br>• `invalid_token` — токен просрочен, отозван или имеет неверный формат. |
| **error_description** | `string` (optional) | Описание ошибки. |
#### 403 (Forbidden)
| Атрибут | Тип | Описание |
| :-------------------- | :------------------ | :--------------------------------------------------------------------------------------------------- |
| **error** | `string` (required) | Код ошибки. Значения:<br>• `insufficient_scope` — недостаточно прав (несоответствие настроек scope). |
| **error_description** | `string` (optional) | Описание ошибки. |
#### 404 (Not Found)
| Атрибут | Тип | Описание |
| :-------------------- | :------------------ | :-------------------------------------------------------------------------------- |
| **error** | `string` (required) | Код ошибки. Значения:<br>• `unknown_endpoint` — эндпоинт не найден или неактивен. |
| **error_description** | `string` (optional) | Описание ошибки. |
#### 429 (Too Many Requests)
_Нет тела ответа._
#### 500 (Internal Server Error)
| Атрибут | Тип | Описание |
| :-------------------- | :------------------ | :----------------------------------------------------------------------- |
| **error** | `string` (required) | Код ошибки. Значения:<br>• `internal_error` — внутренняя ошибка сервиса. |
| **error_description** | `string` (optional) | Описание ошибки. |
#### 503 (Service Unavailable)
_Нет тела ответа._
---
## Навигация
- ← [Как сформировать подпись](/products/alfa-api/documentation/articles/nominal-accounts/articles/signature/signature)
- → [Контрагенты: Как это работает](/products/alfa-api/documentation/articles/nominal-accounts/articles/counterparties/articles/intro/intro)

View File

@@ -0,0 +1,86 @@
Вот преобразованный контур документа в формате Markdown. Я сохранил структуру, технические подробности и примеры кода, очистив их от лишней разметки и служебных скриптов.
---
# Номинальные счета / Как зашифровать номер карты
**H2H**
## Как зашифровать номер карты
При проведении выплат по номеру карты в поле `pan` необходимо передавать токен номера карты. Для этого номер карты необходимо зашифровать с помощью алгоритма `RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING`.
### Примеры шифрования
#### Python с использованием Crypto.Cipher в PyCryptodome
```python
import sys
from Crypto.Hash import SHA256, SHA1
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP
from base64 import b64decode, b64encode
from Crypto.Signature import pss
pubkey = 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwj9k2lFfc/EE2zYdRoRLZF5B42V6n8OHKfxLBLMk/0qpP2ZEYYoCqgbD9xsmLbQMTCxQ8JWj/V08JGpFjuNKJ2hRfRzLUfjTm5ReZJVPDhJa4B0QtUEvCS2R4aMqMpnQ1a1aywGAJoM5ift0apCNGKuZZYrGuFkQXeBw85lSYYNwrVmNUm55RI+tcb'
msg = "4779642610000010"
keyDER = b64decode(pubkey)
keyPub = RSA.importKey(keyDER)
cipher = PKCS1_OAEP.new(keyPub, SHA256, mgfunc=lambda x,y: pss.MGF1(x,y, SHA1))
cipher_text = cipher.encrypt(msg.encode())
encodedCard = b64encode(cipher_text)
sys.stdout.buffer.write(encodedCard)
```
#### C# с использованием библиотеки Chilkat .NET for the 4.8.* Frameworks
```csharp
Chilkat.Rsa rsa = new Chilkat.Rsa();
Chilkat.PublicKey pubkey = new Chilkat.PublicKey();
pubkey.LoadFromFile("C://cardbankkey-sandbox.pub");
string cardNumber = "4779642610000010";
rsa.ImportPublicKeyObj(pubkey);
rsa.OaepPadding = true;
rsa.OaepHash = "sha256";
string encCard = rsa.EncryptStringENC(cardNumber, false);
Console.WriteLine(encCard);
```
#### Java с базовыми библиотеками crypto
```java
import lombok.SneakyThrows;
import ru.alfabank.csp.api.decryptor.properties.CryptoServiceProperties;
import javax.crypto.Cipher;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.PublicKey;
public class CryptoServiceImpl {
private KeyStore keyStore;
private CryptoServiceProperties properties;
private PublicKey getPublicKey() throws KeyStoreException {
return keyStore.getCertificate(properties.getAlias()).getPublicKey();
}
@SneakyThrows
public byte[] encrypt(byte[] data) {
var rsaCipher = Cipher.getInstance("RSA/ECB/OAEPWITHSHA-256ANDMGF1PADDING");
rsaCipher.init(Cipher.ENCRYPT_MODE, getPublicKey());
return rsaCipher.doFinal(data);
}
}
```
#### PHP
```php
public function createCypher(string $pan): FunctionResult {
$publicKey = PublicKeyLoader::load(file_get_contents($this->cardBankKey));
$algo = $publicKey->withPadding(RSA::ENCRYPTION_OAEP)->withHash('sha256')->withMGFHash('sha1');
return FunctionResult::success(base64_encode($algo->encrypt($pan)));
}
```
---
### Навигация
* ← [Введение](/products/alfa-api/documentation/articles/nominal-accounts/articles/intro/intro)
* → [Как сформировать подпись](/products/alfa-api/documentation/articles/nominal-accounts/articles/signature/signature)

View File

@@ -0,0 +1,50 @@
# Номинальные счета: Введение
**Метка документа:** `H2H`
> **Внимание**
> Для использования сервиса у вас должен быть открыт номинальный счёт в Альфа-Банке.
Сервис позволяет владельцам номинального счета совершать операции с денежными средствами, права на которые принадлежат другому лицу — бенефициару.
### Кому подойдёт сервис
- Финансовым и инвестиционным платформам;
- Маркетплейсам;
- Платформам, работающим с самозанятыми и фрилансерами;
- Для индивидуальных проектов, где требуется обеспечить безопасность проведения расчётов между участниками сделки.
### Как это работает
Владелец счёта добавляет сведения о бенефициарах номинального счёта и универсальных реципиентах — [раздел Контрагенты](/products/alfa-api/documentation/articles/nominal-accounts/articles/counterparties/articles/intro/intro), после чего может совершать операции с денежными средствами номинального счёта:
- Идентифицировать поступаемые на номинальный счёт денежные средства — раздел [Идентификация пополнений номинального счёта](/products/alfa-api/documentation/articles/nominal-accounts/articles/identify-transactions/articles/intro/intro).
- Осуществлять выплаты с номинального счёта удобным ему способом:
- [Безопасные сделки](/products/alfa-api/documentation/articles/nominal-accounts/articles/deals/articles/intro/intro): деньги перейдут получателю только после выполнения условий сделки.
- [Прямые выплаты](/products/alfa-api/documentation/articles/nominal-accounts/articles/na-payments/articles/intro/intro): выплаты без создания сделки – с биллингом (например, вывод средств бенефициара или уплата налога за исполнителя), или без биллинга (например, перевод зарегистрированному контрагенту).
> **Важно**
> Для работы с сервисом необходимо использовать электронную подпись. Допускается использование сертификата, выпущенного с помощью [сервиса Электронная подпись](/products/alfa-api/documentation/articles/signature/articles/intro/intro), или сертификата УКЭП, выпущенного в любом аккредитованном УЦ. Процесс формирования подписи описан [в статье Как сформировать подпись](/products/alfa-api/documentation/articles/nominal-accounts/articles/signature/signature).
### Термины и определения
**Номинальный счёт** — это специальный банковский счёт, открытый владельцем номинального счёта для совершения операций с денежными средствами, права на которые принадлежат другому лицу – бенефициару.
**Владелец номинального счёта (клиент банка)** — лицо, которое открыло номинальный счёт и имеет право распоряжаться денежными средствами, получать информацию о движении денежных средств и закрыть номинальный счёт.
**Бенефициар** — лицо, которому принадлежат права на денежные средства, находящиеся на номинальном счёте. У одного номинального счёта может быть как один, так и несколько бенефициаров, но каждый из них имеет права только на свою часть денежных средств.
**Универсальный реципиент** — лицо, которое не является бенефициаром и не имеет права на денежные средства, находящиеся на номинальном счёте. Может выступать только в качестве реципиента (получателя) в безопасных сделках и при выплатах с номинального счёта.
---
### Навигация
- ← [Получение подписанного реестра](/products/alfa-api/documentation/articles/factoring/articles/documents/v1/documents)
- → [Как зашифровать номер карты](/products/alfa-api/documentation/articles/nominal-accounts/articles/cardtoken/cardtoken)
---
_Медиа-материалы:_
- [Видео-презентация сервиса](/assets/developers-portal.docs.alfa-api/articles/nominal-accounts/articles/intro/files/nominal-accounts.mp4)

View File

@@ -0,0 +1,179 @@
# Как сформировать подпись
**H2H**
### Подписание алгоритмом RSA
> **Внимание**
> Для подписания необходимо использовать RSA-сертификат, выпущенный с помощью [сервиса Электронная подпись](/products/alfa-api/documentation/articles/signature/signature).
Для подписания алгоритмом RSA необходимо выполнить следующие шаги:
#### 1. Подготовьте данные для подписи в формате JSON
Подписываться должен весь блок данных тела запроса, исключая `digestSignatures`.
#### 2. Выполните каноникализацию JSON-данных
Используйте правила [RFC 8785](https://datatracker.ietf.org/doc/html/rfc8785).
**Пример каноникализированного JSON-сообщения:**
```json
{
"company": { "accountNumber": "40702810201400022055" },
"externalId": "eb19f3ef-ca6a-4f84-a28f-c6e7b469b486",
"requisite": [
{
"payoutId": "b766f52d-f6e6-4a47-bd71-ab332bd0d314",
"payoutRequisite": {
"byPan": {
"comment": "Курьерские услуги за период с 1.12.2020-20.12.2020",
"pan": "JSv++SDzmKNPIBrLc0G2k3W8lx6DjsHwSFptBCGvUAkq7hVe7KWeACIjjTOAeFKujHQguSIKcqmX93rakldGsTa6c5iZTEAsyhBp5dcPLti8F9x90iXNvCUgvPEXGclqBNvTCuVGaNbmAWrGbogHTn4LKmxxrmzeMIL+e51/YFdTpTnJ384xhiYzAzX4XxFY2CsgNOlyN5xCesOjgeYz+UBlW0MCcY9c8AJBh7+DwU09+zlS0GNtpti7GoETeQrjUv6aPqqu2IMGfO116/xVheUdwLNhcDCT2uvbRpmk9B7pMuLuekGhaA1odvoTghjvY1d1RWnjyO4ZrHpBMpVesg=="
},
"payoutTotalAmount": "24.00",
"payoutType": "CARD"
},
"selfemployed": {
"name": "Диогенович",
"patronymic": "Камень",
"surname": "Безукоризненный"
}
}
]
}
```
#### 3. Сформируйте контейнер электронной подписи в формате PKCS#7 (CMS)
Контейнер в виде структуры `ContentInfo` должен соответствовать стандарту [RFC 5652](https://www.ietf.org/rfc/rfc5652.txt).
Для создания структуры, вычисления хэша и подписи используйте криптографические провайдеры (например, Bouncy Castle или OpenSSL).
**Технические требования:**
1. **Тип:** Рекомендуется присоединённая подпись.
2. **Формат:** [RFC 5652](https://www.ietf.org/rfc/rfc5652.txt) (PKCS#7/CMS).
3. **Алгоритм хэш-функции:** SHA-256 (OID 2.16.840.1.101.3.4.2.1).
4. **Алгоритм подписи:** `sha256WithRSAEncryption`.
Структура `SignedData`:
```asn1
SignedData ::= SEQUENCE {
version CMSVersion,
digestAlgorithms DigestAlgorithmIdentifiers,
encapContent Info EncapsulatedContentInfo,
certificates [0] IMPLICIT CertificateSet OPTIONAL,
crls [1] IMPLICIT Revocation InfoChoices OPTIONAL,
signerInfos SignerInfos
}
```
Структура `SignerInfo`:
```asn1
SignerInfo ::= SEQUENCE {
version CMSVersion,
sid SignerIdentifier,
digestAlgorithm DigestAlgorithmIdentifier,
signedAttrs [0] IMPLICIT SignedAttributes OPTIONAL,
signatureAlgorithm SignatureAlgorithmIdentifier,
signature SignatureValue,
unsignedAttrs [1] IMPLICIT UnsignedAttributes OPTIONAL
}
```
**Обязательные атрибуты в `signedAttrs`:**
- ContentType = OID 1.2.840.113549.1.7.1
- SigningTime = OID 1.2.840.113549.1.9.5
- CMSAlgorithmProtection = OID 1.2.840.113549.1.9.52 (RFC 6211)
- messageDigest = OID 1.2.840.113549.1.9.4
_Примечание: Атрибут `unsignedAttrs` не используется._
#### 4. Закодируйте контейнер и передайте подпись в запросе
Полученный PKCS#7-контейнер закодируйте в `base64` и передайте в параметре `base64Encoded` массива `digestSignatures` в теле запроса.
---
### Примеры кода
#### Пример формирования подписи на Java
```java
@Override
public RsaSignResponse sign(RsaSignRequest request) throws Exception {
Security.addProvider(new BouncyCastleProvider());
BouncyCastleProvider provider = (BouncyCastleProvider) Security.getProvider("BC");
PrivateKey key = (PrivateKey) keyStore.getKey(KEYSTORE_ALIAS, KEYSTORE_PWD.toCharArray());
X509Certificate cert = (X509Certificate) keyStore.getCertificate(KEYSTORE_ALIAS);
CMSTypedData msg = new CMSProcessableByteArray(request.getDataToSign().getBytes());
CMSSignedDataGenerator signedDataGen = new CMSSignedDataGenerator();
X509CertificateHolder signCert = new X509CertificateHolder(cert.getEncoded());
ContentSigner signer = new JcaContentSignerBuilder("sha256WithRSAEncryption")
.setProvider(provider)
.build(key);
signedDataGen.addSignerInfoGenerator(new JcaSignerInfoGeneratorBuilder(
new JcaDigestCalculatorProviderBuilder().setProvider(provider).build()
).setDirectSignature(true).build(signer, signCert));
// добавляем сертификат в подпись
JcaCertStore certs = new JcaCertStore(Collections.singletonList(cert));
signedDataGen.addCertificates(certs);
CMSSignedData signedData = signedDataGen.generate(msg, true);
byte[] signatureBytes = signedData.getEncoded("DER");
MessageDigest messageDigest = MessageDigest.getInstance("SHA-256");
byte[] hashedString = messageDigest.digest(request.getDataToSign().getBytes());
return new RsaSignResponse()
.base64Encoded(new String(Base64.getEncoder().encode(signatureBytes)));
}
```
#### Пример формирования подписи на PHP
```php
public function sign(string $data, string $password = null): string
{
$key = file_get_contents($this->private_key);
$cert = file_get_contents($this->certificate);
$privateKey = openssl_pkey_get_private($key, $password ?: $this->private_key_password);
$certid = openssl_x509_read($cert);
$inputTmpFile = tmpfile();
fwrite($inputTmpFile, $data);
fseek($inputTmpFile, 0);
$outputTmpFile = tmpfile();
openssl_pkcs7_sign(
stream_get_meta_data($inputTmpFile)['uri'],
stream_get_meta_data($outputTmpFile)['uri'],
$certid,
$privateKey,
[],
PKCS7_ATTACHED
);
fseek($outputTmpFile, 0);
$signature = fread($outputTmpFile, filesize(stream_get_meta_data($outputTmpFile)['uri']));
$signature = trim(explode("\n\n", $signature, 2)[1]);
fclose($inputTmpFile);
fclose($outputTmpFile);
return str_replace("\n", '', $signature);
}
```
---
### Подписание алгоритмом ГОСТ с использованием сертификата УКЭП
Для подписания может использоваться сертификат УКЭП, выпущенный любым аккредитованным УЦ. Если сертификат выдан уполномоченному лицу (не руководителю по уставу), дополнительно потребуется машиночитаемая доверенность (МЧД).
1. Сформируйте электронную подпись с использованием криптопровайдера **КриптоПро CSP**.
2. Закодируйте полученное значение **отсоединённой** электронной подписи в формат `base64`.
3. Передайте значение в параметре `base64Encoded` массива `digestSignatures`.
---
**Навигация:**
- [Как зашифровать номер карты](/products/alfa-api/documentation/articles/nominal-accounts/articles/cardtoken/cardtoken)
- [Получение списка номинальных счетов](/products/alfa-api/documentation/articles/nominal-accounts/articles/get-accounts/v1/get-accounts)

View File

@@ -0,0 +1,106 @@
# Регистрация сделки
**Тип интеграции:** H2H
## Эндпоинты
- **Песочница:** `POST https://sandbox.alfabank.ru/api/na/jp/v1/deals`
- **Пром:** `POST https://baas.alfabank.ru/api/na/jp/v1/deals`
## Scope
`deals`
## Описание
Метод позволяет зарегистрировать новую сделку в статусе `DRAFT`.
> **Важно:** Для создания сделки необходимо наличие открытого номинального счёта в Банке.
---
## Параметры запроса
### HEADERS
| Атрибут | Тип | Обязательность | Описание |
| :---------------- | :----- | :------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Authorization** | string | required | Bearer {access_token}, полученный по [Authorization Code Flow H2H](/products/alfa-api/documentation/articles/alfa-id/articles/acf-h2h/articles/intro/intro) |
| **Accept** | string | required | application/json |
| **Content-Type** | string | required | application/json |
### BODY
| Атрибут | Тип | Обязательность | Описание |
| :------------------- | :----- | :------------- | :----------------------------------------------- |
| **accountNumber** | string | required | Номер номинального счёта |
| **expireDate** | string | required | Дата истечения сделки |
| **digestSignatures** | array | required | Электронная подпись УЛ клиента (массив объектов) |
| — **base64Encoded** | string | required | Значение электронной подписи в Base64 |
| — **signatureType** | string | required | Тип подписи: `rsa` (RSA) или `kep` (КЭП) |
---
## Пример запроса (cURL)
```bash
curl --location 'https://baas.alfabank.ru/api/na/jp/v1/deals' \
--header 'Authorization: Bearer {access-token}' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--data '{
"accountNumber": "40817810306050000000",
"expireDate": "2032-03-02",
"digestSignatures": [
{
"base64Encoded": "SEwHwYDVQQDExhDUllQVE8tUFJPIFRlc3QgQ2VudGVyIDICExIAVH4YMX0u3fEONSkAAQBUfhgwCgYIKoUDBwEBAQEEQBU0EntPGWz8EfJ5CFL2m10xeBrkAEeWDglGQDZWLKQ0ff4TyBT9X1NhG/+ETj4TcQhExy6k+WZ9w/CpF5FjyyA=",
"signatureType": "rsa"
}
]
}'
```
---
## Параметры ответа
### Успешный ответ (200 OK)
| Атрибут | Тип | Обязательность | Описание |
| :------------- | :------ | :------------- | :--------------------------------------------- |
| **dealId** | string | required | Идентификатор сделки |
| **status** | string | required | Статус сделки: `DRAFT` (принята для обработки) |
| **expireDate** | string | required | Дата истечения сделки |
| **isValid** | boolean | required | Флаг валидности сделки |
**Пример JSON:**
```json
{
"dealId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"status": "DRAFT",
"expireDate": "2032-03-02",
"isValid": false
}
```
---
## Коды ошибок
| Код | Ошибка | Описание |
| :------ | :------------------- | :------------------------------------------------------------ |
| **400** | `invalid_request` | Неверные входные параметры запроса |
| **401** | `invalid_token` | Токен просрочен, отозван или недействителен |
| **403** | `insufficient_scope` | Нет прав на использование сервиса (ошибка в настройках scope) |
| **404** | `unknown_endpoint` | Эндпоинт не найден или неактивен |
| **429** | — | Слишком много запросов (Too Many Requests) |
| **500** | `internal_error` | Внутренняя ошибка сервиса |
| **503** | — | Сервис временно недоступен |
---
**Навигация:**
- [← Как это работает](/products/alfa-api/documentation/articles/nominal-accounts/articles/deals/articles/intro/intro)
- [Получение списка сделок →](/products/alfa-api/documentation/articles/nominal-accounts/articles/deals/articles/get-deals/v1/get-deals)

View File

@@ -0,0 +1,136 @@
# Выполнение действия по этапам сделки
tags: `H2H`
### Эндпоинты
- **Песочница:** `POST https://sandbox.alfabank.ru/api/na/jp/v1/deals/steps`
- **Пром:** `POST https://baas.alfabank.ru/api/na/jp/v1/deals/steps`
### Scope
`deals`
### Описание
> **Важно**
>
> - Создание этапа сделки происходит в синхронном режиме.
> - Завершение этапа сделки происходит в асинхронном режиме.
Метод позволяет создать и завершить этап сделки.
#### Создание этапа сделки
После [регистрации сделки](/products/alfa-api/documentation/articles/nominal-accounts/articles/deals/articles/add-deal/v1/add-deal) необходимо создать этапы сделки для совершения финансовых операций. Этап сделки можно создать только для сделок в статусе `DRAFT`.
- Если сделка предполагает совершение переводов денежных средств одновременно всем реципиентам, то достаточно создать один этап сделки.
- Если переводы денежных средств должны совершаться последовательно в несколько этапов, то следует создать соответствующее количество этапов сделки.
#### Завершение этапа сделки
При наступлении момента проведения расчётов по этапу сделки необходимо инициировать завершение этапа сделки. При завершении этапа сделки происходят все финансовые операции между участниками этапа сделки, и он переходит в статус `COMPLETED`.
- Если при [добавлении реципиента](/products/alfa-api/documentation/articles/nominal-accounts/articles/deals/articles/step-contractors/v1/step-contractors) в этап сделки был проставлен признак `keepOnNominalAccount = false`, то денежные средства переводятся с захолдированного кошелька депонента на основной и налоговый кошельки реципиента, холдируются там, а затем производится выплата по реквизитам реципиента с номинального счёта.
- Если был проставлен признак `keepOnNominalAccount = true`, то денежные средства переводятся на кошельки реципиента внутри системы без фактического перевода с номинального счёта.
Завершить этап сделки можно только после [подтверждения сделки](/products/alfa-api/documentation/articles/nominal-accounts/articles/deals/articles/deal-actions/v1/deal-actions).
---
### Параметры запроса
#### Headers
| Атрибут | Описание | Тип | Обязательность |
| :---------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------- | :----- | :------------- |
| **Authorization** | Bearer {access_token}, полученный по [Authorization Code Flow H2H](/products/alfa-api/documentation/articles/alfa-id/articles/acf-h2h/articles/intro/intro) | string | required |
| **Accept** | application/json | string | required |
| **Content-Type** | application/json | string | required |
#### Body
| Атрибут | Описание | Тип | Обязательность |
| :------------------- | :------------------------------------------------------------------- | :--------------- | :------------- |
| **dealId** | Идентификатор сделки | string | required |
| **stepId** | Идентификатор этапа сделки | string | optional |
| **action** | Действие по этапу сделки: `CREATE` (создать), `COMPLETE` (завершить) | string | required |
| **description** | Описание этапа сделки (при создании) | string | optional |
| **digestSignatures** | Массив объектов: Электронная подпись УЛ клиента | array of objects | required |
| └ **base64Encoded** | Значение электронной подписи в Base64 | string | required |
| └ **signatureType** | Тип подписи: `rsa` или `kep` | string | required |
---
### Пример запроса (cURL)
```bash
curl --location 'https://baas.alfabank.ru/api/na/jp/v1/deals/steps' \
--header 'Authorization: Bearer {access-token}' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--data '{
"dealId": "ab9cbb96-360a-4462-a683-955cc29f7f54",
"stepId": "ab9cbb96-360a-4462-a683-955cc29f7f54",
"action": "CREATE",
"description": "Этап 1",
"digestSignatures": [
{
"base64Encoded": "SEwHwYDVQQDExhDUllQVE8tUFJPIFRlc3QgQ2VudGVyIDICExIAVH4YMX0u3fEONSkAAQBUfhgwCgYIKoUDBwEBAQEEQBU0EntPGWz8EfJ5CFL2m10xeBrkAEeWDglGQDZWLKQ0ff4TyBT9X1NhG/+ETj4TcQhExy6k+WZ9w/CpF5FjyyA=",
"signatureType": "rsa"
}
]
}'
```
---
### Параметры ответа
#### Успешное создание (200 OK)
| Атрибут | Описание | Тип |
| :-------------- | :------------------------- | :------ |
| **dealId** | Идентификатор сделки | string |
| **stepId** | Идентификатор этапа сделки | string |
| **stepNumber** | Порядковый номер этапа | integer |
| **description** | Описание этапа | string |
**Пример ответа 200:**
```json
{
"dealId": "ab9cbb96-360a-4462-a683-955cc29f7f54",
"stepId": "ab9cbb96-360a-4462-a683-955cc29f7f54",
"stepNumber": 1,
"description": "Этап 1"
}
```
#### Запрос принят (202 Accepted) — при завершении этапа
| Атрибут | Описание | Тип |
| :------------ | :----------------------------------------------------------------------------------------------- | :----- |
| **status** | Статус запроса: `FAILED`, `TIMEOUT`, `PENDING`, `PAYMENT_FAILED`, `TRANSFER_FAILED`, `COMPLETED` | string |
| **requestId** | Идентификатор запроса | string |
---
### Ошибки
| Код | Описание (error / error_description) |
| :-------------------------- | :------------------------------------------------------- |
| **400 Bad Request** | `invalid_request` — неверные входные параметры |
| **401 Unauthorized** | `invalid_token` — токен просрочен или недействителен |
| **403 Forbidden** | `insufficient_scope` — нет прав на использование сервиса |
| **404 Not Found** | `unknown_endpoint` — эндпоинт не найден |
| **429 Too Many Requests** | Превышен лимит запросов (тело ответа отсутствует) |
| **500 Internal Error** | `internal_error` — внутренняя ошибка сервиса |
| **503 Service Unavailable** | Сервис недоступен (тело ответа отсутствует) |
---
**Навигация:**
- Предыдущий раздел: [Выполнение действия по сделке](/products/alfa-api/documentation/articles/nominal-accounts/articles/deals/articles/deal-actions/v1/deal-actions)
- Следующий раздел: [Получение статуса запроса на завершение этапа сделки](/products/alfa-api/documentation/articles/nominal-accounts/articles/deals/articles/get-deal-request-status/v1/get-deal-request-status)

View File

@@ -0,0 +1,126 @@
# Выполнение действия по сделке
tags: **H2H**
### Эндпоинты
- **Песочница:** `PATCH https://sandbox.alfabank.ru/api/na/jp/v1/deals/action`
- **Пром:** `PATCH https://baas.alfabank.ru/api/na/jp/v1/deals/action`
---
### Scope
`deals`
### Описание
Метод позволяет подтвердить, отменить или завершить сделку.
#### Подтверждение сделки
При успешном подтверждении сделки денежные средства депонентов холдируются в сумме, необходимой для проведения расчётов в рамках текущей сделки для каждого этапа сделки, и сделка переходит из статуса `DRAFT` в статус `ACTIVE`.
#### Отмена сделки
При успешной отмене сделки ранее захолдированные денежные средства депонентов расхолдируются и становятся доступны для использования в расчётах (если сделка была ранее подтверждена), и сделка переходит в статус `CLOSED`.
#### Завершение сделки
При успешном завершении сделка переходит в статус `COMPLETED`.
> **Важно**
> Завершить сделку можно, только если все [этапы сделки завершены](/products/alfa-api/documentation/articles/nominal-accounts/articles/deals/articles/add-step/v1/add-step).
---
### Параметры запроса
#### HEADERS
| Атрибут | Описание |
| :---------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Authorization** <br> _string, required_ | Bearer {access_token}, полученный по [Authorization Code Flow H2H](/products/alfa-api/documentation/articles/alfa-id/articles/acf-h2h/articles/intro/intro) |
| **Accept** <br> _string, required_ | application/json |
| **Content-Type** <br> _string, required_ | application/json |
#### BODY
| Атрибут | Описание |
| :----------------------------------------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **dealId** <br> _string, required_ | Идентификатор сделки |
| **action** <br> _string, required_ | Действие по сделке. Возможные значения: <ul><li>`ACCEPT` — подтвердить сделку;</li><li>`COMPLETE` — завершить сделку;</li><li>`CANCEL` — отменить сделку.</li></ul> |
| **digestSignatures** <br> _array of objects, required_ | Электронная подпись УЛ клиента |
| **└ base64Encoded** <br> _string, required_ | Значение электронной подписи, закодированное в Base64 |
| **└ signatureType** <br> _string, required_ | Тип электронной подписи. Возможные значения: <ul><li>`rsa` — RSA;</li><li>`kep` — КЭП.</li></ul> |
---
### Пример запроса
```bash
curl --location --request PATCH 'https://baas.alfabank.ru/api/na/jp/v1/deals/action' \
--header 'Authorization: Bearer {access-token}' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--data '{
"dealId": "ab9cbb96-360a-4462-a683-955cc29f7f54",
"action": "ACCEPT",
"digestSignatures": [
{
"base64Encoded": "SEwHwYDVQQDExhDUllQVE8tUFJPIFRlc3QgQ2VudGVyIDICExIAVH4YMX0u3fEONSkAAQBUfhgwCgYIKoUDBwEBAQEEQBU0EntPGWz8EfJ5CFL2m10xeBrkAEeWDglGQDZWLKQ0ff4TyBT9X1NhG/+ETj4TcQhExy6k+WZ9w/CpF5FjyyA=",
"signatureType": "rsa"
}
]
}'
```
---
### Параметры ответа
**204 No Content**
_Нет тела ответа_
**400 Bad Request**
| Атрибут | Описание |
| :--- | :--- |
| **error** <br> _string, required_ | Код ошибки: `invalid_request` — неверные входные параметры запроса |
| **error_description** <br> _string, optional_ | Описание ошибки |
**401 Unauthorized**
| Атрибут | Описание |
| :--- | :--- |
| **error** <br> _string, required_ | Код ошибки: `invalid_token` — токен просрочен, отозван или недействителен |
| **error_description** <br> _string, optional_ | Описание ошибки |
**403 Forbidden**
| Атрибут | Описание |
| :--- | :--- |
| **error** <br> _string, required_ | Код ошибки: `insufficient_scope` — нет прав на использование сервиса (настройки scope) |
| **error_description** <br> _string, optional_ | Описание ошибки |
**404 Not Found**
| Атрибут | Описание |
| :--- | :--- |
| **error** <br> _string, required_ | Код ошибки: `unknown_endpoint` — эндпоинт не найден или неактивен |
| **error_description** <br> _string, optional_ | Описание ошибки |
**429 Too Many Requests**
_Нет тела ответа_
**500 Internal Server Error**
| Атрибут | Описание |
| :--- | :--- |
| **error** <br> _string, required_ | Код ошибки: `internal_error` — внутренняя ошибка сервиса |
| **error_description** <br> _string, optional_ | Описание ошибки |
**503 Service Unavailable**
_Нет тела ответа_
---
### Навигация
- [← Получение списка платежей по сделке](/products/alfa-api/documentation/articles/nominal-accounts/articles/deals/articles/get-deal-payoffs/v1/get-deal-payoffs)
- [Выполнение действия по этапам сделки →](/products/alfa-api/documentation/articles/nominal-accounts/articles/deals/articles/add-step/v1/add-step)

View File

@@ -0,0 +1,97 @@
# Проверка возможности осуществления выплат по сделке
tags: `H2H`
## Эндпоинты
**Песочница**
`PATCH https://sandbox.alfabank.ru/api/na/jp/v1/deals/{dealId}/is-valid`
**Пром**
`PATCH https://baas.alfabank.ru/api/na/jp/v1/deals/{dealId}/is-valid`
## Scope
`deals`
## Описание
Метод позволяет проверить возможность осуществления платежей по сделке по `dealId`:
- проверяет правильность формирования сделки;
- проверяет балансы бенефициаров;
- сверяет суммы участников сделки.
> **Важно**
> Проверка доступна только для сделок в статусе `DRAFT`.
---
## Параметры запроса
### HEADERS
| Атрибут | Тип | Описание |
| :---------------- | :---------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Authorization** | string (required) | Bearer {access_token}, полученный по [Authorization Code Flow H2H](/products/alfa-api/documentation/articles/alfa-id/articles/acf-h2h/articles/intro/intro) |
| **Accept** | string (required) | application/json |
### PATH
| Атрибут | Тип | Описание |
| :--------- | :---------------- | :------------------- |
| **dealId** | string (required) | Идентификатор сделки |
### Пример запроса (cURL)
```bash
curl --location --globoff --request PATCH 'https://baas.alfabank.ru/api/na/jp/v1/deals/{dealId}/is-valid' \
--header 'Authorization: Bearer {access-token}' \
--header 'Accept: application/json'
```
---
## Параметры ответа
### 200 OK
**Пример ответа:**
```json
{
"dealId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"isValid": true,
"description": [
"Неверная сумма депонированных средств по этапу сделки ab9cbb96-360a-4462-a683-955cc29f7f54;"
]
}
```
**Структура тела (BODY):**
| Атрибут | Тип | Описание |
| :--- | :--- | :--- |
| **dealId** | string (required) | Идентификатор сделки |
| **isValid** | boolean (required) | Результат прохождения проверки: `true` — сделка прошла валидацию; `false` — сделка не прошла валидацию. |
| **description** | array of strings (optional) | Описание ошибок. Возвращается при неудачном прохождении валидации. |
---
### Коды ошибок
| Код | Описание | Атрибуты ответа |
| :------ | :------------------ | :-------------------------------------------------------------------------- |
| **400** | Bad Request | `error`: `invalid_request` — неверные входные параметры запроса. |
| **401** | Unauthorized | `error`: `invalid_token` — токен просрочен, отозван или недействителен. |
| **403** | Forbidden | `error`: `insufficient_scope` — недостаточно прав на использование сервиса. |
| **404** | Not Found | `error`: `unknown_endpoint` — эндпоинт не найден или неактивен. |
| **429** | Too Many Requests | Нет тела ответа. |
| **500** | Internal Error | `error`: `internal_error` — внутренняя ошибка сервиса. |
| **503** | Service Unavailable | Нет тела ответа. |
---
## Навигация
- **Назад:** [Получение информации о сделке](/products/alfa-api/documentation/articles/nominal-accounts/articles/deals/articles/get-deal/v1/get-deal)
- **Вперед:** [Получение списка платежей по сделке](/products/alfa-api/documentation/articles/nominal-accounts/articles/deals/articles/get-deal-payoffs/v1/get-deal-payoffs)

View File

@@ -0,0 +1,105 @@
# Получение информации об участниках этапа сделки
tags: `H2H`
Метод позволяет получить информацию об участниках этапа сделки по `dealId` и `stepId`.
## Эндпоинты
| Окружение | Метод и URL |
| :------------ | :--------------------------------------------------------------------------------------- |
| **Песочница** | `GET https://sandbox.alfabank.ru/api/na/jp/v1/deals/{dealId}/steps/{stepId}/contractors` |
| **Пром** | `GET https://baas.alfabank.ru/api/na/jp/v1/deals/{dealId}/steps/{stepId}/contractors` |
**Scope:** `deals`
---
## Параметры запроса
### HEADERS
| Атрибут | Описание | Тип | Обязательность |
| :---------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------- | :----- | :------------- |
| **Authorization** | Bearer {access_token}, полученный по [Authorization Code Flow H2H](/products/alfa-api/documentation/articles/alfa-id/articles/acf-h2h/articles/intro/intro) | string | required |
| **Accept** | application/json | string | required |
### QUERY
| Атрибут | Описание | Тип | Обязательность |
| :--------------- | :----------------------------------------------------------------------------------------------------------- | :----- | :------------- |
| **contractorId** | Идентификатор участника сделки | string | optional |
| **role** | Роль участника этапа сделки. Возможные значения:<br>• `DEPONENT` — плательщик;<br>• `RECIPIENT` — получатель | string | optional |
### PATH
| Атрибут | Описание | Тип | Обязательность |
| :--------- | :------------------------- | :----- | :------------- |
| **dealId** | Идентификатор сделки | string | required |
| **stepId** | Идентификатор этапа сделки | string | required |
---
## Пример запроса
```bash
curl --location --globoff 'https://baas.alfabank.ru/api/na/jp/v1/deals/{dealId}/steps/{stepId}/contractors?contractorId=ab9cbb96-360a-4462-a683-955cc29f7f54&role={role}' \
--header 'Authorization: Bearer {access-token}' \
--header 'Accept: application/json'
```
---
## Параметры ответа
### Пример ответа 200 (OK)
```json
[
{
"beneficiaryId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"role": "DEPONENT",
"amount": "10.00",
"purpose": "Назначение платежа",
"requisiteId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"keepOnNominalAccount": true,
"amounts": [
{
"walletType": "MAIN",
"amount": "10.00"
}
]
}
]
```
### BODY (Успешный ответ)
| Атрибут | Описание | Тип | Обязательность |
| :----------------------- | :----------------------------------------------------------------------------------------------------------------------------------- | :--------------- | :------------- |
| **beneficiaryId** | Идентификатор бенефициара или универсального реципиента | string | optional |
| **role** | Роль участника этапа сделки: `DEPONENT` (плательщик), `RECIPIENT` (получатель) | string | optional |
| **amount** | Сумма депонирования в рублях | string | optional |
| **purpose** | Назначение платежа реципиента | string | optional |
| **requisiteId** | Идентификатор платёжного реквизита реципиента | string | optional |
| **keepOnNominalAccount** | Признак вывода денег на виртуальный счёт:<br>• `true` — оставить в рамках номинального счёта;<br>• `false` — вывести по ID реквизита | boolean | optional |
| **amounts** | Массив объектов: Суммы реципиента | array of objects | optional |
**Вложенные поля `amounts`:**
- **walletType** (string, optional): Тип суммы (`MAIN` — основная, `TAX` — налоговая).
- **amount** (string, optional): Сумма в рублях.
---
## Коды ошибок
| Код | Описание | Возможные значения `error` |
| :------ | :------------------ | :------------------------------------------------------- |
| **400** | Bad Request | `invalid_request` — неверные входные параметры |
| **401** | Unauthorized | `invalid_token` — токен просрочен или недействителен |
| **403** | Forbidden | `insufficient_scope` — нет прав на использование сервиса |
| **404** | Not Found | `unknown_endpoint` — эндпоинт не найден |
| **429** | Too Many Requests | Нет тела ответа |
| **500** | Internal Error | `internal_error` — внутренняя ошибка сервиса |
| **503** | Service Unavailable | Нет тела ответа |

View File

@@ -0,0 +1,94 @@
# Получение списка платежей по сделке
tags: `H2H`
Метод позволяет получить список выплат по сделке по идентификатору `dealId`.
## Эндпоинты
- **Песочница:** `GET https://sandbox.alfabank.ru/api/na/jp/v1/deals/{dealId}/payoffs`
- **Пром:** `GET https://baas.alfabank.ru/api/na/jp/v1/deals/{dealId}/payoffs`
## Scope
`deals`
---
## Параметры запроса
### HEADERS
| Атрибут | Тип | Обязательность | Описание |
| :---------------- | :----- | :------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Authorization** | string | required | Bearer {access_token}, полученный по [Authorization Code Flow H2H](/products/alfa-api/documentation/articles/alfa-id/articles/acf-h2h/articles/intro/intro) |
| **Accept** | string | required | `application/json` |
### PATH
| Атрибут | Тип | Обязательность | Описание |
| :--------- | :----- | :------------- | :------------------- |
| **dealId** | string | required | Идентификатор сделки |
---
## Пример запроса (cURL)
```bash
curl --location --globoff 'https://baas.alfabank.ru/api/na/jp/v1/deals/{dealId}/payoffs' \
--header 'Authorization: Bearer {access-token}' \
--header 'Accept: application/json'
```
---
## Параметры ответа (200 OK)
### BODY (JSON)
| Атрибут | Тип | Обязательность | Описание |
| :-------------- | :----- | :------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **stepId** | string | required | Идентификатор этапа сделки |
| **payoffId** | string | required | Идентификатор платежа |
| **payoffType** | string | required | Тип платежа:<br>• `EXTERNAL` — внешний (выплата с номинального счёта)<br>• `INTERNAL` — внутренний (выплата внутри номинального счёта) |
| **deponentId** | string | required | Идентификатор депонента |
| **recipientId** | string | required | Идентификатор реципиента |
| **amount** | string | required | Сумма в рублях |
| **status** | string | required | Статус запроса:<br>• `PENDING` — запрос в процессе обработки<br>• `MANUAL_ACCEPTANCE` — ожидание ручного подтверждения запроса-дубля<br>• `AWAIT_EXTERNAL` — ожидание исполнения внешнего платежа<br>• `FAILED` — ошибка обработки<br>• `FAILED_DUPLICATE` — дубль отклонен<br>• `COMPLETE` — успешно завершено |
### Пример ответа 200
```json
[
{
"stepId": "f099f9dd-d5e7-4ab3-89f5-24932aa808ad",
"payoffId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"payoffType": "EXTERNAL",
"deponentId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"recipientId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"amount": "100.00",
"status": "PENDING"
}
]
```
---
## Коды ошибок
| Код | Описание | Тело ответа (основные атрибуты) |
| :------ | :------------------ | :---------------------------------------------------- |
| **400** | Bad Request | `error`: `invalid_request` — неверные параметры |
| **401** | Unauthorized | `error`: `invalid_token` — токен недействителен |
| **403** | Forbidden | `error`: `insufficient_scope` — нет прав доступа |
| **404** | Not Found | `error`: `unknown_endpoint` — эндпоинт не найден |
| **429** | Too Many Requests | Нет тела ответа |
| **500** | Internal Error | `error`: `internal_error` — внутренняя ошибка сервиса |
| **503** | Service Unavailable | Нет тела ответа |
---
**Навигация:**
- Предыдущий метод: [Проверка возможности осуществления выплат по сделке](/products/alfa-api/documentation/articles/nominal-accounts/articles/deals/articles/deal-is-valid/v1/deal-is-valid)
- Следующий метод: [Выполнение действия по сделке](/products/alfa-api/documentation/articles/nominal-accounts/articles/deals/articles/deal-actions/v1/deal-actions)

View File

@@ -0,0 +1,116 @@
# Получение статуса запроса на завершение этапа сделки
tags: **H2H**
## Эндпоинты
| Среда | Метод и URL |
| :------------ | :---------------------------------------------------------------------------------------- |
| **Песочница** | `GET https://sandbox.alfabank.ru/api/na/jp/v1/deals/{dealId}/requests/{requestId}/status` |
| **Пром** | `GET https://baas.alfabank.ru/api/na/jp/v1/deals/{dealId}/requests/{requestId}/status` |
## Scope
`deals`
## Описание
Метод позволяет получить статус запроса на завершение этапа сделки по `requestId`.
## Параметры запроса
### HEADERS
| Атрибут | Тип | Обязательность | Описание |
| :---------------- | :----- | :------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Authorization** | string | required | Bearer {access_token}, полученный по [Authorization Code Flow H2H](/products/alfa-api/documentation/articles/alfa-id/articles/acf-h2h/articles/intro/intro) |
| **Accept** | string | required | application/json |
### PATH
| Атрибут | Тип | Обязательность | Описание |
| :------------ | :----- | :------------- | :-------------------- |
| **dealId** | string | required | Идентификатор сделки |
| **requestId** | string | required | Идентификатор запроса |
## Пример запроса
```bash
curl --location --globoff 'https://baas.alfabank.ru/api/na/jp/v1/deals/{dealId}/requests/{requestId}/status' \
--header 'Authorization: Bearer {access-token}' \
--header 'Accept: application/json'
```
## Параметры ответа
### 200 (OK)
**Пример тела ответа:**
```json
{
"requestId": "ab9cbb96-360a-4462-a683-955cc29f7f54",
"status": "COMPLETE",
"description": "Произошла техническая ошибка. Обратитесь в службу поддержки и сообщите код ошибки afc9b019-77ac-49ef-afb9-688b38b74cc2"
}
```
**Описание полей (BODY):**
| Атрибут | Тип | Обязательность | Описание |
| :--- | :--- | :--- | :--- |
| **requestId** | string | required | Идентификатор запроса |
| **status** | string | required | Статус запроса. Возможные значения:
`FAILED` — ошибка обработки;
`TIMEOUT` — превышено время ожидания;
`PENDING` — в процессе обработки;
`PAYMENT_FAILED` — неудача внешнего платежа;
`TRANSFER_FAILED` — неудача внутреннего платежа (внутри НС);
`COMPLETED` — успешно завершено. |
| **description** | string | optional | Описание причины, по которой запрос завершился неудачей. Возвращается, если статус равен `FAILED`. |
---
### Ошибки
#### 400 Bad Request
| Атрибут | Тип | Описание |
| :-------------------- | :----- | :----------------------------------------------------- |
| **error** | string | `invalid_request` — неверные входные параметры запроса |
| **error_description** | string | Описание ошибки |
#### 401 Unauthorized
| Атрибут | Тип | Описание |
| :-------------------- | :----- | :------------------------------------------------------------ |
| **error** | string | `invalid_token` — токен просрочен, отозван или недействителен |
| **error_description** | string | Описание ошибки |
#### 403 Forbidden
| Атрибут | Тип | Описание |
| :-------------------- | :----- | :----------------------------------------------------------------------------- |
| **error** | string | `insufficient_scope` — нет прав на использование сервиса (недостаточный scope) |
| **error_description** | string | Описание ошибки |
#### 404 Not Found
| Атрибут | Тип | Описание |
| :-------------------- | :----- | :---------------------------------------------------- |
| **error** | string | `unknown_endpoint` — эндпоинт не найден или неактивен |
| **error_description** | string | Описание ошибки |
#### 429 Too Many Requests
Нет тела ответа. Превышен лимит запросов.
#### 500 Internal Server Error
| Атрибут | Тип | Описание |
| :-------------------- | :----- | :------------------------------------------- |
| **error** | string | `internal_error` — внутренняя ошибка сервиса |
| **error_description** | string | Описание ошибки |
#### 503 Service Unavailable
Нет тела ответа. Сервис временно недоступен.

View File

@@ -0,0 +1,100 @@
Приношу извинения, в предыдущем ответе могли проскочить остаточные элементы структуры. Вот полностью очищенный от HTML-тегов, спецсимволов и лишней разметки текст в формате Markdown.
---
# Получение информации о сделке
**Тип интеграции:** H2H
**Scope:** `deals`
## Эндпоинты
* **Песочница:** `GET https://sandbox.alfabank.ru/api/na/jp/v1/deals/{dealId}`
* **Пром:** `GET https://baas.alfabank.ru/api/na/jp/v1/deals/{dealId}`
## Описание
Метод позволяет получить детальную информацию о сделке по идентификатору `dealId`.
## Параметры запроса
### HEADERS
| Атрибут | Тип | Обяз. | Описание |
| :--- | :--- | :--- | :--- |
| Authorization | string | Да | Bearer {access_token}, полученный по [Authorization Code Flow H2H](/products/alfa-api/documentation/articles/alfa-id/articles/acf-h2h/articles/intro/intro) |
| Accept | string | Да | application/json |
### PATH
| Атрибут | Тип | Обяз. | Описание |
| :--- | :--- | :--- | :--- |
| dealId | string | Да | Идентификатор сделки |
## Пример запроса
```bash
curl --location --globoff 'https://baas.alfabank.ru/api/na/jp/v1/deals/{dealId}' \
--header 'Authorization: Bearer {access-token}' \
--header 'Accept: application/json'
```
---
## Параметры ответа (200 OK)
### Пример тела ответа
```json
{
"dealId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"status": "DRAFT",
"expireDate": "2032-03-02",
"isValid": false,
"steps": [
{
"id": "f099f9dd-d5e7-4ab3-89f5-24932aa808ad",
"description": "Этап 1",
"stepNumber": 1,
"status": "NEW",
"isValid": false
}
]
}
```
### Структура ответа (BODY)
| Атрибут | Тип | Обяз. | Описание |
| :--- | :--- | :--- | :--- |
| **dealId** | string | Да | Идентификатор сделки |
| **status** | string | Да | Статус сделки. Возможные значения: `DRAFT` (принята), `ACTIVE` (успешно обработана), `BLOCKED` (ошибка обработки), `PAYMENT_FAILED` (ошибка платежа), `CLOSED` (отменена), `COMPLETED` (успешно завершена) |
| **expireDate** | string | Да | Дата истечения сделки |
| **isValid** | boolean | Да | Флаг валидности сделки |
| **steps** | array | Нет | Данные об этапах сделки (список объектов) |
### Параметры этапа сделки (внутри массива steps)
| Атрибут | Тип | Обяз. | Описание |
| :--- | :--- | :--- | :--- |
| **id** | string | Да | Идентификатор этапа |
| **description** | string | Да | Описание этапа |
| **stepNumber** | integer | Да | Порядковый номер этапа |
| **status** | string | Да | Статус этапа: `NEW` (принят), `IN_PROGRESS` (в обработке), `PAYMENT_FAILED` (ошибка платежа), `COMPLETED` (завершен) |
| **isValid** | string | Да | Флаг валидности этапа |
---
## Коды ответов и ошибок
| Код | Описание | Значение error / error_description |
| :--- | :--- | :--- |
| **200** | OK | Успешное получение информации |
| **400** | Bad Request | `invalid_request` — неверные входные параметры |
| **401** | Unauthorized | `invalid_token` — токен просрочен, отозван или неверный формат |
| **403** | Forbidden | `insufficient_scope` — нет прав на использование сервиса (проверьте scope) |
| **404** | Not Found | `unknown_endpoint` — эндпоинт не найден или неактивен |
| **429** | Too Many Requests | Превышено количество запросов (без тела ответа) |
| **500** | Internal Error | `internal_error` — внутренняя ошибка сервиса |
| **503** | Service Unavailable | Сервис временно недоступен (без тела ответа) |
---
**Навигация:**
[← Получение списка сделок](/products/alfa-api/documentation/articles/nominal-accounts/articles/deals/articles/get-deals/v1/get-deals) | [Проверка возможности выплат →](/products/alfa-api/documentation/articles/nominal-accounts/articles/deals/articles/deal-is-valid/v1/deal-is-valid)

View File

@@ -0,0 +1,111 @@
# Получение списка сделок
**H2H**
Метод позволяет получить список всех сделок (независимо от статуса) по номинальному счёту с момента его открытия.
## Эндпоинты
| Окружение | Метод | URL |
| :--- | :--- | :--- |
| **Песочница** | `GET` | `https://sandbox.alfabank.ru/api/na/jp/v1/deals` |
| **Пром** | `GET` | `https://baas.alfabank.ru/api/na/jp/v1/deals` |
**Scope:** `deals`
---
## Параметры запроса
### HEADERS
| Атрибут | Тип | Обязательность | Описание |
| :--- | :--- | :--- | :--- |
| **Authorization** | string | required | Bearer {access_token}, полученный по [Authorization Code Flow H2H](/products/alfa-api/documentation/articles/alfa-id/articles/acf-h2h/articles/intro/intro) |
| **Accept** | string | required | application/json |
### QUERY
| Атрибут | Тип | Обязательность | Описание |
| :--- | :--- | :--- | :--- |
| **accountNumber** | string | required | Номер номинального счёта |
| **limit** | integer | optional | Количество объектов на одной странице |
| **offset** | integer | optional | Количество объектов в списке, которые необходимо пропустить |
---
## Пример запроса (cURL)
```bash
curl --location --globoff 'https://baas.alfabank.ru/api/na/jp/v1/deals?accountNumber={accountNumber}&limit=100&offset={offset}' \
--header 'Authorization: Bearer {access-token}' \
--header 'Accept: application/json'
```
---
## Параметры ответа
### 200 OK
Пример тела ответа:
```json
{
"pagination": {
"limit": 100,
"offset": 0,
"totalCount": 1
},
"deals": [
{
"dealId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"status": "DRAFT",
"expireDate": "2032-03-02",
"isValid": false,
"steps": [
{
"id": "f099f9dd-d5e7-4ab3-89f5-24932aa808ad",
"description": "Этап 1",
"stepNumber": 1,
"status": "NEW",
"isValid": false
}
]
}
]
}
```
#### Описание полей ответа (200 OK)
| Атрибут | Тип | Обязательность | Описание |
| :--- | :--- | :--- | :--- |
| **pagination** | object | optional | Данные пагинации |
| ∟ **limit** | number | optional | Количество записей на одной странице |
| ∟ **offset** | number | optional | Количество записей в списке, которые были пропущены |
| ∟ **totalCount** | number | optional | Общее количество записей |
| **deals** | array | optional | Данные о сделках |
| ∟ **dealId** | string | required | Идентификатор сделки |
| ∟ **status** | string | required | Статус сделки: `DRAFT`, `ACTIVE`, `BLOCKED`, `PAYMENT_FAILED`, `CLOSED`, `COMPLETED` |
| ∟ **expireDate** | string | required | Дата истечения сделки |
| ∟ **isValid** | boolean | required | Флаг валидности сделки |
| ∟ **steps** | array | optional | Данные об этапах сделки |
| ∟ ∟ **id** | string | required | Идентификатор этапа сделки |
| ∟ ∟ **description** | string | required | Описание этапа сделки |
| ∟ ∟ **stepNumber** | integer | required | Порядковый номер этапа сделки |
| ∟ ∟ **status** | string | required | Статус этапа: `NEW`, `IN_PROGRESS`, `PAYMENT_FAILED`, `COMPLETED` |
| ∟ ∟ **isValid** | boolean | required | Флаг валидности этапа сделки |
---
## Ошибки
| Код | Описание (error) | error_description |
| :--- | :--- | :--- |
| **400** | `invalid_request` | Неверные входные параметры запроса |
| **401** | `invalid_token` | Токен просрочен, отозван или имеет неправильный формат |
| **403** | `insufficient_scope` | Нет прав на использование сервиса (настройки scope) |
| **404** | `unknown_endpoint` | Эндпоинт не найден или неактивен |
| **429** | — | Слишком много запросов (нет тела ответа) |
| **500** | `internal_error` | Внутренняя ошибка сервиса |
| **503** | — | Сервис недоступен (нет тела ответа) |
---
**Навигация:**
[← Регистрация сделки](/products/alfa-api/documentation/articles/nominal-accounts/articles/deals/articles/add-deal/v1/add-deal) | [Получение информации о сделке →](/products/alfa-api/documentation/articles/nominal-accounts/articles/deals/articles/get-deal/v1/get-deal)

View File

@@ -0,0 +1,98 @@
# Получение информации об этапе сделки
**Тип интеграции:** H2H
**Scope:** `deals`
Метод позволяет получить детальную информацию об этапе сделки по `dealId` и `stepId`.
---
## Эндпоинты
| Среда | Метод и URL |
| :------------ | :--------------------------------------------------------------------------- |
| **Песочница** | `GET https://sandbox.alfabank.ru/api/na/jp/v1/deals/{dealId}/steps/{stepId}` |
| **Пром** | `GET https://baas.alfabank.ru/api/na/jp/v1/deals/{dealId}/steps/{stepId}` |
---
## Параметры запроса
### HEADERS
| Атрибут | Тип | Обязательность | Описание |
| :---------------- | :----- | :------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Authorization** | string | required | Bearer {access_token}, полученный по [Authorization Code Flow H2H](https://developers.alfabank.ru/products/alfa-api/documentation/articles/alfa-id/articles/acf-h2h/articles/intro/intro) |
| **Accept** | string | required | application/json |
### PATH (Путь)
| Атрибут | Тип | Обязательность | Описание |
| :--------- | :----- | :------------- | :------------------------- |
| **dealId** | string | required | Идентификатор сделки |
| **stepId** | string | required | Идентификатор этапа сделки |
---
## Пример запроса (cURL)
```bash
curl --location --globoff 'https://baas.alfabank.ru/api/na/jp/v1/deals/{dealId}/steps/{stepId}' \
--header 'Authorization: Bearer {access-token}' \
--header 'Accept: application/json'
```
---
## Параметры ответа
### Успешный ответ (200 OK)
**Пример тела ответа:**
```json
{
"stepId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"stepNumber": 1,
"description": "Этап 1",
"status": "DRAFT",
"isValid": false
}
```
**Описание полей:**
| Атрибут | Тип | Обязательность | Описание |
| :--- | :--- | :--- | :--- |
| **stepId** | string | required | Идентификатор этапа сделки |
| **stepNumber** | integer | required | Порядковый номер этапа сделки |
| **description** | string | required | Описание этапа сделки |
| **status** | string | required | Статус этапа сделки (см. ниже) |
| **isValid** | boolean | required | Флаг валидности этапа сделки |
#### Возможные значения статуса (`status`):
- `DRAFT` — принят для последующей обработки;
- `ACTIVE` — успешно обработан;
- `BLOCKED` — ошибка в процессе обработки;
- `IN_PROGRESS` — в процессе обработки;
- `PAYMENT_FAILED` — платёж завершился неудачей;
- `CLOSED` — отменен;
- `COMPLETED` — успешно завершен.
---
## Ошибки
| Код | Описание (error) | Детали (error_description) |
| :------ | :------------------- | :-------------------------------------------- |
| **400** | `invalid_request` | Неверные входные параметры запроса |
| **401** | `invalid_token` | Токен просрочен, отозван или недействителен |
| **403** | `insufficient_scope` | У пользователя нет прав (недостаточный scope) |
| **404** | `unknown_endpoint` | Эндпоинт не найден или неактивен |
| **429** | — | Слишком много запросов (нет тела ответа) |
| **500** | `internal_error` | Внутренняя ошибка сервиса |
| **503** | — | Сервис недоступен (нет тела ответа) |
---
_Документация Alfa API_

View File

@@ -0,0 +1,98 @@
# Получение списка этапов сделки
**Тип интеграции:** H2H
**Scope:** `deals`
Метод позволяет получить список этапов сделки по `dealId`.
---
## Эндпоинты
| Среда | Метод и URL |
| :------------ | :------------------------------------------------------------------ |
| **Песочница** | `GET https://sandbox.alfabank.ru/api/na/jp/v1/deals/{dealId}/steps` |
| **Пром** | `GET https://baas.alfabank.ru/api/na/jp/v1/deals/{dealId}/steps` |
---
## Параметры запроса
### HEADERS
| Атрибут | Тип | Описание |
| :---------------- | :---------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Authorization** | string (required) | Bearer {access_token}, полученный по [Authorization Code Flow H2H](/products/alfa-api/documentation/articles/alfa-id/articles/acf-h2h/articles/intro/intro) |
| **Accept** | string (required) | `application/json` |
### QUERY
| Атрибут | Тип | Описание |
| :--------- | :----------------- | :--------------------------------------------------------------------------------------- |
| **offset** | integer (optional) | Количество элементов в списке, которое необходимо пропустить. Значение по умолчанию: `0` |
| **limit** | integer (optional) | Количество элементов в списке, которое необходимо вывести. Значение по умолчанию: `50` |
### PATH
| Атрибут | Тип | Описание |
| :--------- | :---------------- | :------------------- |
| **dealId** | string (required) | Идентификатор сделки |
---
## Пример запроса (cURL)
```bash
curl --location --globoff 'https://baas.alfabank.ru/api/na/jp/v1/deals/{dealId}/steps?offset={offset}&limit={limit}' \
--header 'Authorization: Bearer {access-token}' \
--header 'Accept: application/json'
```
---
## Параметры ответа
### Пример ответа 200 (OK)
```json
[
{
"stepId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"stepNumber": 1,
"description": "Этап 1",
"status": "DRAFT",
"isValid": false
}
]
```
### BODY (200 OK)
| Атрибут | Тип | Описание |
| :-------------- | :----------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **stepId** | string (required) | Идентификатор этапа сделки |
| **stepNumber** | integer (required) | Порядковый номер этапа сделки |
| **description** | string (required) | Описание этапа сделки |
| **status** | string (required) | Статус этапа сделки. Возможные значения:<br>• `DRAFT` — принят для последующей обработки;<br>• `ACTIVE` — успешно обработан;<br>• `BLOCKED` — ошибка в процессе обработки;<br>• `IN_PROGRESS` — в процессе обработки;<br>• `PAYMENT_FAILED` — платёж завершился неудачей;<br>• `CLOSED` — отменен;<br>• `COMPLETED` — успешно завершен |
| **isValid** | boolean (required) | Флаг валидности этапа сделки |
---
## Ошибки
| Код | Описание | Тело ответа (error) |
| :------ | :-------------------- | :----------------------------------------------------------------------------- |
| **400** | Bad Request | `invalid_request` — неверные входные параметры запроса |
| **401** | Unauthorized | `invalid_token` — токен просрочен, отозван или недействителен |
| **403** | Forbidden | `insufficient_scope` — нет прав на использование сервиса (недостаточный scope) |
| **404** | Not Found | `unknown_endpoint` — эндпоинт не найден или неактивен |
| **429** | Too Many Requests | Нет тела ответа |
| **500** | Internal Server Error | `internal_error` — внутренняя ошибка сервиса |
| **503** | Service Unavailable | Нет тела ответа |
---
**Навигация:**
- Предыдущий метод: [Получение статуса запроса на завершение этапа сделки](/products/alfa-api/documentation/articles/nominal-accounts/articles/deals/articles/get-deal-request-status/v1/get-deal-request-status)
- Следующий метод: [Получение информации об этапе сделки](/products/alfa-api/documentation/articles/nominal-accounts/articles/deals/articles/get-step/v1/get-step)

View File

@@ -0,0 +1,87 @@
# Как это работает
**Теги:** H2H
> **Примечание**
> Депонент — это участник сделки, который выступает в качестве плательщика, реципиент — это получатель денежных средств.
Механизм безопасных сделок используется для осуществления расчётов, при которых средства депонента временно холдируются и переходят к реципиенту только после выполнения условия сделки. При этом Банк ведет учёт (биллинг) денежных средств каждого бенефициара.
Для работы с безопасными сделками предварительно необходимо:
1. [Зарегистрировать контрагентов, участвующих в сделке, и их платёжные реквизиты](/products/alfa-api/documentation/articles/nominal-accounts/articles/counterparties/articles/intro/intro).
2. [Идентифицировать денежные средства, поступившие на номинальный счёт](/products/alfa-api/documentation/articles/nominal-accounts/articles/identify-transactions/articles/intro/intro).
> **Важно**
> В рамках этапа сделки выполнять платежи от бенефициара самому себе нельзя. Совершить такой перевод можно напрямую без создания сделки, используя метод [«Создание запроса на выплату с номинального счёта»](/products/alfa-api/documentation/articles/nominal-accounts/articles/na-payments/articles/payoff/v1/payoff).
---
### Механизм работы сделок
1. **Зарегистрируйте сделку**
Создайте черновик сделки для дальнейшего её наполнения этапами и участниками с помощью метода [«Регистрация сделки»](/products/alfa-api/documentation/articles/nominal-accounts/articles/deals/articles/add-deal/v1/add-deal).
2. **Создайте этапы сделки**
Используйте метод [«Выполнение действия по этапам сделки»](/products/alfa-api/documentation/articles/nominal-accounts/articles/deals/articles/add-step/v1/add-step).
_Внимание!_ Каждая сделка должна содержать не менее одного этапа.
3. **Добавьте депонента в этапы сделки**
Добавьте информацию о бенефициаре (плательщике) этапа с помощью метода [«Выполнение действия по участникам этапа сделки»](/products/alfa-api/documentation/articles/nominal-accounts/articles/deals/articles/step-contractors/v1/step-contractors).
_Внимание!_ В одном этапе сделки может быть указан только один депонент (плательщик).
4. **Добавьте реципиентов в этапы сделки**
Добавьте информацию о получателях денежных средств с помощью метода [«Выполнение действия по участникам этапа сделки»](/products/alfa-api/documentation/articles/nominal-accounts/articles/deals/articles/step-contractors/v1/step-contractors). Реципиентами могут быть бенефициары или универсальные реципиенты.
_Внимание!_ В одном этапе сделки может быть несколько реципиентов.
5. **Проверьте возможность выплат по сформированной сделке**
Проверьте правильность наполнения с помощью метода [«Проверка возможности осуществления выплат по сделке»](/products/alfa-api/documentation/articles/nominal-accounts/articles/deals/articles/deal-is-valid/v1/deal-is-valid). Для перехода к следующему шагу необходимо получить в ответе `isValid = true`.
6. **Подтвердите сделку**
Подтвердите создание с помощью метода [«Выполнение действия по сделке»](/products/alfa-api/documentation/articles/nominal-accounts/articles/deals/articles/deal-actions/v1/deal-actions). Статус изменится с `DRAFT` на `ACTIVE`.
_Внимание!_ При подтверждении сделки денежные средства депонентов холдируются.
7. **Завершите этапы сделки**
Для проведения расчётов инициируйте завершение этапа через метод [«Выполнение действия по этапам сделки»](/products/alfa-api/documentation/articles/nominal-accounts/articles/deals/articles/add-step/v1/add-step).
Для контроля используйте метод [«Получение статуса запроса на завершение этапа сделки»](/products/alfa-api/documentation/articles/nominal-accounts/articles/deals/articles/get-deal-request-status/v1/get-deal-request-status). При завершении этапа осуществляются выплаты.
8. **Завершите сделку**
Используйте метод [«Выполнение действия по сделке»](/products/alfa-api/documentation/articles/nominal-accounts/articles/deals/articles/deal-actions/v1/deal-actions). Статус изменится с `ACTIVE` на `COMPLETED`.
---
### Отмена сделки
Для отмены используйте метод [«Выполнение действия по сделке»](/products/alfa-api/documentation/articles/nominal-accounts/articles/deals/articles/deal-actions/v1/deal-actions).
> **Важно**
> Отменить сделку можно только при условии, что ни один из её этапов не был завершён. При отмене ранее захолдированные средства депонентов будут расхолдированы.
---
### Информация о сделках и выплатах по ним
**По сделкам:**
- [Получение информации о сделке](/products/alfa-api/documentation/articles/nominal-accounts/articles/deals/articles/get-deal/v1/get-deal)
- [Получение списка сделок](/products/alfa-api/documentation/articles/nominal-accounts/articles/deals/articles/get-deals/v1/get-deals)
**По этапам:**
- [Получение информации об этапе сделки](/products/alfa-api/documentation/articles/nominal-accounts/articles/deals/articles/get-step/v1/get-step)
- [Получение списка этапов сделки](/products/alfa-api/documentation/articles/nominal-accounts/articles/deals/articles/get-steps/v1/get-steps)
**По участникам:**
- [Получить информацию об участниках этапа сделки](/products/alfa-api/documentation/articles/nominal-accounts/articles/deals/articles/get-contractors/v1/get-contractors)
**По переводам (платежам):**
- [Получение списка платежей по сделке](/products/alfa-api/documentation/articles/nominal-accounts/articles/deals/articles/get-deal-payoffs/v1/get-deal-payoffs)
---
**Навигация:**
- Назад: [Получение статуса запроса на возврат неидентифицированного пополнения](/products/alfa-api/documentation/articles/nominal-accounts/articles/identify-transactions/articles/get-transaction-refund-request-status/v1/get-transaction-refund-request-status)
- Вперед: [Регистрация сделки](/products/alfa-api/documentation/articles/nominal-accounts/articles/deals/articles/add-deal/v1/add-deal)

View File

@@ -0,0 +1,137 @@
# Выполнение действия по участникам этапа сделки
**Метка:** `H2H`
## Эндпоинты
| Среда | Метод и URL |
| :------------ | :----------------------------------------------------------------------- |
| **Песочница** | `PATCH https://sandbox.alfabank.ru/api/na/jp/v1/deals/steps/contractors` |
| **Пром** | `PATCH https://baas.alfabank.ru/api/na/jp/v1/deals/steps/contractors` |
**Scope:** `deals`
## Описание
> **Внимание**
> Действия с участниками сделки возможны только для сделки в статусе `DRAFT`.
Метод позволяет добавить, изменить или удалить участника сделки.
### Добавление участника сделки
Каждый этап сделки должен содержать участников. При добавлении необходимо учитывать:
- В рамках одного этапа может быть добавлен только один депонент, реципиентов может быть несколько.
- В качестве депонента может выступать только бенефициар, в качестве реципиента – бенефициар или универсальный реципиент.
- При добавлении универсального реципиента необходимо передавать его идентификатор `universalRecipientId` в параметр `beneficiaryId`.
- Если не указан идентификатор платёжного реквизита `requisiteId`, система будет использовать [ранее зарегистрированный платёжный реквизит](/products/alfa-api/documentation/articles/nominal-accounts/articles/counterparties/articles/beneficiaries/articles/add-requisites/v1/add-requisites), который считается основным (`isMain = true`).
### Изменение участника сделки
- **Для депонента:** можно изменить сумму депонированных средств.
- **Для реципиента:** можно изменить суммы, назначение платежа, признак вывода денег на виртуальный счёт и идентификатор платёжных реквизитов.
### Удаление участника сделки
Позволяет удалить депонента или реципиента из этапа сделки.
---
## Параметры запроса
### Headers
| Атрибут | Тип | Описание |
| :---------------- | :------------------ | :---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Authorization** | `string` (required) | Bearer {access_token}, полученный по [Authorization Code Flow H2H](/products/alfa-api/documentation/articles/alfa-id/articles/acf-h2h/articles/intro/intro) |
| **Accept** | `string` (required) | application/json |
| **Content-Type** | `string` (required) | application/json |
### Body
| Атрибут | Тип | Описание |
| :----------------------- | :---------------------------- | :-------------------------------------------------------------------------------------------------------------------------- |
| **action** | `string` (required) | Тип действия: `ADD_DEPONENT`, `ADD_RECIPIENT`, `DELETE_DEPONENT`, `DELETE_RECIPIENT`, `UPDATE_DEPONENT`, `UPDATE_RECIPIENT` |
| **dealId** | `string` (required) | Идентификатор сделки |
| **stepId** | `string` (required) | Идентификатор этапа сделки |
| **beneficiaryId** | `string` (required) | Идентификатор бенефициара или универсального реципиента |
| **amount** | `string` (optional) | Сумма депонирования в рублях. Доступно только для депонента |
| **purpose** | `string` (optional) | Назначение платежа реципиента. Доступно только для реципиента |
| **amounts** | `array of objects` (optional) | Суммы реципиента. Доступно только для реципиента (см. ниже) |
| **keepOnNominalAccount** | `boolean` (optional) | Признак вывода на вирт. счёт: `true` — оставить на ном. счёте; `false` — вывести на реквизиты |
| **requisiteId** | `string` (optional) | Идентификатор платёжного реквизита контрагента |
| **digestSignatures** | `array of objects` (required) | Электронная подпись УЛ Клиента (см. ниже) |
#### Объект `amounts` (внутри Body)
| Атрибут | Тип | Описание |
| :------------- | :------------------ | :------------------------------------------------- |
| **walletType** | `string` (optional) | Тип кошелька: `MAIN` (основной), `TAX` (налоговый) |
| **amount** | `string` (optional) | Сумма в рублях |
#### Объект `digestSignatures` (внутри Body)
| Атрибут | Тип | Описание |
| :---------------- | :------------------ | :------------------------------------ |
| **base64Encoded** | `string` (required) | Значение подписи в Base64 |
| **signatureType** | `string` (required) | Тип подписи: `rsa` (RSA), `kep` (КЭП) |
---
## Пример запроса (cURL)
```bash
curl --location --request PATCH 'https://baas.alfabank.ru/api/na/jp/v1/deals/steps/contractors' \
--header 'Authorization: Bearer {access-token}' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--data '{
"action": "ADD_DEPONENT",
"dealId": "ab9cbb96-360a-4462-a683-955cc29f7f54",
"stepId": "ab9cbb96-360a-4462-a683-955cc29f7f54",
"beneficiaryId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"amount": "10.00",
"purpose": "Назначение платежа",
"amounts": [
{
"walletType": "MAIN",
"amount": "10.00"
}
],
"keepOnNominalAccount": true,
"requisiteId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"digestSignatures": [
{
"base64Encoded": "SEwHwYDVQQDExhDUllQVE8tUFJPIFRlc3QgQ2VudGVyIDICExIAVH4YMX0u3fEONSkAAQBUfhgwCgYIKoUDBwEBAQEEQBU0EntPGWz8EfJ5CFL2m10xeBrkAEeWDglGQDZWLKQ0ff4TyBT9X1NhG/+ETj4TcQhExy6k+WZ9w/CpF5FjyyA=",
"signatureType": "rsa"
}
]
}'
```
---
## Параметры ответа
| Код | Статус | Описание |
| :------ | :-------------------- | :-------------------------------------------- |
| **204** | No Content | Успешное выполнение. Тело ответа отсутствует. |
| **400** | Bad Request | Неверные входные параметры. |
| **401** | Unauthorized | Токен просрочен или недействителен. |
| **403** | Forbidden | Недостаточно прав (insufficient_scope). |
| **404** | Not Found | Эндпоинт не найден. |
| **429** | Too Many Requests | Слишком много запросов. |
| **500** | Internal Server Error | Внутренняя ошибка сервиса. |
| **503** | Service Unavailable | Сервис временно недоступен. |
### Структура ошибки (400, 401, 403, 404, 500)
| Атрибут | Тип | Описание |
| :-------------------- | :------- | :------------------------------------------------------------------------------ |
| **error** | `string` | Код ошибки (например, `invalid_request`, `invalid_token`, `insufficient_scope`) |
| **error_description** | `string` | Подробное описание ошибки |
---
_Документация Alfa API_

View File

@@ -0,0 +1,87 @@
# Получение статуса запроса на выплату с номинального счёта
**Тип интеграции:** H2H
**Scope:** `beneficiary-payments`
## Описание
Метод позволяет получить статус запроса на выплату с номинального счёта по идентификатору `payoffId`.
---
## Эндпоинты
| Окружение | Метод | URL |
| :--- | :--- | :--- |
| **Песочница** | `GET` | `https://sandbox.alfabank.ru/api/na/jp/v1/payoffs/{payoffId}/status` |
| **Пром** | `GET` | `https://baas.alfabank.ru/api/na/jp/v1/payoffs/{payoffId}/status` |
---
## Параметры запроса
### HEADERS
| Атрибут | Тип | Обязательность | Описание |
| :--- | :--- | :--- | :--- |
| **Authorization** | `string` | required | Bearer {access_token}, полученный по [Authorization Code Flow H2H](/products/alfa-api/documentation/articles/alfa-id/articles/acf-h2h/articles/intro/intro) |
| **Accept** | `string` | required | `application/json` |
### PATH
| Атрибут | Тип | Обязательность | Описание |
| :--- | :--- | :--- | :--- |
| **payoffId** | `string` | required | Идентификатор запроса, полученный с помощью метода [«Создание запроса на выплату с номинального счёта»](/products/alfa-api/documentation/articles/nominal-accounts/articles/na-payments/articles/payoff/v1/payoff) |
### Пример запроса (cURL)
```bash
curl --location --globoff 'https://baas.alfabank.ru/api/na/jp/v1/payoffs/{payoffId}/status' \
--header 'Authorization: Bearer {access-token}' \
--header 'Accept: application/json'
```
---
## Параметры ответа
### Успешный ответ (200 OK)
**Пример тела ответа:**
```json
{
"payoffId": "ab9cbb96-360a-4462-a683-955cc29f7f54",
"status": "PENDING",
"description": "Произошла техническая ошибка. Обратитесь в службу поддержки и сообщите код ошибки afc9b019-77ac-49ef-afb9-688b38b74cc2"
}
```
**Описание полей BODY:**
| Атрибут | Тип | Обязательность | Описание |
| :--- | :--- | :--- | :--- |
| **payoffId** | `string` | required | Идентификатор запроса |
| **status** | `string` | required | Статус запроса (см. ниже) |
| **description** | `string` | optional | Описание причины, по которой запрос завершился неудачей. Возвращается, если статус равен `FAILED` |
#### Возможные значения поля `status`:
* `PENDING` — запрос в процессе обработки;
* `MANUAL_ACCEPTANCE` — ожидание ручного подтверждения отправки запроса-дубля на обработку;
* `AWAIT_EXTERNAL` — ожидание исполнения внешнего платежа;
* `FAILED` — обработка запроса завершилась ошибкой;
* `FAILED_DUPLICATE` — обработка запроса-дубля отклонена;
* `COMPLETE` — обработка запроса завершилась успешно.
---
## Коды ошибок
| Код | Описание | Возможные значения `error` / Примечание |
| :--- | :--- | :--- |
| **400** | Bad Request | `invalid_request` — неверные входные параметры запроса |
| **401** | Unauthorized | `invalid_token` — токен просрочен, отозван или недействителен |
| **403** | Forbidden | `insufficient_scope` — нет прав (scope) на использование сервиса |
| **404** | Not Found | `unknown_endpoint` — эндпоинт не найден или неактивен |
| **429** | Too Many Requests | Нет тела ответа. Превышен лимит запросов |
| **500** | Internal Server Error | `internal_error` — внутренняя ошибка сервиса |
| **503** | Service Unavailable | Нет тела ответа. Сервис временно недоступен |
---
## Дополнительные ссылки
* [Предыдущий шаг: Создание запроса на выплату](/products/alfa-api/documentation/articles/nominal-accounts/articles/na-payments/articles/payoff/v1/payoff)
* [Следующий шаг: Подтверждение или отклонение запроса-дубля](/products/alfa-api/documentation/articles/nominal-accounts/articles/na-payments/articles/payoff-accept/v1/payoff-accept)

View File

@@ -0,0 +1,125 @@
# Получение информации о платеже
**Контекст:** Номинальные счета / Выплаты
**Тип интеграции:** H2H
**Scope:** `beneficiary-payments`
## Эндпоинты
| Окружение | Метод | URL |
| :------------ | :---- | :------------------------------------------------------------ |
| **Песочница** | `GET` | `https://sandbox.alfabank.ru/api/na/jp/v1/payoffs/{payoffId}` |
| **Пром** | `GET` | `https://baas.alfabank.ru/api/na/jp/v1/payoffs/{payoffId}` |
## Описание
Метод позволяет получить информацию о платеже по его идентификатору `payoffId`.
---
## Параметры запроса
### Headers
| Атрибут | Тип | Обязательность | Описание |
| :---------------- | :----- | :------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Authorization** | string | required | Bearer {access_token}, полученный по [Authorization Code Flow H2H](/products/alfa-api/documentation/articles/alfa-id/articles/acf-h2h/articles/intro/intro) |
| **Accept** | string | required | `application/json` |
### Path
| Атрибут | Тип | Обязательность | Описание |
| :----------- | :----- | :------------- | :-------------------- |
| **payoffId** | string | required | Идентификатор платежа |
### Пример запроса (cURL)
```bash
curl --location --globoff 'https://baas.alfabank.ru/api/na/jp/v1/payoffs/{payoffId}' \
--header 'Authorization: Bearer {access-token}' \
--header 'Accept: application/json'
```
---
## Параметры ответа
### Успешный ответ (200 OK)
#### Тело ответа (JSON)
| Атрибут | Тип | Обязательность | Описание |
| :---------------- | :----- | :------------- | :---------------------------------------------------------------------------------- |
| **dealId** | string | optional | Идентификатор сделки |
| **stepId** | string | optional | Идентификатор этапа |
| **paymentType** | string | optional | Тип платежа: `REGULAR` (обычный), `DEAL` (выплата внутри сделки), `TAX` (налоговый) |
| **requisiteType** | string | optional | Тип реквизита: `ACCOUNT` (счёт), `CARD` (токен карты), `PHONE` (номер телефона) |
| **payer** | object | optional | Информация о плательщике (см. ниже) |
| **recipient** | object | optional | Информация о получателе (см. ниже) |
| **amount** | string | optional | Сумма в рублях |
| **purpose** | string | optional | Назначение платежа |
| **status** | string | optional | Статус: `IN_PROGRESS` (в обработке), `FAILED` (ошибка), `READY` (успешно завершён) |
#### Объект `payer` (Плательщик)
| Атрибут | Тип | Обязательность | Описание |
| :---------------- | :----- | :------------- | :----------------------- |
| **accountNumber** | string | required | Номер счёта |
| **name** | string | required | Наименование организации |
| **inn** | string | required | ИНН |
| **kpp** | string | required | КПП |
#### Объект `recipient` (Получатель)
| Атрибут | Тип | Обязательность | Описание |
| :---------------- | :----- | :------------- | :------------------------ |
| **beneficiaryId** | string | optional | Идентификатор бенефициара |
| **accountNumber** | string | optional | Номер счёта |
| **bik** | string | optional | БИК банка |
| **name** | string | optional | ФИО реципиента |
| **inn** | string | optional | ИНН |
### Пример успешного ответа
```json
{
"dealId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"stepId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"paymentType": "REGULAR",
"requisiteType": "ACCOUNT",
"payer": {
"accountNumber": "40817810306050000000",
"name": "Акционерное общество «Ромашка»",
"inn": "1122334455",
"kpp": "123456789"
},
"recipient": {
"beneficiaryId": "ab9cbb96-360a-4462-a683-955cc29f7f54",
"accountNumber": "40817810306050000000",
"bik": "044525593",
"name": "Иванов Иван Иванович",
"inn": "112233445566"
},
"amount": "10.00",
"purpose": "Назначение платежа",
"status": "IN_PROGRESS"
}
```
---
## Коды ошибок
| Код | Описание | Возможные значения `error` |
| :------ | :-------------------- | :--------------------------------------------------------- |
| **400** | Bad Request | `invalid_request` — неверные входные параметры |
| **401** | Unauthorized | `invalid_token` — токен просрочен или недействителен |
| **403** | Forbidden | `insufficient_scope` — недостаточно прав (проверьте scope) |
| **404** | Not Found | `unknown_endpoint` — эндпоинт не найден |
| **429** | Too Many Requests | Нет тела ответа (превышен лимит запросов) |
| **500** | Internal Server Error | `internal_error` — внутренняя ошибка сервиса |
| **503** | Service Unavailable | Нет тела ответа (сервис временно недоступен) |
---
_Документация Alfa API_

View File

@@ -0,0 +1,96 @@
# Получение статуса запроса на возврат налоговых денежных средств
**Тип интеграции:** H2H
**Продукт:** Номинальные счета
**Scope:** `beneficiary-payments`
## Эндпоинты
| Среда | Метод | URL |
| :------------ | :---- | :------------------------------------------------------------------------- |
| **Песочница** | `GET` | `https://sandbox.alfabank.ru/api/na/jp/v1/tax-refund/{taxRefundId}/status` |
| **Пром** | `GET` | `https://baas.alfabank.ru/api/na/jp/v1/tax-refund/{taxRefundId}/status` |
---
## Описание
Метод позволяет получить статус запроса на возврат бенефициару его денежных средств с налогового кошелька по идентификатору `taxRefundId`.
---
## Параметры запроса
### HEADERS
| Атрибут | Тип | Обязательность | Описание |
| :---------------- | :----- | :------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Authorization** | string | required | Bearer {access_token}, полученный по [Authorization Code Flow H2H](/products/alfa-api/documentation/articles/alfa-id/articles/acf-h2h/articles/intro/intro) |
| **Accept** | string | required | `application/json` |
### PATH
| Атрибут | Тип | Обязательность | Описание |
| :-------------- | :----- | :------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **taxRefundId** | string | required | Идентификатор запроса, полученный с помощью метода [«Создание запроса на возврат денежных средств с налогового виртуального кошелька»](/products/alfa-api/documentation/articles/nominal-accounts/articles/na-payments/articles/tax-refund/v1/tax-refund) |
### Пример запроса (cURL)
```bash
curl --location --globoff 'https://baas.alfabank.ru/api/na/jp/v1/tax-refund/{taxRefundId}/status' \
--header 'Authorization: Bearer {access-token}' \
--header 'Accept: application/json'
```
---
## Параметры ответа
### Успешный ответ (200 OK)
**Пример тела ответа:**
```json
{
"taxRefundId": "ab9cbb96-360a-4462-a683-955cc29f7f54",
"status": "FAILED",
"description": "Произошла техническая ошибка. Обратитесь в службу поддержки и сообщите код ошибки afc9b019-77ac-49ef-afb9-688b38b74cc2"
}
```
**Описание полей BODY:**
| Атрибут | Тип | Обязательность | Описание |
| :--- | :--- | :--- | :--- |
| **taxRefundId** | string | required | Идентификатор запроса |
| **status** | string | required | Статус запроса (см. ниже) |
| **description** | string | optional | Описание причины неудачи. Возвращается только при статусе `FAILED` |
#### Возможные значения статуса (`status`):
- `PENDING` — запрос в процессе обработки;
- `MANUAL_ACCEPTANCE` — ожидание ручного подтверждения отправки запроса-дубля на обработку;
- `AWAIT_EXTERNAL` — ожидание исполнения внешнего платежа;
- `FAILED` — обработка запроса завершилась ошибкой;
- `FAILED_DUPLICATE` — обработка запроса-дубля отклонена;
- `COMPLETE` — обработка запроса завершилась успешно.
---
## Ошибки
| Код | Описание | Тело ответа (error) |
| :------ | :-------------------- | :------------------------------------------------------------------- |
| **400** | Bad Request | `invalid_request` — неверные входные параметры запроса |
| **401** | Unauthorized | `invalid_token` — токен просрочен, отозван или недействителен |
| **403** | Forbidden | `insufficient_scope` — недостаточно прав (проверьте настройки scope) |
| **404** | Not Found | `unknown_endpoint` — эндпоинт не найден или неактивен |
| **429** | Too Many Requests | Нет тела ответа |
| **500** | Internal Server Error | `internal_error` — внутренняя ошибка сервиса |
| **503** | Service Unavailable | Нет тела ответа |
---
## Навигация
- **Предыдущий метод:** [Создание запроса на возврат налоговых денежных средств](/products/alfa-api/documentation/articles/nominal-accounts/articles/na-payments/articles/tax-refund/v1/tax-refund)
- **Следующий метод:** [Подтверждение или отклонение запроса-дубля на возврат налоговых денежных средств](/products/alfa-api/documentation/articles/nominal-accounts/articles/na-payments/articles/tax-refund-accept/v1/tax-refund-accept)

Some files were not shown because too many files have changed in this diff Show More