> For the complete documentation index, see [llms.txt](https://developer.bemfacil.com.br/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developer.bemfacil.com.br/servicos/introducao-ao-gateway-de-pagamentos-bemfacil-r/sdk-e-bibliotecas/sdk-python.md).

# SDK Python

## bemfácil® Payment SDK <a href="#bemfacil-payment-sdk" id="bemfacil-payment-sdk"></a>

Este SDK facilita a integração com o gateway de pagamentos bemfácil®, permitindo que você realize operações como autenticação, tokenização de cartões, criação de transações, captura de pagamentos e consulta de status de transações.

### Instalação <a href="#instalacao" id="instalacao"></a>

Para instalar o SDK, você pode usar o pip:

```sh
pip install bemfacil_payment_sdk
```

### Uso <a href="#uso" id="uso"></a>

Para usar o SDK, você precisa de um nome de usuário e senha fornecidos pela bemfacil®. Para obter essas credenciais, entre em contato com a bemfacil® para adquirir um usuário de teste ou de produção.

#### Configuração Inicial <a href="#configuracao-inicial" id="configuracao-inicial"></a>

Primeiro, configure o SDK com suas credenciais. Você pode fazer isso diretamente no seu código ou integrá-lo em um projeto Django (veja a seção de Integração com Django abaixo).

```python
from bemfacil_payment_sdk.client import BemFacilPaymentClient

client = BemFacilPaymentClient(
    username='seu_email@empresa.com',
    password='sua_senha'
)
```

#### Tokenização de Cartão <a href="#tokenizacao-de-cartao" id="tokenizacao-de-cartao"></a>

Para tokenizar um cartão, você pode usar o seguinte código:

```python
card_token = client.tokenize_card('5555666677778884', '12/25', {
    'first_name': 'John',
    'last_name': 'Doe',
    'birth_date': '01/01/1970',
    'phone': '+5511999999999',
    'email': 'john.doe@example.com'
})
print(card_token)
```

#### Criação de Transação <a href="#criacao-de-transacao" id="criacao-de-transacao"></a>

Para criar uma transação, use o seguinte código:

```python
transaction = client.create_transaction('40404040411', 10, 'credit', 1)
print(transaction)
```

#### Captura de Pagamento <a href="#captura-de-pagamento" id="captura-de-pagamento"></a>

Para capturar um pagamento, use o seguinte código:

```python
capture_response = client.capture_payment(transaction['transaction_id'], {
    'number': '5555666677778884',
    'expiry_date': '12/25',
    'cvv': '123'
})
print(capture_response)
```

#### Consulta de Status de Transação <a href="#consulta-de-status-de-transacao" id="consulta-de-status-de-transacao"></a>

Para consultar o status de uma transação, use o seguinte código:

```python
status = client.get_transaction_status(transaction['transaction_id'])
print(status)
```

#### Atualização de Senha <a href="#atualizacao-de-senha" id="atualizacao-de-senha"></a>

Para atualizar a senha, use o seguinte código:

```python
response = client.change_password('nova_senha123')
print(response)
```

#### Atualização do Token de Autenticação <a href="#atualizacao-do-token-de-autenticacao" id="atualizacao-do-token-de-autenticacao"></a>

Para atualizar o token de autenticação, use o seguinte código:

```python
client.refresh_auth_token()
print('Token atualizado:', client.api_key)
```

### Integração com Django <a href="#integracao-com-django" id="integracao-com-django"></a>

Você pode integrar este SDK em um projeto Django. Aqui está um exemplo de como fazer isso:

#### Configuração <a href="#configuracao" id="configuracao"></a>

Adicione as configurações do bemfacil® no seu `settings.py`:

```python
# settings.py
BEMFACIL_USERNAME = 'seu_email@empresa.com'
BEMFACIL_PASSWORD = 'sua_senha'
BEMFACIL_BASE_URL = 'https://gws-hml.bemfacil.com.br'
```

Crie um arquivo de configuração para inicializar o cliente do SDK:

**config/bemfacil.py**:

```python
from django.conf import settings
from bemfacil_payment_sdk.client import BemFacilPaymentClient


def get_bemfacil_client():
    return BemFacilPaymentClient(
        username=settings.BEMFACIL_USERNAME,
        password=settings.BEMFACIL_PASSWORD,
        base_url=settings.BEMFACIL_BASE_URL
    )
```

Use o SDK em suas views:

**views.py**:

```python
from django.shortcuts import render
from django.http import JsonResponse
from config.bemfacil import get_bemfacil_client


def tokenize_card_view(request):
    if request.method == 'POST':
        card_number = request.POST.get('card_number')
        card_expiry = request.POST.get('card_expiry')
        card_holder_data = {
            'first_name': request.POST.get('first_name'),
            'last_name': request.POST.get('last_name'),
            'birth_date': request.POST.get('birth_date'),
            'phone': request.POST.get('phone'),
            'email': request.POST.get('email')
        }
        client = get_bemfacil_client()
        try:
            response = client.tokenize_card(card_number, card_expiry, card_holder_data)
            return JsonResponse(response)
        except Exception as e:
            return JsonResponse({'error': str(e)}, status=400)

    return render(request, 'tokenize_card.html')


def create_transaction_view(request):
    if request.method == 'POST':
        document = request.POST.get('document')
        amount = request.POST.get('amount')
        payment_method = request.POST.get('payment_method')
        installments = request.POST.get('installments')
        client = get_bemfacil_client()
        try:
            response = client.create_transaction(document, amount, payment_method, installments)
            return JsonResponse(response)
        except Exception as e:
            return JsonResponse({'error': str(e)}, status=400)

    return render(request, 'create_transaction.html')
```

### Testes <a href="#testes" id="testes"></a>

Para rodar os testes, use o comando:

```sh
python -m unittest discover tests
```

### Usuários de teste <a href="#usuarios-de-teste" id="usuarios-de-teste"></a>

| Username                    | Password      |
| --------------------------- | ------------- |
| <gateway01@bemfacil.com.br> | BemFacil2024@ |
| <gateway02@bemfacil.com.br> | BemFacil2024@ |
| <gateway03@bemfacil.com.br> | BemFacil2024@ |

### Cartões de Teste <a href="#cartoes-de-teste" id="cartoes-de-teste"></a>

Aqui estão alguns cartões de teste que você pode usar para simular transações durante o desenvolvimento:

| Bandeira   | Número do Cartão | Exp Date | Cod. Sec |
| ---------- | ---------------- | -------- | -------- |
| VISA       | x895379980000580 | 12/23    | 518      |
| VISA       | x895379980000572 | 12/23    | 841      |
| VISA       | x895379980000564 | 12/23    | 11       |
| VISA       | x895379980000325 | 12/23    | 45       |
| Mastercard | 512X342233150747 | ANY      | ANY      |
| Mastercard | 512X343287499758 | ANY      | ANY      |
| Mastercard | 51203501XXX64594 | ANY      | ANY      |
| Mastercard | 222269042006459X | ANY      | ANY      |

### Contato <a href="#contato" id="contato"></a>

Para obter as credenciais de usuário de teste ou de produção, entre em contato com a bemfacil®.
