Developers API & Widget
API Reference
RU

OAuth

Настройте поток OAuth

Пользователь проходит аутентификацию в Wealth Reader, возвращается на ваш redirect_uri с code, а вы обмениваете его на тот же JSON, что и в callback iframe.

Используйте этот путь, если нельзя встроить iframe (нативное приложение или поток с перенаправлением). Если веб-приложение может разместить iframe, используйте вместо этого iframe frontend.

Краткий путь

  1. Авторизуйте домен с access_type=oauth.
  2. Сгенерируйте nonce, state и code_verifier. Вычислите challenge_code. Закодируйте wr_conf в шестнадцатеричный вид. Сохраните nonce и code_verifier.
  3. Перенаправьте пользователя на https://oauth.wealthreader.com/oauth2/ с этими параметрами.
  4. Примите GET на своём redirect_uri с nonce и code.
  5. Сделайте POST на https://oauth.wealthreader.com/token/ и получите банковский payload.

1. Авторизуйте домен

domain должен быть тем же URL, который вы будете использовать как redirect_uri и как url_callback.

curl --location 'https://api.wealthreader.com/domains/' \
  --header 'Content-Type: application/x-www-form-urlencoded' \
  --data-urlencode 'method=add' \
  --data-urlencode 'api_key=YOUR_API_KEY' \
  --data-urlencode 'domain=https://example.com/oauth/success.php' \
  --data-urlencode 'url_callback=https://example.com/oauth/success.php' \
  --data-urlencode 'access_type=oauth' \
  --data-urlencode 'tokenize=1'

Домен также можно зарегистрировать в кабинете клиента, выбрав интеграцию OAuth.

2. Сгенерируйте значения challenge

Сгенерируйте три случайные 41-символьные буквенно-цифровые строки (A-Za-z0-9) и преобразуйте их в шестнадцатеричный вид (bin2hex). Каждое шестнадцатеричное значение имеет длину 82 символа.

Значение Как получить Отправляется в
redirect_uri Ваш URL возврата, тот же, что вы авторизовали query и POST /token/
nonce 41 символ → hex query; возвращается в GET
state 41 символ → hex query
code_verifier 41 символ → hex только POST /token/ (не в query)
challenge_code SHA-256 от code_verifier (hex digest) query, как challenge_code
wr_conf JSON конфигурации селектора → hex query

wr_conf принимает те же поля, что и iframe frontend. Пример до преобразования в шестнадцатеричный вид:

{
  "operation_id": "op_a1b2c3d4e5f6",
  "entities_to_display": [],
  "wait_full_response": true
}

Шестнадцатеричное представление этого JSON:

7b226f7065726174696f6e5f6964223a226f705f613162326333643465356636222c22656e7469746965735f746f5f646973706c6179223a5b5d2c22776169745f66756c6c5f726573706f6e7365223a747275657d

Преобразование wr_conf в шестнадцатеричный вид не генерирует nonce, state или code_verifier. Эти три значения создаются отдельно, и вы должны сохранить их (с ключом nonce) до POST /token/.

Пример на PHP, эквивалентный тому, что мы используем внутри:

function randomAlnum($length)
{
    $alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
    $value = '';
    for ($i = 0; $i < $length; $i++) {
        $value .= $alphabet[random_int(0, strlen($alphabet) - 1)];
    }
    return $value;
}

$nonce = bin2hex(randomAlnum(41));
$state = bin2hex(randomAlnum(41));
$code_verifier = bin2hex(randomAlnum(41));
$challenge_code = hash('sha256', $code_verifier);

$wr_conf = bin2hex(json_encode([
    'operation_id' => 'op_a1b2c3d4e5f6',
    'entities_to_display' => [],
    'wait_full_response' => true,
]));

3. Перенаправьте пользователя

Соберите query и выполните перенаправление. Пример с согласованными значениями:

https://oauth.wealthreader.com/oauth2/?challenge_code=c725133644f703a5f069a09583fa981eb5b8820071a4450f8d47ff8b1c6a879a
&code_challenge_method=S256
&redirect_uri=https://example.com/oauth/success.php
&response_type=code
&state=73684148464b3778795873626d724e62734749724336685a7a687854336c317934524f516831316a45
&nonce=696d6a716d4a47746d714e52656562496f61786468765a30335a4b4a646d6c546c5339654e42586573
&wr_conf=7b226f7065726174696f6e5f6964223a226f705f613162326333643465356636222c22656e7469746965735f746f5f646973706c6179223a5b5d2c22776169745f66756c6c5f726573706f6e7365223a747275657d

Пользователь видит селектор банков, проходит аутентификацию, и по завершении Wealth Reader возвращает его на ваш redirect_uri.

4. Примите GET на redirect_uri

https://example.com/oauth/success.php?nonce=696d6a716d4a47746d714e52656562496f61786468765a30335a4b4a646d6c546c5339654e42586573
&code=1234567890abcdef1234567890abcdef1234567890a

По nonce восстановите code_verifier, сохранённый на шаге 2. Если nonce выдан не вами, отбросьте запрос.

5. Завершите challenge

curl --location --request POST 'https://oauth.wealthreader.com/token/' \
  --header 'Content-Type: application/x-www-form-urlencoded' \
  --data-urlencode 'grant_type=authorization_code' \
  --data-urlencode 'redirect_uri=https://example.com/oauth/success.php' \
  --data-urlencode 'code=1234567890abcdef1234567890abcdef1234567890a' \
  --data-urlencode 'code_verifier=6634413364504337675230375a624671644f644d42414241303037737374684f494877477649723433'
Поле Значение
grant_type authorization_code
redirect_uri Точно тот же, что на шаге 3
code Тот, что пришёл в GET
code_verifier Шестнадцатеричное значение, сгенерированное на шаге 2

Если значения совпадают, ответом будет банковский JSON (та же схема, что у callback iframe): success, payload и statistics (operation_id, token, code).

Сохраните token и code, если позже будете обновлять данные через POST https://api.wealthreader.com/entities/.

Пример кода

Есть пример на Java (JBang / Java 17), который генерирует параметры и завершает challenge:

Скачать пример на Java (ZIP)

Если нужен тот же поток на другом языке, напишите на support@wealthreader.com.

Последнее обновление