# 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
```