---
# System prepended metadata

title: 'Refatoração de Venda Pré-Autorização, Autorização e Captura'

---

# Refatoração de Venda Pré-Autorização, Autorização e Captura

# Roteiro de Homologação
feature: Refatoração do Fluxo de Venda Pré-Autorização, Autorização e Captura


### Rotas:

Api:

**PreAutorizarVenda**
https://slhomologue-ti.redeserveloja.com/Novo/ApiIntegracao/Vendas/PreAutorizarVenda

**body:**

```
{
  "Pedido": {
    "Valor": 53,
    "QuantidadeParcelas": 2,
    "Descricao": "Teste vessnda"
  },
  "Comprador": {
    "Nome": "Teste smaster",
    "Email": "bryanne@serveloja.com.br",
    "TelefoneComprador": {
      "DDD": 79,
      "Numero": 999428666
    },
    "EnderecoComprador": {
      "CEP": "49095-780",
      "Bairro": "Centro",
      "Cidade": "Aracaju",
      "Numero": "123",
      "UF": "SE",
      "Logradouro": "Rua H",
      "Complemento": "Casa"
    },
    "Cartao": {
      "CodigoSeguranca": "123",
      "NomeTitular": "teste master",
      "Numero": "5448280000000007",
      "ValidadeMes":1,
      "ValidadeAno": 2020,
      "CodigoBandeira": 3,
      "NumeroDocumentoTitular": "98747401591",
      "Senha": ""
    }
  }
}
```

Onde o **DTO endereço** e **e-mail** são campos opcionais,
a senha é obrigatória para as bandeiras adicionais
e o DTO 'Cartao' não é obrigatório caso passe o DTO 'CartaoToken' ou seja, a venda pode ser realizada pelo cartão ou pelo token. E o **NumeroDocumentoTitular** é obrigatório para vendas igual ou acima de R$ 500,00.
O CVV não é obrigatórios para as bandeiras CREDISHOP e ASSOMISE

No caso da venda por Token a body da request:

```
{
  "Pedido": {
    "Valor": 53,
    "QuantidadeParcelas": 2,
    "Descricao": "Teste vessnda"
  },
  "Comprador": {
    "Nome": "Teste smaster",
    "Email": "bryanne@serveloja.com.br",
    "TelefoneComprador": {
      "DDD": 79,
      "Numero": 999428666
    },
    "EnderecoComprador": {
      "CEP": "49095-780",
      "Bairro": "Centro",
      "Cidade": "Aracaju",
      "Numero": "123",
      "UF": "SE",
      "Logradouro": "Rua H",
      "Complemento": "Casa"
    },
    "CartaoToken": {
      "ChavePublica": ""
    }
  }
}
```

**Retorno:**

```
        "Id": 1274615,
        "Pedido": "4141057",
        "CodigoTransacao": "661835779",
        "Aprovada": true,
        "Liberada": true,
        "Resultado": "Pré-Autorizada",
        "CodigoRetorno": 0,
        "CodigoPagador": 2055691
```

**AutorizarVenda**
https://slhomologue-ti.redeserveloja.com/Novo/ApiIntegracao/Vendas/AutorizarVenda

o body é extamente o mesmo da **PreAutorizarVenda** a diferença é o status da transação.

Onde,

```
select STR_ID_STATUS_TRANSACAO from TB_TRANSACAO where TRA_ID_TRANSACAO = 0
```

PreAutorizarVenda staus: (9 Pre-Capturado)
AutorizarVenda staus: (3 Autorizada)
e em caso de negação do cartão (4 Não Autorizada)

---

**Obs: Os métodos PreAutorizarVenda e AutorizarVenda será o mesmo tanto para clients Externos quando para os outros clients implementados na API. O próprio metódo que irá se encarregar de resolver a origem da transação.**

**Consultar origens transação:

```
SELECT TOP 10 TRA_ID_TRANSACAO TRA_IN_ORIGEM_INCLUSAO FROM TB_TRANSACAO ORDER BY 1 DESC
SELECT * FROM TB_TIPO_ORIGEM_TRANSACAO
```

---


**CapturarVenda**(Externa e Serveloja)
https://slhomologue-ti.redeserveloja.com/Novo/ApiIntegracao/Vendas/CapturarVenda?codigoPagador=4140263

onde **codigoPagador** é o código do autorizador ou AUT_NR_PEDIDO_AUTORIZADOR da tabela tb_autorizacao
 que corresponde tra_id_transcao da tabela tb_transacao do banco autorizador
 
 ```
 select top 10 AUT_ID_AUTORIZACAO, AUT_NR_PEDIDO_AUTORIZADOR from HomologBD_Serveloja.dbo.TB_AUTORIZACAO order by 1 desc

select top 10 TRA_ID_TRANSACAO from HomologBD_Autorizador.dbo.TB_TRANSACAO order by 1 desc
 ```
 

---

---

**Realizar Cadastros de cartão com token:**
https://slhomologue-ti.redeserveloja.com/Novo/ApiVendas/CardWallet/StoreCard
**body:**

```
{
  "securityCode": "123",
  "name": "THIAGO",
  "holder": "THIAGO FERREIRA",
  "number": "5190921748467251",
  "expirationDate": "2020-10-01T00:00:00",  
  "brandId": 3
}
```

---

Uteis: 
https://developercielo.github.io/manual/cielo-ecommerce#cart%C3%A3o-de-cr%C3%A9dito-sandbox

https://www.userede.com.br/desenvolvedores/pt/produto/e-Rede#tutorial

https://www.4devs.com.br/gerador_de_numero_cartao_credito

## Casos de Validação:

* Validar Entrada de valida de campos obrigatórios

* Validar a documentação do swagger com relação ao dados de entrada

* Validar o status da transação (Pre Autorizar e Autorizar)
    ```
    --FullAcquirer e VAN
	SELECT TOP 10 A.STR_ID_STATUS_TRANSACAO FROM TB_AUTORIZACAO AS A ORDER BY A.AUT_ID_AUTORIZACAO DESC
	--FullAcquirer
	SELECT TOP 10 TRA.STR_ID_STATUS_TRANSACAO FROM TB_TRANSACAO AS TRA ORDER BY TRA.TRA_ID_TRANSACAO DESC
	--VAN
	SELECT TOP 10 TBA.STR_ID_STATUS_TRANSACAO FROM TB_TRANSACAO_BANDEIRA_ADICIONAL AS TBA ORDER BY TBA.TBA_ID DESC  
    ```	
	
* Validar a origem da transação de acordo com o usuario logado

    ```
    SELECT * FROM TB_TIPO_ORIGEM_TRANSACAO
	--FullAcquirer
	SELECT TOP 10 TRA.TRA_IN_ORIGEM_INCLUSAO FROM TB_TRANSACAO AS TRA ORDER BY TRA.TRA_ID_TRANSACAO DESC
	--VAN
	SELECT TOP 10 TBA.TBA_IN_ORIGEM_INCLUSAO FROM TB_TRANSACAO_BANDEIRA_ADICIONAL AS TBA ORDER BY TBA.TBA_ID DESC
    ```
	  
	
* Validar se os dados salvos está de acordo com o fluxo de venda digitada por tipo de bandeira (Full FullAcquirer e VAN)
	Pra cada venda digitada realiza de acordo com o tipo de cartao utilizado, é definido qual fluxo seguir:
    
    ```    
	--FullAcquirer
	select * from TB_CARTAO where CAR_IN_TIPO = 'F'
	--VAN
	select * from TB_CARTAO where CAR_IN_TIPO = 'V'
	Onde, caso a bandeira seja do tipo um FullAcquirer ela deve gerar um registro na TB_TRANSACAO e caso seja uma VAN TB_TRANSACAO_BANDEIRA_ADICIONAL
    ```
    	
	
* Validar se uma venda com usuario 0800 não gerou um pedido no autorizado
	Pra cada venda realizada com 0800 de acordo com cada fluxo FullAcquirer ou VAN ele salva os dados no banco, mas não envia as informações para ser aprovada no autorizador

* Validar a captura da venda

* Validar a retentativa de sonda da transacao por timeout de operacao do autorizado
	O fluxo da venda digitada tem uma implementação de retentar buscar uma venda enviada para o autorizado caso tenha dado um erro de time out, porém ele não tentar gerar uma segunda autorização no caso de falha.

* Validar os dados de retorno:
    
    ```
    declare @ID int = 1274364
    declare @Pedido bigint = 4140711
    select 
    AUT_ID_AUTORIZACAO as Id,
    AUT_TX_NUMERO_PEDIDO as Pedido, 
    AUT_TX_CODIGO_AUTORIZACAO as CodigoTransacao,
    AUT_TX_CODIGO_TRANSACAO as CodigoAutorizacao
    from TB_AUTORIZACAO where AUT_ID_AUTORIZACAO = @ID

    -- Pedido
    select * from TB_TRANSACAO where TRA_ID_TRANSACAO = @Pedido

    SELECT * FROM TB_TRANSACAO_PARCELAS WHERE TRA_ID_TRANSACAO = @Pedido
    ```