# Como integrar validação de CPF em sistemas SAP usando ABAP

> Aprenda a integrar a API de consulta de CPF do CPFHub.io em sistemas SAP usando ABAP, com exemplos de código e boas práticas de integração.

**Publicado:** 01/07/2024
**Autor:** Redação CPFHub.io
**URL:** https://cpfhub.io/blog/como-integrar-validacao-de-cpf-em-sistemas-sap-usando-abap

---


Para integrar validação de CPF em sistemas SAP usando ABAP, crie um destino HTTP externo na transação SM59 apontando para `api.cpfhub.io`, importe o certificado SSL via STRUST e use a classe `CL_HTTP_CLIENT` para fazer chamadas GET ao endpoint da API com o header `x-api-key`. A resposta JSON pode ser parseada com `/UI2/CL_JSON` e encapsulada em um Function Module reutilizável, aplicável em processos de cadastro de Business Partners, emissão de NF-e e admissão de funcionários.

## Introdução

O SAP é o sistema ERP mais utilizado por grandes empresas no Brasil, gerenciando desde processos de vendas e compras até faturamento, contabilidade e recursos humanos. Em muitos desses processos, a validação de CPF é uma etapa essencial — seja no cadastro de clientes (Business Partners), na emissão de notas fiscais ou na admissão de funcionários. No entanto, a integração com APIs REST externas a partir de código ABAP pode parecer desafiadora para desenvolvedores acostumados com o ecossistema SAP.

---

## Pré-requisitos

Antes de iniciar a implementação, certifique-se de que o ambiente SAP está preparado:

* **SAP NetWeaver 7.0 ou superior** -- Necessário para usar as classes CL_HTTP_CLIENT.

* **Configuração de destino RFC** -- Criar um destino HTTP externo na transação SM59 apontando para api.cpfhub.io.

* **Certificado SSL** -- Importar o certificado SSL do CPFHub.io na transação STRUST.

* **Conta no CPFHub.io** -- Criar uma conta gratuita em [cpfhub.io](https://www.cpfhub.io/) para obter a chave de API necessária para autenticação.

### Configuração do destino RFC (SM59)

1. Acesse a transação SM59.
2. Crie um novo destino do tipo G (HTTP Connection to External Server).
3. Informe o host: api.cpfhub.io
4. Porta: 443
5. Caminho: /cpf/
6. Marque a opção SSL Ativo.
7. Teste a conexão.

---

## Entendendo a API do CPFHub.io

A API utiliza o método GET com o CPF na URL. A autenticação é feita via header x-api-key. Veja o exemplo com cURL para referência:

```bash
curl -X GET https://api.cpfhub.io/cpf/12345678900 \
 -H "x-api-key: SUA_CHAVE_DE_API" \
 -H "Accept: application/json"
```

A resposta JSON:

```json
{
 "success": true,
 "data": {
 "cpf": "12345678900",
 "name": "João da Silva",
 "nameUpper": "JOAO DA SILVA",
 "gender": "M",
 "birthDate": "15/06/1990",
 "day": 15,
 "month": 6,
 "year": 1990
 }
}
```

---

## Implementação em ABAP: chamada HTTP

O código ABAP a seguir demonstra como fazer a requisição GET à API do CPFHub.io e processar a resposta JSON.

### Código completo do report

```abap
REPORT z_cpfhub_consulta.

DATA: lv_cpf TYPE string VALUE '12345678900',
 lv_url TYPE string,
 lv_api_key TYPE string VALUE 'SUA_CHAVE_DE_API',
 lo_http_client TYPE REF TO if_http_client,
 lv_response TYPE string,
 lv_status_code TYPE i,
 lv_reason TYPE string.

* Montar URL
CONCATENATE 'https://api.cpfhub.io/cpf/' lv_cpf INTO lv_url.

* Criar cliente HTTP
cl_http_client=>create_by_url(
 EXPORTING
 url = lv_url
 ssl_id = 'ANONYM'
 IMPORTING
 client = lo_http_client
 EXCEPTIONS
 argument_not_found = 1
 plugin_not_active = 2
 internal_error = 3
 OTHERS = 4 ).

IF sy-subrc <> 0.
 WRITE: / 'Erro ao criar cliente HTTP:', sy-subrc.
 RETURN.
ENDIF.

* Configurar timeout (10 segundos)
lo_http_client->set_timeout( timeout = 10 ).

* Configurar headers
lo_http_client->request->set_header_field(
 name = 'x-api-key'
 value = lv_api_key ).

lo_http_client->request->set_header_field(
 name = 'Accept'
 value = 'application/json' ).

* Configurar método GET
lo_http_client->request->set_method(
 if_http_request=>co_request_method_get ).

* Enviar requisição
lo_http_client->send(
 EXCEPTIONS
 http_communication_failure = 1
 http_invalid_state = 2
 http_processing_failed = 3
 OTHERS = 4 ).

IF sy-subrc <> 0.
 WRITE: / 'Erro ao enviar requisição:', sy-subrc.
 lo_http_client->close( ).
 RETURN.
ENDIF.

* Receber resposta
lo_http_client->receive(
 EXCEPTIONS
 http_communication_failure = 1
 http_invalid_state = 2
 http_processing_failed = 3
 OTHERS = 4 ).

IF sy-subrc <> 0.
 WRITE: / 'Erro ao receber resposta:', sy-subrc.
 lo_http_client->close( ).
 RETURN.
ENDIF.

* Obter status HTTP
lo_http_client->response->get_status(
 IMPORTING
 code = lv_status_code
 reason = lv_reason ).

* Obter corpo da resposta
lv_response = lo_http_client->response->get_cdata( ).

* Fechar conexão
lo_http_client->close( ).

* Exibir resultado
WRITE: / 'Status:', lv_status_code, lv_reason.
WRITE: / 'Resposta:', lv_response.
```

---

## Parseando a resposta JSON em ABAP

Para extrair os dados da resposta JSON, utilize a classe /UI2/CL_JSON ou CL_TREX_JSON_DESERIALIZER, dependendo da versão do SAP.

### Usando /UI2/CL_JSON

```abap
TYPES: BEGIN OF ty_cpf_data,
 cpf TYPE string,
 name TYPE string,
 nameupper TYPE string,
 gender TYPE string,
 birthdate TYPE string,
 day TYPE i,
 month TYPE i,
 year TYPE i,
 END OF ty_cpf_data.

TYPES: BEGIN OF ty_cpf_response,
 success TYPE abap_bool,
 data TYPE ty_cpf_data,
 END OF ty_cpf_response.

DATA: ls_response TYPE ty_cpf_response.

/ui2/cl_json=>deserialize(
 EXPORTING
 json = lv_response
 CHANGING
 data = ls_response ).

IF ls_response-success = abap_true.
 WRITE: / 'CPF:', ls_response-data-cpf.
 WRITE: / 'Nome:', ls_response-data-name.
 WRITE: / 'Gênero:', ls_response-data-gender.
 WRITE: / 'Nascimento:', ls_response-data-birthdate.
ELSE.
 WRITE: / 'CPF não encontrado.'.
ENDIF.
```

---

## Criando uma função reutilizável (Function Module)

Para que a validação de CPF possa ser chamada de diferentes programas e transações SAP, encapsule a lógica em um Function Module.

### Interface do Function Module

* **Import** -- IV_CPF (TYPE string), IV_API_KEY (TYPE string)
* **Export** -- ES_CPF_DATA (TYPE ty_cpf_data), EV_SUCCESS (TYPE abap_bool), EV_ERROR_MSG (TYPE string)
* **Exceptions** -- COMMUNICATION_ERROR, INVALID_CPF, API_ERROR

### Chamando o Function Module

```abap
DATA: ls_dados TYPE ty_cpf_data,
 lv_sucesso TYPE abap_bool,
 lv_erro TYPE string.

CALL FUNCTION 'Z_CPFHUB_CONSULTAR_CPF'
 EXPORTING
 iv_cpf = '12345678900'
 iv_api_key = 'SUA_CHAVE_DE_API'
 IMPORTING
 es_cpf_data = ls_dados
 ev_success = lv_sucesso
 ev_error_msg = lv_erro
 EXCEPTIONS
 communication_error = 1
 invalid_cpf = 2
 api_error = 3
 OTHERS = 4.

IF sy-subrc = 0 AND lv_sucesso = abap_true.
 WRITE: / 'Nome do titular:', ls_dados-name.
ELSE.
 WRITE: / 'Erro:', lv_erro.
ENDIF.
```

---

## Casos de uso no SAP

### Cadastro de Business Partner (BP)

Integre a validação de CPF na transação BP ou na BAPI correspondente para verificar o CPF antes de salvar o cadastro do parceiro de negócios.

### Emissão de nota fiscal (NF-e)

Antes de gerar a nota fiscal na transação J1B1N ou via BAPI, valide o CPF do destinatário para evitar rejeições pela SEFAZ.

### Admissão de funcionários (PA40)

No processo de contratação, valide o CPF do novo colaborador contra a base oficial antes de prosseguir com o cadastro no módulo HR.

### Pedidos de venda (VA01)

Adicione a validação de CPF como passo obrigatório na criação de pedidos de venda para clientes pessoa física.

---

## Tratamento de erros e rate limits

### Códigos HTTP

| Código | Significado | Ação no SAP |
| --- | --- | --- |
| 200 | Sucesso | Processar resposta normalmente |
| 400 | CPF inválido | Exibir mensagem ao usuário |
| 401 | API Key inválida | Verificar configuração |
| 429 | Rate limit excedido | Aguardar e tentar novamente |
| 500 | Erro do servidor | Log no SLG1 e retry |

### Rate limits

O plano gratuito permite 1 requisição a cada 2 segundos (50 consultas/mês). Para operações SAP em lote, o plano Pro (R$ 149/mês, 1.000 consultas) ou Corporativo é mais adequado.

---

## Boas práticas para integração SAP

* **Armazenar a API Key em tabela customizada** -- Nunca coloque a chave diretamente no código. Use uma tabela Z ou o Secure Store (SSFS).

* **Implementar cache local** -- Se o mesmo CPF é consultado repetidamente, armazene o resultado em uma tabela Z com timestamp de expiração.

* **Log de consultas** -- Registre todas as consultas no SLG1 para auditoria e rastreabilidade.

* **Tratamento assíncrono para lotes** -- Em processos de migração ou atualização em massa, use jobs em background com controle de rate limit.

* **Monitoramento via SM21** -- Configure alertas para falhas de comunicação com a API.

---

## Perguntas frequentes

### Qual versão mínima do SAP NetWeaver é necessária para integrar com a API do CPFHub.io?
É necessário SAP NetWeaver 7.0 ou superior para utilizar as classes `CL_HTTP_CLIENT` e `/UI2/CL_JSON`. Versões anteriores podem exigir abordagens alternativas, como chamadas via RFC para um servidor intermediário. A maioria das instalações SAP ECC 6.0 e S/4HANA atende ao requisito sem configurações adicionais.

### Como armazenar a API Key do CPFHub.io de forma segura em ABAP?
Nunca armazene a chave diretamente no código-fonte ABAP. Use uma tabela Z customizada com controle de acesso por autorização, o SAP Secure Store (SSFS) disponível no NetWeaver 7.4+, ou o SAP Credential Store no S/4HANA Cloud. Isso facilita a rotação da chave sem necessidade de transporte e evita exposição em sistemas de controle de versão.

### A integração ABAP funciona para processos em lote com grandes volumes de CPF?
Sim, mas com atenção ao rate limit do plano gratuito (1 requisição a cada 2 segundos, 50/mês). Para migrações ou atualizações em massa, use o plano Pro ou Corporativo e implemente jobs em background com pausa controlada entre requisições. O cache local em tabela Z é fundamental para evitar consultas repetidas ao mesmo CPF.

### Como tratar falhas de comunicação com a API em processos críticos do SAP como emissão de NF-e?
Implemente uma lógica de fallback: se a API retornar erro ou timeout, use a validação algorítmica local dos dígitos verificadores como segunda linha de defesa e registre o incidente no SLG1. Para NF-e, considere uma fila de reprocessamento para CPFs que não puderam ser validados em tempo real, evitando bloqueios no faturamento.

### Leia também

- [Como validar CPF no frontend com React e API REST](https://cpfhub.io/blog/como-validar-cpf-no-frontend-com-react-e-api-rest)
- [SLA de API de CPF: níveis de disponibilidade e o que exigir do seu provedor](https://cpfhub.io/blog/sla-api-cpf-niveis-disponibilidade)
- [API de CPF grátis para desenvolvedores: como começar em 5 minutos](https://cpfhub.io/blog/api-cpf-gratis-desenvolvedores-comecar-5-minutos)
- [10 erros mais comuns ao integrar uma API de CPF e como evitá-los](https://cpfhub.io/blog/10-erros-mais-comuns-ao-integrar-uma-api-de-cpf)

---

## Conclusão

Integrar a API de consulta de CPF do CPFHub.io em sistemas SAP usando ABAP é um processo estruturado que pode ser aplicado em diversos cenários, desde cadastro de clientes até emissão de notas fiscais. Com as classes de HTTP client nativas do SAP, o código é direto e pode ser encapsulado em Function Modules reutilizáveis. O plano gratuito é ideal para desenvolvimento e testes, e os planos Pro e Corporativo atendem operações SAP em escala.

Cadastre-se em [cpfhub.io](https://www.cpfhub.io/) — 50 consultas mensais gratuitas, sem cartão de crédito — e comece a validar CPFs diretamente nos seus processos SAP hoje mesmo.

