Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Conheça tudo sobre o produto Unico IDPay
Nesta seção, você encontrará tudo relacionado às APIs do Unico IDPay
Nesta seção, você encontrará como realizar a criação de uma conta de serviço para se autenticar no produto Unico IDPay
Nesta seção, você encontrará recursos adicionais relacionados à autenticação
Nesta seção, você encontrará como implementar o iFrame e Redirect na sua aplicação web para uso do produto Unico IDPay
Nesta seção, você encontrará todos os endpoints disponíveis do produto Unico IDPay
Nesta seção, você encontrará todas as especificações técnicas dos SDK's disponíveis no produto Unico IDPay
openssl req -x509 -new -nodes -sha256 -days 720 \
-key fileName.key.pem -out fileName.cert.pem
Nesta seção, você encontrará os possíveis erros que podem acontecer ao tentar de autenticar no produto Unico IDPay
{
"error": "server_error",
"error_description": "Falha na autenticação x.x.x"
}Nesta seção, você encontrará toda a especificação técnica sobre a forma de autenticação para utilização das APIs REST do produto Unico IDPay
Nesta seção, você encontrará a collection do Postman com a REST API para realizar a autenticação no produto Unico IDPay
Nesta seção, você encontrará todos os requisitos para utilizar o produto Unico IDPay
Nesta seção, você encontrará um exemplo de implementação da autenticação do produto Unico IDPay

const fs = require('fs')
const path = require('path')
const jwt = require('jsonwebtoken')
const request = require('request')
// settings
const basePath = 'https://identityhomolog.acesso.io'
// entry point
let options = {
serviceAccount: 'svcapp1',
tenant: "9ea3c3bd-4447-4c3b-ae2e-504b795d3733"
}
requestAnAccessToken(createServiceAccountToken(options), (err, accessToken) => {
let payload = jwt.decode(accessToken.access_token)
console.log('Response:')
console.log(' Access Token: ', accessToken.access_token)
console.log(' ID: ', payload.jti)
console.log(' Issuer: ', payload.iss)
console.log(' Subject: ', payload.sub)
console.log(' expires_in: ', accessToken.expires_in)
console.log(' Expiration Date: ', new Date(payload.exp))
console.log(' Creation Date: ', new Date(payload.iat))
})
// functions
function createServiceAccountToken({tenant, serviceAccount, account = ''}) {
// Reads the service account private key
let privateKey = fs.readFileSync(path.resolve(`${serviceAccount}.key.pem`))
// Prepare the request
let payload = {
iss: `${serviceAccount}@${tenant}.iam.acesso.io`,
aud: basePath,
scope: '*',
exp: Math.floor(Date.now() / 1000) + 3600,
iat: Math.floor(Date.now() / 1000)
}
// Service account is requesting an access token for another user?
if (account) {
payload.sub = account
}
// Create JWS
return jwt.sign(payload, privateKey, { algorithm: 'RS256' })
}
function requestAnAccessToken(serviceToken, callback) {
// Prepare the request
let options = {
method: 'POST',
url: `${basePath}/oauth2/token`,
headers: {'content-type': 'application/x-www-form-urlencoded'},
form: {
grant_type: 'urn:ietf:params:oauth:grant-type:jwt-bearer' ,
assertion: serviceToken
}
}
console.log('Requesting Access Token with self created token:' )
console.log('', serviceToken)
// Ask identity and authorization server for an access token
request(options, (error, response, body) => {
if (error) {
callback(new Error(error))
}
body = JSON.parse(body)
if (body.error) {
callback(new Error(`${body.error}: ${body.error_description}`))
}
callback(null, body)
})
}implementation("androidx.browser:browser:1.5.0")import android.net.Uri
import androidx.activity.ComponentActivity
import androidx.browser.customtabs.CustomTabsClient
import androidx.browser.customtabs.CustomTabsIntent
class CustomTabActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
openCustomTab(<URL_CBU>)
}
fun openCustomTab(url: String) {
val builder = CustomTabsIntent.Builder()
val customTabsIntent = builder.build()
customTabsIntent.launchUrl(this, Uri.parse(url))
}
}<uses-feature android:name="android.hardware.camera" android:required="false"/>
<uses-permission android:name="android.permission.CAMERA"/>
// necessário ter as permissões de câmera e geolocalização
<activity
android:name=".CustomTabActivity"
android:exported="true"
android:label="@string/app_name"
android:theme="@style/Theme.Customtabs"
android:launchMode="singleTop">
<intent-filter android:label="Custom Tab">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- scheme e host são os dados fornecidos na criação de um processo no campo callback_uri
callback_uri: "foobar://success?code=1234" -->
<data android:scheme="foobar" android:host="success"/>
</intent-filter>
</activity>override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
val url = intent.data
val scheme = url.scheme // "foobar"
val host = url.host // "success"
val code = url.getQueryParameter("code") // "1234"
}
{
"id": "8263a268-5388-492a-bca2-28e1ff4a69f0",
"status": "approved",
"hasIdentityChanged": false
}{
"id": "6ab1771e-dfab-4e47-8316-2452268e5481",
"status": "fast-inconclusive"
}$ npm install idpay-b2b-sdk

import { IDPaySDK } from “idpay-b2b-sdk”;
IDPaySDK.init({
type: 'IFRAME',
env: 'uat' // Só irá ser preenchido se for ambiente de testes.
});Nesta seção, você encontrará como realizar o processo de autenticação no produto Unico IDPay

const transactionId = '9bc22bac-1e64-49a5-94d6-9e4f8ec9a1bf';
const token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c';
const transaction = {
id: '9bc22bac-1e64-49a5-94d6-9e4f8ec9a1bf',
concluded: true,
captureConcluded: true
};
const onFinish = (transaction, type) => {
console.log('response', transaction, type);
}
IDPaySDK.open({
transactionId,
token,
onFinish
});
// Você também pode encerrar o SDK explicitamente através do método abaixo
IDPaySDK.close();{Cabeçalho em Base64url}.{Payload em Base64url}.{Assinatura em Base64url}{Cabeçalho em Base64url}.{Payload em Base64url}{"alg":"RS256","typ":"JWT"}eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9exp = iat + 3600{
"iss": "service_account_name@tenant_id.iam.acesso.io",
"aud": "https://identityhomolog.acesso.io",
"scope": "*",
"exp": 1626296976, // Este é apenas um exemplo. Utilize aqui o valor atual gerado.
"iat": 1626293376 // Este é apenas um exemplo. Utilize aqui o valor atual gerado.
}{Cabeçalho em Base64url}.{Payload em Base64url}{Cabeçalho em Base64url}.{Payload em Base64url}.{Assinatura em Base64url}{"alg":"RS256","typ":"JWT"}.
{
"iss": "service_account_name@tenant_id.iam.acesso.io",
"aud": "https://identityhomolog.acesso.io",
"scope": "*",
"exp": 1626296976, // Este é apenas um exemplo. Utilize aqui o valor atual gerado.
"iat": 1626293376 // Este é apenas um exemplo. Utilize aqui o valor atual gerado.
}.
[byte array da assinatura]eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzZXJ2aWNlX2FjY291bnRf
bmFtZUB0ZW5hbnRfaWQuaWFtLmFjZXNzby5pbyIsImF1ZCI6Imh0dHBzOi8vaWRlbnRpdHlob21vbG9nLmFjZXNzby5pbyIsInNjb
3BlIjoiKiIsImV4cCI6MTYyNjI5Njk3NiwiaWF0IjoxNjI2MjkzMzc2fQ.JsymP3NZdgCSqeNlgsOM2
-AQ7M450NxFnZnnaKSu4Q8g12QGEIvvM4EhCokUHfwk5s7pOpm2UD_Ng3Hb5g_wgrjfiVSLWH5Q2wYg1AvfLqo
YSoJWaMHm9KL0kpv32XdDD8TZVR-MVd2VBHmCMVbV6gvk8buUoK1HZDN7g84PaY3bfgcB3RKU-
H55lR8yyJjZxToIv17-wfla2G99uaMEFNGX0ZSE7ETn5Z8-WypmFrNAK0TM58upzvfVI6_-
gY4cj4iQvmRbuvxsAaGiHA2xd0RVm2Mrx-gQtdPqtbZPuQcH7k64Z_EOQBgiGTgVjucyHD6zBijr_P-
2mhIxuecNSwhttps://identityhomolog.acesso.io/oauth2/tokenPOST /oauth2/token HTTP/1.1
Host: identityhomolog.acesso.io
Content-Type: application/x-www-form-urlencoded
grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-
bearer&assertion=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzZXJ2aWNlX2FjY
291bnRfbmFtZUB0ZW5hbnRfaWQuaWFtLmFjZXNzby5pbyIsInN1YiI6InVzZXJfaWRlbnRpZmllciIs
ImF1ZCI6Imh0dHBzOi8vaWRlbnRpdHlob21vbG9nLmFjZXNzby5pbyIsInNjb3BlIjoiKiIsImV4cCI
6MTMyODU1NDM4NSwiaWF0IjoxMzI4NTUwNzg1fQ.TjH-mTtwP6tBB93O1sDPaAA6yUF7N2-HZDlpIPz
bf_dxO8A6KZuRWG8ZnICrxX56qj0HREiMlYy27XJgxowrUa0JHvbqc8HJkT7-6Mh7J67UnubZKG1-hi
6jDtkC9BIXBcOhtkNUfZvZetXjLzsRsSDkqxdMtzYZwkRlocvaxL5QXiQhweeEwK_Ux81Adh3z0EIhT
yl7CKJLJ69PuHS7s9IdrjUl79owipp4LF1FvtMhoe7YIL69ohPgFqSv_-Y9qpPdW6be3OEAyKlOM08S
ZBbHBwW4XMvw3uZjTY1sgJ4cBoxrftDpjYOw34oPOKxirqc5-90uOCYe1O1hRtG45w{
"access_token": "<access_token>",
"token_type": "Bearer",
"expires_in": "3600"
}token decodificado:
new Date(token.exp - 600)Cenário padrão:
expires_in: 3600 (1h) - Geração do token as 14h42
Solicitar um novo token somente as 15h32 ou seja, 14:42 + (3600 - 600)Cenário com a duração alterada:
expires_in: 7200 (2h) - Geração do token as 14h42
Solicitar um novo token somente as 16h32 ou seja, 14:42 + (7200 - 600)Nesta seção, você encontrará a visão geral sobre os erros que pode receber nos endpoints do produto Unico IDPay
{
"error": {
"code": "40004",
"description": "transaction id is invalid"
}
}ID da transação relacionada ao chargeback.
ID do chargeback a ser consultado.
Access-token válido. O valor deve ser enviado no formato Bearer {token}".
Consulta do status do chargeback bem-sucedida.
ID do chargeback.
8263a268-5388-492a-bca2-28e1ff4a69f0Status atual do chargeback.
waitingDados inválidos na requisição.
Código do erro.
40004Detalhes do erro.
transaction id is invalidProibição de acesso (token inválido ou permissões insuficientes).
Transação não encontrada.
Erro interno do servidor.
GET /api/public/v1/credit/transactions/{transaction_id}/chargeback/{chargeback_id} HTTP/1.1
Host: transactions.transactional.uat.unico.app
Authorization: text
Accept: */*
{
"id": "8263a268-5388-492a-bca2-28e1ff4a69f0",
"status": "waiting"
}additionalInfo.processID;ID da transação que será submetida ao chargeback.
Access-token válido. O valor deve ser enviado no formato Bearer {token}".
Data e hora do pedido de chargeback no formato ISO 8601.
2023-01-05T03:00:00.000ZTipo da chave de identificação do solicitante.
cpfValor da chave de identificação do solicitante.
CPF_DO_USUARIONome do solicitante.
NOME_DO_USUARIOMotivo da solicitação de chargeback.
MOTIVO_DA_SOLICITACAOObservações gerais sobre o pedido.
OBSERVACOES_GERAISNome ou descrição do arquivo.
NOME_DO_ARQUIVOArquivo PDF codificado em Base64.
JVBERi0xLjQKMSAwI==Solicitação de chargeback bem-sucedida.
ID do chargeback gerado.
8263a268-5388-492a-bca2-28e1ff4a69f0Dados inválidos na requisição.
Código do erro.
40004Detalhes do erro.
transaction id is invalidProibição de acesso (token inválido ou permissões insuficientes).
Transação não encontrada.
Erro interno do servidor.
{
"id": "8263a268-5388-492a-bca2-28e1ff4a69f0"
}POST /api/public/v1/credit/transactions/{transaction_id}/chargeback HTTP/1.1
Host: transactions.transactional.uat.unico.app
Authorization: text
Content-Type: application/json
Accept: */*
Content-Length: 254
{
"datetime": "2023-01-05T03:00:00.000Z",
"requestor": {
"key": "cpf",
"value": "CPF_DO_USUARIO"
},
"name": "NOME_DO_USUARIO",
"reason": "MOTIVO_DA_SOLICITACAO",
"observation": "OBSERVACOES_GERAIS",
"documents": [
{
"label": "NOME_DO_ARQUIVO",
"data": "JVBERi0xLjQKMSAwI=="
}
]
}ID da transação para a qual a notificação será enviada.
Access-token válido. O valor deve ser enviado no formato Bearer {token}".
Número de telefone para o envio da notificação.
CELULAR_NOTIFICACAOEndereço de e-mail para o envio da notificação.
EMAIL_NOTIFICACAONotificação enviada com sucesso.
ID único da notificação gerada.
b50ee24c-71eb-4a5d-ade1-41c48b44c240Link gerado para a notificação.
https://aces.so/exampleDados inválidos na requisição.
Código do erro.
40004Detalhes do erro.
transaction id is invalidProibição de acesso (token inválido ou permissões insuficientes).
Transação não encontrada.
Erro interno do servidor.
{
"id": "b50ee24c-71eb-4a5d-ade1-41c48b44c240",
"link": "https://aces.so/example"
}POST /api/public/v1/credit/transactions/{transaction_id}/notify HTTP/1.1
Host: transactions.transactional.uat.unico.app
Authorization: text
Content-Type: application/json
Accept: */*
Content-Length: 59
{
"phone": "CELULAR_NOTIFICACAO",
"email": "EMAIL_NOTIFICACAO"
}ID da transação para verificar o status.
Access-token válido. O valor deve ser enviado no formato Bearer {token}.
Status da transação obtido com sucesso.
Status atual da transação.
processingDados inválidos na requisição.
Código do erro.
40004Detalhes do erro.
transaction id is invalidProibição de acesso (token inválido ou permissões insuficientes).
Transação não encontrada.
Erro interno do servidor.
GET /api/public/v1/credit/transactions/{transaction_id} HTTP/1.1
Host: transactions.transactional.uat.unico.app
Authorization: text
Accept: */*
{
"status": "processing"
}ID da transação para a qual o conjunto probatório será recuperado.
Access-token válido. O valor deve ser enviado no formato Bearer {token}.
Link do arquivo probatório obtido com sucesso.
URL do arquivo probatório.
https://unico.io/probative.pdfDados inválidos na requisição.
Código do erro.
40004Detalhes do erro.
transaction id is invalidProibição de acesso (token inválido ou permissões insuficientes).
Transação não encontrada.
Erro interno do servidor.
Link do arquivo probatório obtido com sucesso.
{
"link": "https://unico.io/probative.pdf"
}GET /api/public/v1/credit/transactions/{transaction_id}/probative HTTP/1.1
Host: transactions.transactional.uat.unico.app
Authorization: text
Accept: */*
Access-token válido. O valor deve ser enviado no formato Bearer {token}".
Transação criada com sucesso.
ID da transação criada.
6ab1771e-dfab-4e47-8316-2452268e5481Status atual da transação.
waitingLink relacionado à transação.
https://aces.so/testeToken assinado que contém os parâmetros necessários para inicializar o SDK web do Unico IDPay.
eyJhbGciOiJIUzI1NiIsInR5cC[...]Ok6yJV_adQssw5cData e hora da expiração da transação no formato ISO 8601 (UTC).
2023-10-01T12:00:00ZDados inválidos na requisição.
Código do erro.
40027Detalhes do erro.
replicated transactionProibição de acesso (token inválido ou permissões insuficientes).
Recurso não encontrado.
Erro interno do servidor.
Tipo de chave de identificação do usuário. Orientamos que utilize sempre o CPF, pois há uma maior conversão.
cpfPossible values: Valor da chave de identificação do usuário. Deve ser enviado sem pontos ou traços.
12345678909Número do pedido associado à transação. É o dado que será utilizado como indexador no portal e você pode utilizar como forma de associação (foreign key) entre seu sistema e o IDPay.
123456ID da empresa responsável pela transação. Este campo é fornecido pela Unico.
f44f02e5-320e-497b-b346-8cf19b3ee2a4URL para onde o usuário será redirecionado após a finalizar a transação. Valores possíveis são: Uma URL https para redirecionar páginas web ou uma URL Schema para redirecionamento em aplicações móveis nativas.
https://exemplo.com/redirect8 primeiros dígitos do cartão.
87654321Últimos 4 dígitos do cartão.
7890Data de validade do cartão.
12/24Nome do titular do cartão. O campo name deve ser enviado o nome correto e tomar cuidado com problemas de encode, valores incorretos e/ou inválidos podem ocasionar problemas com aprovação no fluxo. Já que esse dado é utilizado na experiência e na comunicação com o usuário final.
João da SilvaValor total da compra.
100.5Tipo de contato (ex.: 'phone', 'email')
phoneValor do contato
5521999999991Tipo de contato (ex.: 'phone', 'email')
phoneValor do contato
5521988888882{
"id": "6ab1771e-dfab-4e47-8316-2452268e5481",
"status": "waiting",
"link": "https://aces.so/teste",
"token": "eyJhbGciOiJIUzI1NiIsInR5cC[...]Ok6yJV_adQssw5c",
"expiresAt": "2023-10-01T12:00:00Z"
}POST /api/public/v1/credit/transaction HTTP/1.1
Host: transactions.transactional.uat.unico.app
Authorization: text
Content-Type: application/json
Accept: */*
Content-Length: 490
{
"identity": {
"key": "cpf",
"value": "12345678909"
},
"orderNumber": "123456",
"company": "f44f02e5-320e-497b-b346-8cf19b3ee2a4",
"redirectUrl": "https://exemplo.com/redirect",
"card": {
"binDigits": "87654321",
"lastDigits": "7890",
"expirationDate": "12/24",
"name": "João da Silva"
},
"value": 100.5,
"mainContacts": [
{
"key": "phone",
"value": "5521999999991"
},
{
"key": "email",
"value": "[email protected]"
}
],
"fallbackContacts": [
{
"key": "phone",
"value": "5521988888882"
},
{
"key": "email",
"value": "[email protected]"
}
]
}Access-token válido. O valor deve ser enviado no formato Bearer {token}".
Transação criada com sucesso.
ID da transação criada.
6ab1771e-dfab-4e47-8316-2452268e5481Status atual da transação.
waitingLink relacionado à transação (este link só será retornado caso não envie o parâmetro additionalInfo.processID).
https://aces.so/testeToken assinado que contém os parâmetros necessários para inicializar o SDK web do Unico IDPay (este token só será retornado caso não envie o parâmetro additionalInfo.processID).
eyJhbGciOiJIUzI1NiIsInR5cC[...]Ok6yJV_adQssw5cDados inválidos na requisição.
Código do erro.
40027Detalhes do erro.
replicated transactionProibição de acesso (token inválido ou permissões insuficientes).
Recurso não encontrado.
Erro interno do servidor.
Tipo de chave de identificação do usuário.
cpfValor da chave de identificação do usuário.
12345678909Número associado ao onboarding. É o dado que será utilizado como indexador no portal e você pode utilizar como forma de associação (foreign key) entre seu sistema e o IDPay.
123456ID da empresa responsável pela transação. Este campo é fornecido pela Unico.
7873959b-f7b2-4b81-8b0e-4ce178e64dafURL para onde o usuário será redirecionado após finalizar a transação. Valores possíveis são: Uma URL HTTPS para redirecionar páginas web ou uma URL Schema para redirecionamento em aplicações móveis nativas.
https://exemplo.com/redirect8 primeiros dígitos do cartão.
87654321Últimos 4 dígitos do cartão.
7890Data de validade do cartão.
12/24Nome do titular do cartão. O campo name deve ser enviado o nome correto e tomar cuidado com problemas de encode, valores incorretos e/ou inválidos podem ocasionar problemas com aprovação no fluxo. Já que esse dado é utilizado na experiência e na comunicação com o usuário final.
João da SilvaValor máximo assegurado.
10.5Processo de referência da plataforma IDCloud.
6ab1771e-dfab-4e47-8316-2452268e5481{
"id": "6ab1771e-dfab-4e47-8316-2452268e5481",
"status": "waiting",
"link": "https://aces.so/teste",
"token": "eyJhbGciOiJIUzI1NiIsInR5cC[...]Ok6yJV_adQssw5c"
}POST /api/public/v1/walletid/transaction HTTP/1.1
Host: transactions.transactional.uat.unico.app
Authorization: text
Content-Type: application/json
Accept: */*
Content-Length: 349
{
"identity": {
"key": "cpf",
"value": "12345678909"
},
"orderNumber": "123456",
"company": "7873959b-f7b2-4b81-8b0e-4ce178e64daf",
"redirectUrl": "https://exemplo.com/redirect",
"card": {
"binDigits": "87654321",
"lastDigits": "7890",
"expirationDate": "12/24",
"name": "João da Silva"
},
"value": 10.5,
"additionalInfo": {
"processID": "6ab1771e-dfab-4e47-8316-2452268e5481"
}
}import AuthenticationServices
class IDPayAuthenticationController: NSObject, ASWebAuthenticationPresentationContextProviding {
func presentationAnchor(for session: ASWebAuthenticationSession) -> ASPresentationAnchor {
if let windowScene = UIApplication.shared.connectedScenes.first as? UIWindowScene {
if let mainWindow = windowScene.windows.first {
return mainWindow
}
}
return ASPresentationAnchor()
}
}import SwiftUI
import AuthenticationServices@State private var isAuthenticated = falselet idPayController = IDPayAuthenticationController()func authenticatePayment() {
guard let url = URL(string: "URL_AUTHENTICATION") else { return }
var session: ASWebAuthenticationSession?
session = ASWebAuthenticationSession(url: url, callbackURLScheme: "BUNDLE") { callbackURL, error in
guard callbackURL != nil else {
if let error = error {
return print("Erro durante a autenticação: \(error.localizedDescription)")
}
return
}
// Processa o URL de callback para verificar se a autenticação foi bem-sucedida
session?.cancel()
isAuthenticated = true
}
session?.presentationContextProvider = idPayController
session?.prefersEphemeralWebBrowserSession = true
session?.start()
}
ID da transação a ser consultada.
6ab1771e-dfab-4e47-8316-2452268e5481Access-token válido. O valor deve ser enviado no formato Bearer {token}".
Consulta realizada com sucesso.
Status atual da transação.
processingSe houve troca de identidade na transação (opcional).
falseDados inválidos na requisição.
Código do erro.
40004Detalhes do erro.
transaction id is invalidProibição de acesso (token inválido ou permissões insuficientes).
Transação não encontrada.
Erro interno do servidor.
{
"status": "processing",
"hasIdentityChanged": false
}GET /api/public/v1/walletid/transactions/{transaction_id} HTTP/1.1
Host: transactions.transactional.uat.unico.app
Authorization: text
Accept: */*