A API Face Match valida a biometria facial de uma pessoa através do CPF informado utilizando a base de dados da Claro.
A nossa API é “restful”, ou seja, o nosso protocolo de comunicação foi criado de uma forma que pode interpretar qualquer linguagem de programação. Isso torna o processo de integração do lado dos nossos clientes e parceiros mais flexível e de fácil entendimento. Na página de documentação deixamos alguns exemplos de linguagem, caso seja necessário.
A utilização da validação biométrica associada a outras medidas protetivas garantem segurança nos resultados e sustentabilidade nos negócios, minimizando riscos de fraudes e tornando as validações mais confiáveis.
- Agilidade: cruzamento rápido de número de CPF na base Claro;
- Retorno simples: consulta em tempo real utilizando como input o CPF que retorna o hash biométrico e confirma a validação do perfil;
- Segurança: retorna mensagens instantâneas sobre o cliente com base nas informações fornecidas, validando seu perfil e prevenindo fraudes.
Versão: 1.0.1;2023-10-10
Criada por: Logicalis
Data: 10/10/2023
Modificações
- [Claro API Monetization MVP] Versão inicial
- [Claro API Monetization] Alteração dos campos versions e biohashs para array
Essa API usa OAuth 2 com o fluxo de concessão de credenciais do cliente.
Tipo de segurança: OAuth2
clientCredentials OAuth Flow: Token URL: https://demo35-test.apigee.net/oauth2/token?grant_type=client_credentials
200 - A solicitação foi bem sucedida.
400 - A solicitação não pôde ser entendida pelo servidor devido à sintaxe incorreta. O cliente NÃO DEVE repetir o pedido sem modificações.
401 - A solicitação requer autenticação do usuário.
403 - O servidor entendeu a solicitação, mas está se recusando a atendê-la.
404 - O servidor não encontrou nada que corresponda ao Request-URL.
405 - O método solicitado não é suportado pela API.
406 - Servidor não pode produzir uma resposta que combine com a lista de valores aceitáveis definidos.
414 - O tamanho da URI requisitada é maior do que o tamanho que o servidor aceita interpretar.
422 - O cliente não foi encontrado na base de dados.
429 - O usuário enviou muitas solicitações em um determinado período de tempo.
500 - O servidor falhou ao atender uma solicitação aparentemente válida.
503 - O servidor está indisponível no momento devido uma sobrecarga temporária ou manutenção programada.
Caso ainda restem dúvidas, baixe o PDF que contém o tutorial de consumo da API, que explica passo a passo como utiliza-la.
!/bin/bash url_facialbiometrics=https://api.claro.com.br/identity/v1/facialbiometrics url_token=https://api.claro.com.br/oauth2/v1/token identificationType=CPF identificationId=98676489009 key=XXXXXXXXXXXXXXXXXXXXXXXXXXXX secret=XXXXXXXXXXXXX senha=$( echo -n $key:$secret | base64) curl -X POST $url_token \ -H 'Content-Type: application/x-www-form-urlencoded' \ -H 'cache-control: no-cache' \ -d 'grant_type=client_credentials' \ -H "x-client-auth: Basic $senha" > json grep 'access_token' json > atributoJson \ token=$(cut -d'"' -f4 atributoJson ) curl -X 'GET' $url_facialbiometrics \ -H 'Content-Type: application/json' \ -H 'X-QueryString: identificationType='"$identificationType"'&IdentificationId='"$identificationId"'' \ -H 'Accept: application/json' \ -H 'Authorization: Bearer '"$token"'' \
package client.facialBiometrics; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import java.util.Base64; import org.codehaus.jackson.JsonProcessingException; import org.codehaus.jackson.map.ObjectMapper; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestClientException; import org.springframework.web.client.RestTemplate; public class App { private static final String KEY = "XXXXXXXXXXXXXXXXXXXXXXXXX"; private static final String SECRET = "XXXXXXXXXXXX"; private static final String GRANT_TYPE = "client_credentials"; private static final String URL = "https://api.claro.com.br"; private static final String END_POINT_ACCESS_TOKEN = "/oauth2/v1/token"; private static final String END_POINT_API_FACIALBIOMETRICS = "/identity/v1/facialbiometrics"; public static void main( String[] args ) throws URISyntaxException, JsonProcessingException, IOException{ App app = new App(); String token = app.getAccessToken(); String identificationId = "XXXXXXXXXXX"; System.out.println("Face Match: " + app.getFacialMatch( token , identificationId )); } public String getFacialMatch(String accessToken, String identificationId) throws RestClientException, URISyntaxException { HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); headers.add("cache-control","no-cache"); headers.add("x-client-auth", "Bearer " + accessToken); headers.add("X-QueryString", "identificationType=CPF&IdentificationId=" + identificationId); HttpEntity<String> request = new HttpEntity<>(headers); RestTemplate restTemplate = new RestTemplate(); ResponseEntity<String> result = restTemplate.getForEntity(new URI(URL + END_POINT_API_FACIALBIOMETRICS), request, String.class); return result.getBody(); } public String getAccessToken() throws URISyntaxException, JsonProcessingException, IOException { String senha = Base64.getEncoder().encodeToString((App.KEY + ":" + App.SECRET).getBytes()); HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); headers.add("cache-control","no-cache"); headers.add("x-client-auth", "Basic " + senha); MultiValueMap<String, String> parameters = new LinkedMultiValueMap<>(); parameters.add("grant_type", GRANT_TYPE); HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(parameters, headers); RestTemplate restTemplate = new RestTemplate(); ResponseEntity<String> result = restTemplate.postForEntity(new URI(URL + END_POINT_ACCESS_TOKEN),request, String.class); String responseBody = result.getBody(); if (responseBody != null && !responseBody.isEmpty()) { return new ObjectMapper().readTree(responseBody).get("access_token").asText(); } else { throw new IllegalStateException("Response body is null or empty"); } } }
$key = 'XXXXXXXXXXXXXXXXXXX';
$secret = 'XXXXXXXXXXXX';
$identificationType = 'CPF';
$identificationId = '98676489009';
$token = getAccessToken();
$score = getScore($token , $identificationType, $identificationId);
function getAccessToken() {
try{
$senha = base64_encode($GLOBALS['key'] . ':' . $GLOBALS['secret']);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,
"https://api.claro.com.br/oauth2/v1/token");
curl_setopt( $ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/x-www-form-urlencoded',
'X-CustomerID: claro_exemplo',
'x-client-auth: Basic ' . $senha
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS,
'grant_type=client_credentials');
$response = curl_exec($ch);
if (!$response){
$error = curl_error($ch);
$info = curl_getinfo($ch);
die("cURL request failed, error = {$error}; info = " . print_r($info, true));
}
if(curl_errno($ch)){
curl_close($ch);
echo 'error:' . curl_error($ch);
} else {
curl_close($ch);
return json_decode($response)->access_token;
}
} catch (Exception $e) {
return 'Erro '. $e;
}
}
function getScore($token , $identificationType, $identificationId){
try {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,
"https://api.claro.com.br/identity/v1/facialbiometrics");
curl_setopt( $ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'X-QueryString: identificationType='.$identificationType.'&IdentificationId='.$identificationId,
'Accept: application/json',
'Authorization: Bearer ' . $token
]);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
$response = curl_exec($ch);
if (!$response){
$error = curl_error($ch);
$info = curl_getinfo($ch);
die("cURL request failed, error = {$error}; info = " . print_r($info, true));
}
if(curl_errno($ch)){
curl_close($ch);
echo 'error:' . curl_error($ch);
} else {
curl_close($ch);
return $response;
}
} catch (Exception $e) {
return 'Erro '. $e;
}
}
import requests, json import base64 KEY="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" SECRET="XXXXXXXXXXXXXXXXX" SENHA = base64.b64encode( (KEY + ':' + SECRET ).encode('ascii') ).decode('ascii') GRANT_TYPE = "client_credentials"; URL = "https://api.claro.com.br"; END_POINT_ACCESS_TOKEN = "/oauth2/v1/token"; END_POINT_API_FACIALBIOMETRICS = "/identity/v1/facialbiometrics"; headers={'Content-Type':'application/x-www-form-urlencoded','cache-control':'no-cache','x-client-auth': 'Basic {}'.format(SENHA)} data = {'grant_type': 'client_credentials'} respToken = requests.post(URL + END_POINT_ACCESS_TOKEN , headers=headers , data= data) if respToken.status_code != 200: print('Erro:' + str( respToken.status_code)) else: token = json.loads( respToken.text)['access_token'] identificationId = "98676489009" identificationType = "CPF" headers_app = {'Content-Type': 'application/json', 'X-QueryString': 'identificationType=' + identificationType + '&IdentificationId=' + identificationId, 'Accept':'application/json', 'cache-control':'no-cache', 'user-agent':'curl/7.60.0', 'Authorization': 'Bearer {}'.format(token)} resp = requests.get( URL + END_POINT_API_FACIALBIOMETRICS, headers=headers_app) print(vars(resp)) if resp.status_code != 200: print('Erro: ' + str(resp.status_code)) else: print('Válida ' + str( resp.text ))
Plano Pay Per Use
A melhor escolha para o seu negócio. Após testar nossa trial, você passa a consumir nosso plano em produção, cobrado por consumo conforme sua solicitação.
- 5000 requisições
- Utilização em até 6 meses
- Relatório para monitoramento
de consumo