Integração via APIs
Como iniciar a jornada
Para que uma empresa contratante da solução Open Keys possa acionar a Jornada de Iniciação de Pagamento, é necessário gerar um token no qual deverá ser indicado o client_id e client_secret da operação, indicados no painel do aplicativo, menu de configurações.
URL de geração do Token - Sandbox
curl --location 'https://keycloak.celcoin.shared.fsapps.io/auth/realms/smart-keys/protocol/openid-connect/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=client_credentials' \
--data-urlencode 'scopes=openid' \
--data-urlencode 'client_id=${CLIENT_ID} \
--data-urlencode 'client_secret=${CLIENT_SECRET}'
URL de geração do Token - Produção
curl --location 'https://keycloak.celcoin.shared.fsapps.io/auth/realms/smart-keys-prd/protocol/openid-connect/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=client_credentials' \
--data-urlencode 'scopes=openid' \
--data-urlencode 'client_id=${CLIENT_ID} \
--data-urlencode 'client_secret=${CLIENT_SECRET}'
cURL para geração do Token
curl --location '${TOKEN_URL}' \
--header 'Content-Type: application/json' \
--data '{
"client_id":"...-2567-....-ace9-...",
"client_secret": "...8136-....-42ce-..."
}'
Response
{
"access_token": "...iJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJJUV96OE...",
"expires_in": 3600,
"refresh_expires_in": 0,
"token_type": "Bearer",
"not-before-policy": 0,
"scope": "email profile"
}
O token retornado no campo “access_token“ tem validade padrão de 1 hora e deve ser utilizado para realizar as chamadas subsequentes. Ele deve ser incluído no parâmetro Authentication do header da requisição, precedido da palavra “Bearer “, conforme exemplo abaixo.
'Authorization': 'Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJJUV96OE...'
Opcional: External ID
Quando gerar uma iniciação de pagamentos, é possível adicionar um External ID usando o objeto abaixo, é necessário:
O campo ser incluído dentro do objeto “data” no mesmo nível do brandID;
O nome do campo precisa ser “externalid".
"metadata":{
"externalId": "000111"
},
Resposta:
O campo externalid será apresentado como um novo parâmetro na URL Callback registrada na aplicação.
Liste os participantes do Open Finance de pagamento
A seguinte chamada de API traz todas as instituições financeiras que podem ser escolhidas para realizar a aprovação do pagamento/consentimento.
Solicitação de lista de participantes
curl --location --request GET 'https://api-openkeys.celcoin.dev.fsapps.io/open-keys-itp/api/participants/v1/brands?type=PAYMENT&count=1&page=1'
Resposta da lista de participantes
[
{
"AuthorisationServerId": "95dd24d2-902e-49e1-ad0d-e02d938447ba", "AutoRegistrationSupported": false,
"AutoRegistrationNotificationWebhook": null,
"SupportsCiba": false, "SupportsDCR": false,
"SupportsRedirect": false, "ApiResources": [...],
"AuthorisationServerCertifications": [],
"CustomerFriendlyDescription": "Autorizador ambiente Desenvolvimento Engenharia Finansystech", "CustomerFriendlyLogoUri": "https://finansystech-pub.s3.sa-east-1.amazonaws.com/f_logo.svg",
"CustomerFriendlyName": "Finansystech Mock", "DeveloperPortalUri": null,
"TermsOfServiceUri": null,
"NotificationWebhookAddedDate": null,
"OpenIDDiscoveryDocument": "https://openfinance.dev.fbank.opb.obm.engdev.fsapps.io/orgs/finansystech/.well-kno",
"Issuer": "https://openfinance.dev.fbank.opb.obm.engdev.fsapps.io/orgs/finansystech",
"PayloadSigningCertLocationUri": "https://openfinance.dev.fbank.opb.obm.engdev.fsapps.io/orgs/finansystech/jwk",
"CreatedAt": 1666796087,
"ParentAuthorisationServerId": null, "DeprecatedDate": null,
"RetirementDate": null,
"SupersededByAuthorisationServerId": null,
"OrganisationId": "248cce08-0abc-4cdb-ba14-02cca03e5c74"
},
...
]
Criar consentimento de pagamento
Agora, usando o token de acesso gerado, vamos chamar o endpoint Consent Creation.
O campo AuthorisationServerId é o Brand ID que usaremos para criar o consentimento de pagamento. Aqui temos que informar um uri de redirecionamento válido do Meu Primeiro App, caso contrário o acesso será negado.
Usaremos o Brand ID do Finansystech Mock (b09ede32-83db-4019-8ca3-a9a6f9376d0b) 3:03
URL de criação do Consentimento - Sandbox
CONSENT_URL=https://api-openkeys.celcoin.dev.fsapps.io/open-keys-itp/api/payment-initiation/v1/consents'
URL de criação do Consentimento - Produção
CONSENT_URL=https://api-openkeys.celcoin.prd.fsapps.io/open-keys-itp/api/payment-initiation/v1/consents'
cURL para criação do consentimento
curl --location --request POST '${CONTENT_URL}/payment-initiation/v1/cons
--header 'Authorization: Bearer <PUT_HERE_THE_ACCESS_TOKEN>' \
--header 'Content-Type: application/json' \
--data-raw '
{
"data": {
"loggedUser": {
"document": {
"identification": "12345678909",
"rel": "CPF"
}
},
"localInstrument": "DICT",
"proxy": "55155114845"
},
"type": "PIX"
}
},
"brandId": "95dd24d2-902e-49e1-ad0d-e02d938447ba"
}'
Resposta de criação de consentimento
{
"authorizationUrl": "https://openfinance.dev.fbank.opb.obm.engdev.fsapps.io/orgs/finansystech/auth?client_id=4f-BS",
"id": "uNmAi0qJbzE2YsNvaLNw1QF6_7jV0b2 v8239wbRgc"
}
Será retornado um AuthorizationUrl para que possamos redirecionar o usuário para a página de login do banco. Execute o redirecionamento usando o URL de autorização. A página de login será mostrada.
Nesta tela você deve utilizar o seu usuário e senha de teste, cadastrados no painel da sua aplicação.
O sistema apresentará a página Aprovação de Consentimento de Pagamento com as informações da transação. Clique no botão “CONFIRMAR PAGAMENTO” para consentir com o pagamento.
O sistema redirecionará o usuário de volta para Celcoin , com a mensagem de que a transação está em processamento. A página URI de redirecionamento receberá os seguintes parâmetros de string de consulta:
ticket=eyJhbGciO…
state=HVLeXYgP6…
POST Callback
Após a etapa de confirmação do usuário no ambiente da instituição transmissora, é retornado o callback da transação, conforme modelo abaixo.
https://api-smartkeys.celcoin.dev.fsapps.io/api/smart-keys/payment-initiation/v1/consents/callback
curl --location 'https://api-smartkeys.celcoin.dev.fsapps.io/api/smart-keys/payment-initiation/v1/consents/callback' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJSY0hYOGxFRl93QmxFNUF3eXY2TV9JQUFEUm1pSzV5SWlnWDhDeXpzNzdvIn0.eyJleHAiOjE2ODkxOTEyODQsImlhdCI6MTY4OTE4NzY4NCwianRpIjoiYTYwZmUyNDUtNmY2ZC00NzBlLTljY2ItM2ZkYmIzZWQ5YzEzIiwiaXNzIjoiaHR0cHM6Ly9rZXljbG9hay5jZWxjb2luLnNoYXJlZC5mc2FwcHMuaW8vYXV0aC9yZWFsbXMvc21hcnQta2V5cyIsImF1ZCI6ImFjY291bnQiLCJzdWIiOiI2ZmJjN2YyOC0yNDNkLTQ3MDMtOGE2MC0xYTEyOWUwNGFjOTMiLCJ0eXAiOiJCZWFyZXIiLCJhenAiOiIwMzNmNzgxNi02ZDNlLTRkYzYtODgzMi1mNzZlNDdhMzE2M2YiLCJhY3IiOiIxIiwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbIm9mZmxpbmVfYWNjZXNzIiwiZGVmYXVsdC1yb2xlcy1zbWFydC1rZXlzIiwidW1hX2F1dGhvcml6YXRpb24iXX0sInJlc291cmNlX2FjY2VzcyI6eyIwMzNmNzgxNi02ZDNlLTRkYzYtODgzMi1mNzZlNDdhMzE2M2YiOnsicm9sZXMiOlsidW1hX3Byb3RlY3Rpb24iXX0sImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoiZW1haWwgcHJvZmlsZSIsImNsaWVudElkIjoiMDMzZjc4MTYtNmQzZS00ZGM2LTg4MzItZjc2ZTQ3YTMxNjNmIiwiZW1haWxfdmVyaWZpZWQiOmZhbHNlLCJjbGllbnRIb3N0IjoiMjAuOTkuMjEwLjIzNSIsInByZWZlcnJlZF91c2VybmFtZSI6InNlcnZpY2UtYWNjb3VudC0wMzNmNzgxNi02ZDNlLTRkYzYtODgzMi1mNzZlNDdhMzE2M2YiLCJjbGllbnRBZGRyZXNzIjoiMjAuOTkuMjEwLjIzNSJ9.FrIov1Lfl4IzB90nnu4QfXxoZVlOBjBIvk7L1EtKe9G_DyeRC2kbxRFpI1ig6FIiD2lIU4Ff5VKWMw7AWVOuddREeKeyVaUz8hdQHxO5MtpAIomZ_268GD_Vd9nBUKPP3x79lCswgFe3VHKj0UnxTRx5BmceFEhBGqFBZa0knKgMAQANsWgyMApPzMch7uOers_bQHxPVMZ44MFySB3U10MsYqIOefUzYilj0bbPrCzlAPWF8fvu3lzOFfm5sHTnyU5Swj1HeQbvCNsSY5Vg0K5UXenAoj63vQI5zKoXqhH7rZp7pZGZIWVnqP15nvy9KtOUfkjbQnwqjwW_MTJ7tQ' \
--data '{
"code": "",
"id_token": "",
"state": ""
}'
Resposta padrão
{
"url": "https://smartkeys-ui.engdev.fsapps.io/callback?ticket=eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICIwMTQ4ZjkxZS01NjA1LTRlYzktYWY3My0wM2UzOGNiNmIwNGUifQ.eyJleHAiOjE2ODA2MjU0MjUsIm5iZiI6MCwiaWF0IjoxNjgwNjIxODI1LCJwZXJtaXNzaW9ucyI6W3sicnNpZCI6IjNlN2Q4NTMxLWQ4MjMtNDg1Ny04NjZiLTZmMTg2OTMyNWY4NiJ9XSwianRpIjoiZjQzYTgzZWYtMGE0MC00ZTgyLThiOWMtZjhiZGFiNjM2ZWZiLTE2ODA2MjE4NTAwODMiLCJhdWQiOiJodHRwczovL2tleWNsb2FrLmZ1bGwtZGV2LmZpbmFuc3lzdGVjaC5jb20uYnIvYXV0aC9yZWFsbXMvc21hcnQta2V5cyIsInN1YiI6ImM4OTJkYjViLTUyMDktNDBhOS1iNGQwLTdjMmM4MzViYWM0OCIsImF6cCI6ImNlbGNvaW4ifQ.nhW9PVOlHE2sgzy4iU2MeqOi_QDAjI0rAf2isytNmXw&state=lPOOqD1D-Fjndvnt63moETZVIiTqpFRf4EVOFtATXuE"
}
Resposta com external id
{
"url": "https://smartkeys-ui.engdev.fsapps.io/callback?ticket=eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICIwMTQ4ZjkxZS01NjA1LTRlYzktYWY3My0wM2UzOGNiNmIwNGUifQ.eyJleHAiOjE2ODA2MjU0MjUsIm5iZiI6MCwiaWF0IjoxNjgwNjIxODI1LCJwZXJtaXNzaW9ucyI6W3sicnNpZCI6IjNlN2Q4NTMxLWQ4MjMtNDg1Ny04NjZiLTZmMTg2OTMyNWY4NiJ9XSwianRpIjoiZjQzYTgzZWYtMGE0MC00ZTgyLThiOWMtZjhiZGFiNjM2ZWZiLTE2ODA2MjE4NTAwODMiLCJhdWQiOiJodHRwczovL2tleWNsb2FrLmZ1bGwtZGV2LmZpbmFuc3lzdGVjaC5jb20uYnIvYXV0aC9yZWFsbXMvc21hcnQta2V5cyIsInN1YiI6ImM4OTJkYjViLTUyMDktNDBhOS1iNGQwLTdjMmM4MzViYWM0OCIsImF6cCI6ImNlbGNvaW4ifQ.nhW9PVOlHE2sgzy4iU2MeqOi_QDAjI0rAf2isytNmXw&state=lPOOqD1D-Fjndvnt63moETZVIiTqpFRf4EVOFtATXuE&externalId=000111"
}
Confira como criar a sua página de Efetivação da jornada para o seu cliente, com o extrato da operação, clicando no link abaixo:
Configure o Callback de Dadosarchived
Acompanhe o status da jornada
Acompanhe o status do pagamento
Para confirmar se o pagamento foi processado com sucesso e o status correspondente, você pode acompanhar via Webhook na Iniciação do Pagamento ou consultando o status do pagamento.
Consulta e registro da operação
Após receber um retorno de um token dentro da tag “ticket”, você deve inseri-lo na próxima chamada de consulta ao recibo do PIX. Para isso, você pode utilizar o ID do Consentimento, o ID da Jornada ou o ID do Pagamento.
URL Get Payment para consulta via ID do pagamento - Sandbox
PAYMENT_URL=https://api-openkeys.celcoin.dev.fsapps.io/open-keys-itp/api
URL Get Payment para consulta via ID do pagamento - Produção
PAYMENT_URL=https://api-openkeys.celcoin.prd.fsapps.io/open-keys-itp/api
Exemplo de Request para API de Get Payment a fim de verificar status do pagamento pelo ID do Pagamento
curl --location '${PAYMENT_URL}/payment-consumer/v1/pix/payments/0d42f0c8-f5ff-493f-a350-19d5b8b76618'
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJJUV96OE...' \
Response da chamada
{
"paymentId": "30ddc97c-90d0-4ba6-b681-...",
"status": "ACCEPTED"
}
O parâmetro status pode receber os valores: "ACCEPTED", "AWAITING_APPROVAL" e "REJECTED"
URL Get Consent para consulta via ID do consentimento - Sandbox
CONSENT_URL=https://api-openkeys.celcoin.dev.fsapps.io/open-keys-itp/api
URL Get Consent para consulta via ID do consentimento - Produção
CONSENT_URL=https://api-openkeys.celcoin.prd.fsapps.io/open-keys-itp/api
Exemplo de Request para API de Get Consent a fim de verificar status do pagamento pelo ID do Consentimento
curl --location '${CONSENT_URL}/payment-initiation/v1/consents/SIizFZDGOdzW6JNxTa-r9hZ6sWVmbtX5PHmKhEvG36c'
--header 'Authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJJUV96OE...' \
Response da chamada
{
"paymentId": "30ddc97c-90d0-4ba6-b681-...",
"status": "ACCEPTED"
}
O parâmetro status pode receber os valores: "ACCEPTED", "AWAITING_APPROVAL" e "REJECTED"
Continue sua jornada