OAuth
Configure o fluxo OAuth
O utilizador autentica-se no Wealth Reader, regressa ao seu redirect_uri com um code e você troca-o pelo mesmo JSON que o callback do iframe.
Use este caminho se não puder incorporar o iframe (aplicação nativa ou um fluxo por redirecionamento). Se a sua aplicação web puder alojar um iframe, use em vez disso iframe frontend.
Caminho rápido
- Autorize o domínio com
access_type=oauth. - Gere
nonce,stateecode_verifier. Calculechallenge_code. Codifiquewr_confem hexadecimal. Guardenonceecode_verifier. - Redirecione o utilizador para
https://oauth.wealthreader.com/oauth2/com esses parâmetros. - Receba um
GETno seuredirect_uricomnonceecode. - Faça
POSTparahttps://oauth.wealthreader.com/token/e obtenha o payload bancário.
1. Autorizar o domínio
domain tem de ser o mesmo URL que usará como redirect_uri e como 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'
Também pode registar o domínio a partir da área de clientes escolhendo a integração OAuth.
2. Gerar os valores do desafio
Gere três cadeias alfanuméricas aleatórias de 41 caracteres (A-Za-z0-9) e converta-as em hexadecimal (bin2hex). Cada valor hexadecimal tem 82 caracteres.
| Valor | Como obtê-lo | Enviado em |
|---|---|---|
redirect_uri |
O seu URL de regresso, o mesmo que autorizou | query e POST /token/ |
nonce |
41 chars → hex | query; devolvido no GET |
state |
41 chars → hex | query |
code_verifier |
41 chars → hex | apenas POST /token/ (não vai na query) |
challenge_code |
SHA-256 de code_verifier (digest hex) |
query, como challenge_code |
wr_conf |
JSON de configuração do seletor → hex | query |
wr_conf aceita os mesmos campos que iframe frontend. Exemplo antes de converter para hexadecimal:
{
"operation_id": "op_a1b2c3d4e5f6",
"entities_to_display": [],
"wait_full_response": true
}
Hexadecimal desse JSON:
7b226f7065726174696f6e5f6964223a226f705f613162326333643465356636222c22656e7469746965735f746f5f646973706c6179223a5b5d2c22776169745f66756c6c5f726573706f6e7365223a747275657d
Converter wr_conf para hexadecimal não gera nonce, state nem code_verifier. Esses três valores criam-se à parte e tem de os persistir (indexados por nonce) até ao POST /token/.
Exemplo em PHP, equivalente ao que usamos internamente:
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. Redirecionar o utilizador
Construa a query e redirecione. Exemplo com valores coerentes entre si:
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
O utilizador vê o seletor de bancos, autentica-se e, quando termina, o Wealth Reader devolve-o ao seu redirect_uri.
4. Receber o GET em redirect_uri
https://example.com/oauth/success.php?nonce=696d6a716d4a47746d714e52656562496f61786468765a30335a4b4a646d6c546c5339654e42586573
&code=1234567890abcdef1234567890abcdef1234567890a
Use o nonce para recuperar o code_verifier que guardou no passo 2. Se o nonce não for um que tenha emitido, descarte o pedido.
5. Completar o desafio
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'
| Campo | Valor |
|---|---|
grant_type |
authorization_code |
redirect_uri |
Exatamente o mesmo do passo 3 |
code |
O do GET |
code_verifier |
O valor hexadecimal que gerou no passo 2 |
Se os valores coincidirem, a resposta é o JSON bancário (o mesmo esquema que o callback do iframe): success, payload e statistics (operation_id, token, code).
Guarde token e code se mais tarde for atualizar com POST https://api.wealthreader.com/entities/.
Código de exemplo
Há um exemplo em Java (JBang / Java 17) que gera os parâmetros e completa o desafio:
Descarregar exemplo em Java (ZIP)
Se precisar do mesmo fluxo noutra linguagem, escreva para support@wealthreader.com.