Criar o OAuth
No painel, em Integrações e API › OAuth › Criar OAuth (pede o código do app autenticador):- Nome do seu sistema (aparece para quem for entrar).
- Link de retorno, até 5: para onde a pessoa volta depois de autorizar. Endereço
httpscompleto (ouhttp://localhostpara testar), sem#e sem*. O pedido precisa mandar exatamente um deles. - Escopos:
profilevem sempre; marqueavatarse quiser a foto do perfil ereports:readse o seu sistema precisa do resumo de vendas. O sistema só consegue pedir o que estiver marcado.
bkc_...) e o Client Secret (bks_...). Na tabela, o secret fica borrado com o botão de mostrar. Guarde o secret só no servidor do seu sistema, nunca no site, no app ou no navegador.
O botão pronto
Em cada OAuth da tabela, o botão Pegar o botão entrega:- o HTML do botão “Entrar com a WyzeCash”, para colar no seu site;
- o link de autorização já com o seu Client ID, o link de retorno e os escopos;
- um exemplo da rota do seu servidor que monta o link final.
O link não pode ser fixo: o
state e o code_challenge mudam a cada login, por segurança. Por isso o botão aponta para uma rota do seu servidor (ex.: /entrar-com-bukiopay), que gera os dois, guarda na sessão e redireciona para a WyzeCash.O fluxo
É o OAuth 2.0 com código de autorização e PKCE (S256) obrigatório.1
Mande a pessoa para autorizar
Gere um Sem sessão, ela entra primeiro (com o 2FA, se tiver) e volta para a autorização. Ela vê o nome do seu sistema, quem criou, para onde vai voltar e o que você vai ver.
code_verifier aleatório (43 a 128 caracteres de A-Z a-z 0-9 - . _ ~) e um state aleatório, e guarde os dois na sessão. Calcule o code_challenge = SHA-256 do verifier em base64url e leve a pessoa para:2
Receba o código
Ao permitir, ela volta para o seu link com
?code=...&state=.... Confira se o state é o mesmo que você guardou. Se ela cancelar, volta com ?error=access_denied&state=....O code vale 60 segundos e uma vez só.3
Troque o código pelo token (no servidor)
application/x-www-form-urlencoded (JSON também é aceito). O Client ID e o Client Secret vão no Authorization: Basic ou no corpo (client_id, client_secret), nunca nos dois.4
Leia o nome e o resumo
sub é o ID dessa conta só para o seu sistema (outro sistema vê outro ID). Use ele para ligar a pessoa ao cadastro do seu lado. O picture só vem com o escopo avatar (e é null se a pessoa não tem foto); quando ela troca a foto, o endereço muda, então leia de novo no próximo login.transactions são as vendas pagas no período (Pix, cartão e cripto) e amount o valor bruto delas, em centavos. Os dias são de Brasília; sem from e to, os últimos 30 dias; no máximo 366 dias por consulta.Renovar o token
O token de acesso vale 1 hora. Para outro, use orefresh_token (vale 30 dias):
refresh_token novo: guarde ele e jogue o antigo fora.
Sair (revogar)
refresh_token desfaz a conexão; o access_token, só ele. Responde 200 sempre.
A pessoa também desconecta quando quiser, no painel, em Integrações e API › OAuth › Apps conectados. A conexão cai sozinha quando ela troca a senha, quando a conta é bloqueada, quando você exclui o OAuth e depois de 90 dias sem uso.
Erros
/oauth/token e /oauth/revoke respondem no formato do OAuth:
/oauth/userinfo e /oauth/summary seguem o formato da API (Erros): 401 INVALID_TOKEN (token vencido, revogado ou de conta desconectada) e 403 INSUFFICIENT_SCOPE (falta o escopo), com WWW-Authenticate: Bearer error="...".
Na tela de autorização, pedido sem PKCE S256, sem state ou com escopo que o OAuth não marcou volta para o seu link com error=invalid_request ou error=invalid_scope. Client ID inexistente ou link de retorno não cadastrado não voltam para lugar nenhum: a tela mostra o erro.