runBeforeCharge.
Para runBeforeCharge=false, o ciclo de vida de uma transação com avaliação antifraude percorre três etapas:
- Pré Autorização
- Análise Antifraude
- Captura

O comportamento automatizado do ciclo de vida da transação pode ser escolhido
utilizando as configurações de
captureOnApproved e refundOnReproved feitas
diretamente no setup de provedor de antifraude para uso na Malga.runBeforeCharge=true, o ciclo de vida de uma transação com avaliação antifraude percorre duas etapas:
- Análise Antifraude
- Captura

Quais opções valem em cada arranjo
Ocapture que você envia na cobrança define quais opções do provedor antifraude
chegam a ser consideradas. É a fonte mais comum de confusão, porque a intuição
costuma ser a oposta do comportamento real.
| Arranjo da cobrança | O que acontece | Opções que decidem o desfecho |
|---|---|---|
capture: false | Pré-autorizamos, avaliamos o risco e então capturamos ou cancelamos. | captureOnApproved, captureOnReproved, refundOnReproved, captureOnError, refundOnError |
capture: true | Pré-autorizamos, avaliamos o risco e capturamos quando o antifraude aprova, mesmo com captureOnApproved: false. Depende de liberação gradual. | captureOnReproved, refundOnReproved, captureOnError, refundOnError |
runBeforeCharge habilitado | Avaliamos antes de acionar o adquirente. Uma reprovação impede que a cobrança exista. | captureOnReproved e captureOnError decidem se a cobrança segue mesmo assim |
Com
capture: true e antifraude configurado, a Malga pré-autoriza a cobrança
e captura sozinha quando o antifraude aprova, sem que você chame o serviço de
captura. Esse comportamento vale para cartão de crédito, inclusive Click to
Pay, em merchants sem fluxo de pagamentos. Não vale para 3DS com setupId nem
para MPI externo.Durante a análise, a cobrança aparece como pre_authorized com
capture: false. Depois da captura, ela passa a authorized com
capture: true, e os webhooks seguem o status.O recurso está em liberação gradual. Enquanto a sua conta não for liberada, a
API responde 400 com a mensagem “The capture cannot be true in this
operation”. Fale com o suporte para habilitar. Se você quer que o resultado
do antifraude decida os dois lados sem depender dessa liberação, envie
capture: false.O prazo para o antifraude aprovar e a cobrança ser capturada é de 72 horas,
contadas da criação. Uma aprovação que chega depois do prazo não captura. Uma
pré-autorização que continua sem veredito após as 72 horas é cancelada
automaticamente. Reprovação e erro do antifraude seguem as opções do
provedor, como em qualquer outra cobrança. No sandbox, a simulação do
veredito segue a mesma regra, mas o cancelamento automático em 72 horas não
existe.
Exemplos de uso do antifraude
Para utilizar análises antifraude em suas transações basta estar credenciado em um provedor antifraude e configurá-lo em seu fluxo de pagamentos. Assim, será possível processar uma transação enviando as informações adicionais de antifraude.Exemplo de cobrança com Antifraude aprovado
Os exemplos abaixo usam a URL de produção (
https://api.malga.io). Para
testar no sandbox, use https://sandbox-api.malga.io com suas credenciais de
sandbox. As cobranças de sandbox aparecem no ambiente de testes do Dashboard.
Veja Ambientes.curl --location --request POST 'https://api.malga.io/v1/charges' \
--header 'x-client-id: <YOUR_CLIENT_ID>' \
--header 'x-api-key: <YOUR_API_KEY>' \
--header 'Content-Type: application/json' \
--data-raw '{
"merchantId": "c04b6955-09d5-42ab-bc4a-287504ed0098",
"amount": 100,
"currency": "BRL",
"statementDescriptor": "Pedido #231 loja joão",
"capture": true,
"paymentMethod": {
"paymentType": "credit",
"installments": 1
},
"paymentSource": {
"sourceType": "card",
"card": {
"cardHolderName": "JOSE DAS NEVES",
"cardNumber": "4929564637987814",
"cardCvv": "120",
"cardExpirationDate": "12/2026"
}
},
"fraudAnalysis": {
"sla": 10,
"customer": {
"name": "Joao Torres",
"phone": "11 99329899",
"email": "joao@gmail.com",
"identity": "45762964851",
"identityType": "CPF",
"registrationDate": "2022-07-26T16:11:35.756Z",
"billingAddress": {
"street": "Rua Um",
"number": "200",
"zipCode": "02010010",
"country": "BR",
"state": "SP",
"district": "Jardim Paraiso",
"city": "Sao Paulo",
"complement": "ap 10"
},
"browser": {
"browserFingerprint": "57d07c77f87f4cb38063dc4cb9fcb750",
"cookiesAccepted": false,
"email": "comprador@test.com.br",
"hostName": "google.com",
"ipAddress": "127.0.0.1",
"type": "Chrome"
}
},
"cart": {
"items": [
{
"name": "ItemTeste1",
"quantity": 1,
"sku": "20170511",
"unitPrice": 100,
"risk": "High",
"locality": "Local do evento",
"date": "2017-03-21T22:36:53",
"type": 1,
"genre": "Concerto de música",
"tickets": {
"quantityTicketSale": 800,
"quantityEventHouse": 2,
"convenienceFeeValue": 0,
"quantityFull": 100,
"quantityHalf": 50,
"batch": 1234123
},
"location": {
"country": "BR",
"street": "Rua Um",
"number": "2",
"complement": "ap 1",
"zipCode": "02417140",
"city": "Sao Paulo",
"state": "SP",
"district": "Bairro"
}
}
]
}
}
}'
< HTTP/2 201
< content-type: application/json; charset=utf-8
{
"id": "2a37eb2c-be9b-4f92-8e13-e609130e6cca",
"clientId": "<YOUR_CLIENT_ID>",
"merchantId": "c04b6955-09d5-42ab-bc4a-287504ed0098",
"description": null,
"orderId": null,
"createdAt": "2022-08-25T20:56:37.265Z",
"amount": 100,
"originalAmount": 100,
"currency": "BRL",
"statementDescriptor": "Pedido #231 loja joão",
"capture": true,
"status": "authorized",
"paymentMethod": {
"installments": 1,
"paymentType": "credit"
},
"paymentSource": {
"sourceType": "card",
"cardId": "d10c6dbd-aff6-4875-a2a4-bf3f64f5f424"
},
"fraudAnalysisMetadata": {
"sla": 10,
"customer": {
"name": "Joao Torres",
"identity": "45762964851",
"identityType": "CPF",
"birthdate": null,
"phone": "11 99329899",
"billingAddress": {
"street": "Rua Um",
"number": "200",
"complement": "ap 10",
"zipCode": "02010010",
"city": "Sao Paulo",
"state": "SP",
"district": "Jardim Paraiso"
}
},
"cart": {
"items": [
{
"name": "ItemTeste1",
"quantity": 1,
"sku": "20170511",
"unitPrice": 100,
"risk": "High",
"locality": "Local do evento",
"date": "2017-03-21T22:36:53",
"type": 1,
"genre": "Concerto de música",
"tickets": {
"quantityTicketSale": 800,
"quantityEventHouse": 2,
"convenienceFeeValue": 0,
"quantityFull": 100,
"quantityHalf": 50,
"batch": 1234123
},
"location": {
"country": "BR",
"street": "Rua Um",
"number": "2",
"complement": "ap 1",
"zipCode": "02417140",
"city": "Sao Paulo",
"state": "SP",
"district": "Bairro"
}
}
]
}
},
"transactionRequests": [
{
"id": "384a258d-248d-43f9-ab79-fa79a2f06237",
"createdAt": "2022-08-25T20:56:37.796Z",
"updatedAt": "2022-08-25T20:56:37.796Z",
"idempotencyKey": null,
"providerId": "ad2eb0c4-ea7b-4774-9ac9-3295b083b1cb",
"providerType": "SANDBOX",
"transactionId": "1737284",
"amount": 100,
"authorizationCode": "6076640",
"authorizationNsu": "3028818",
"requestStatus": "success",
"requestType": "capture",
"responseTs": "8ms",
"providerAuthorization": {
"networkAuthorizationCode": "7354551",
"networkResponseCode": "5759371"
}
},
{
"id": "f5bf6c36-0c8a-4078-84fd-b9f374bb0e1b",
"createdAt": "2022-08-25T20:56:37.645Z",
"updatedAt": "2022-08-25T20:56:37.645Z",
"idempotencyKey": null,
"providerId": "ad2eb0c4-ea7b-4774-9ac9-3295b083b1cb",
"providerType": "ANTIFRAUD_SANDBOX",
"transactionId": "9475312",
"amount": 100,
"authorizationCode": null,
"authorizationNsu": null,
"requestStatus": "success",
"requestType": "anti_fraud",
"responseTs": "19ms",
"fraudAnalysis": {
"score": 85,
"status": "approved"
}
},
{
"id": "dfce8327-3ecf-4725-b389-af253823acfd",
"createdAt": "2022-08-25T20:56:37.432Z",
"updatedAt": "2022-08-25T20:56:37.866Z",
"idempotencyKey": "e4b44aa1-8386-4541-a5f3-2b6801676e32",
"providerId": "ad2eb0c4-ea7b-4774-9ac9-3295b083b1cb",
"providerType": "SANDBOX",
"transactionId": "6498444",
"amount": 100,
"authorizationCode": "3698706",
"authorizationNsu": "4897050",
"requestStatus": "success",
"requestType": "pre_authorization",
"responseTs": "36ms",
"providerAuthorization": {
"networkAuthorizationCode": "7376566",
"networkResponseCode": "2946159"
}
}
]
}
Exemplo de cobrança com Antifraude reprovado
Após a pré autorização, se a análise de risco for reprovada, a transação é rejeitada e a pré autorização é cancelada automaticamente.curl --location --request POST 'https://api.malga.io/v1/charges' \
--header 'x-client-id: <YOUR_CLIENT_ID>' \
--header 'x-api-key: <YOUR_API_KEY>' \
--header 'Content-Type: application/json' \
--data-raw '{
"merchantId": "8b6b4c57-fa57-4d8b-84e8-77cce8482cc9",
"amount": 991,
"currency": "BRL",
"statementDescriptor": "Pedido #231 loja joão",
"capture": true,
"paymentMethod": {
"paymentType": "credit",
"installments": 1
},
"paymentSource": {
"sourceType": "card",
"card": {
"cardHolderName": "JOSE DAS NEVES",
"cardNumber": "4929564637987814",
"cardCvv": "120",
"cardExpirationDate": "12/2026"
}
},
"fraudAnalysis": {
"sla": 10,
"customer": {
"name": "João Neves",
"identity": "62871519005",
"identityType": "CPF",
"birthdate": null,
"phone": "219988776654",
"billingAddress": {
"street": "Rua CJ-14",
"number": "100",
"zipCode": "69314702",
"country": "BR",
"state": "PR",
"district": "Jardim Tropical",
"city": "Boa vista",
"complement": "ap 110"
},
"browser":{
"browserFingerprint":"57d07c77f87f4cb38063dc4cb9fcb750",
"cookiesAccepted":false,
"email":"comprador@test.com.br",
"hostName":"google.com",
"ipAddress":"127.0.0.1",
"type":"Chrome"
}
},
"cart": {
"items": [
{
"name": "ItemTeste1",
"quantity": 1,
"sku": "20170511",
"unitPrice": 991,
"risk": "High"
}
]
}
}
}'
< HTTP/2 201
< content-type: application/json; charset=utf-8
{
"id": "44d7ceab-f501-4abc-965c-45f5265d249f",
"clientId": "<YOUR_CLIENT_ID>",
"merchantId": "8b6b4c57-fa57-4d8b-84e8-77cce8482cc9",
"description": null,
"orderId": null,
"createdAt": "2022-08-10T19:21:19.452Z",
"amount": 0,
"originalAmount": 991,
"currency": "BRL",
"statementDescriptor": "Pedido #231 loja joão",
"capture": true,
"status": "canceled",
"paymentMethod": {
"installments": 1,
"paymentType": "credit"
},
"paymentSource": {
"sourceType": "card",
"cardId": "f84d1566-0398-471d-b48b-3048ed83ea3e"
},
"fraudAnalysisMetadata": {
"sla": 10,
"customer": {
"id": "32ef3246-2635-4060-a3e3-a6d34e0bcb10",
"updatedAt": "2022-08-10T14:31:37.045Z",
"createdAt": "2022-08-10T14:31:37.045Z",
"idempotencyKey": null,
"requestId": null,
"name": "João Neves",
"identity": "62871519005",
"identityType": "CPF",
"birthdate": null,
"phone": "219988776654",
"billingAddress": {
"street": "Rua CJ-14",
"number": "100",
"zipCode": "69314702",
"country": "BR",
"state": "PR",
"district": "Jardim Tropical",
"city": "Boa vista",
"complement": "ap 110"
}
},
"cart": {
"items": [
{
"name": "ItemTeste1",
"quantity": 1,
"sku": "20170511",
"unitPrice": 991,
"risk": "High"
}
]
}
},
"transactionRequests": [
{
"id": "18c9aae5-4723-4913-9cb0-28b7536e83ff",
"createdAt": "2022-08-10T19:21:21.910Z",
"updatedAt": "2022-08-10T19:21:21.910Z",
"idempotencyKey": null,
"providerId": "7a6c5924-076f-45d6-82ca-ca3dfc9ab2a8",
"providerType": "PAGARME_V5",
"transactionId": "17979806",
"amount": 991,
"authorizationCode": "386630",
"authorizationNsu": "17979806",
"requestStatus": "success",
"requestType": "void",
"responseTs": "333ms",
"providerAuthorization": {
"networkAuthorizationCode": "386630",
"networkResponseCode": "authorized"
}
},
{
"id": "7cd80b1c-59b3-46a6-9ef9-a6fe1d036cb9",
"createdAt": "2022-08-10T19:21:21.393Z",
"updatedAt": "2022-08-10T19:21:21.393Z",
"idempotencyKey": null,
"providerId": "7fe5a4b6-9428-45da-94ca-184819f3f273",
"providerType": "CLEARSALE",
"transactionId": "877429535F26463EA0EB7991471BCD43",
"amount": 991,
"authorizationCode": null,
"authorizationNsu": null,
"requestStatus": "success",
"requestType": "anti_fraud",
"responseTs": "1340ms",
"fraudAnalysis": {
"score": 97,
"status": "reproved"
}
},
{
"id": "61e799c0-8388-46a3-8d52-768e8c5d4982",
"createdAt": "2022-08-10T19:21:19.532Z",
"updatedAt": "2022-08-10T19:21:21.982Z",
"idempotencyKey": "345fcdec-a431-41f5-8976-69e79ca908e8",
"providerId": "7a6c5924-076f-45d6-82ca-ca3dfc9ab2a8",
"providerType": "PAGARME_V5",
"transactionId": "17979806",
"amount": 991,
"authorizationCode": "386630",
"authorizationNsu": "17979806",
"requestStatus": "success",
"requestType": "pre_authorization",
"responseTs": "418ms",
"providerAuthorization": {
"networkAuthorizationCode": "386630",
"networkResponseCode": "authorized"
}
}
]
}
Sempre que a transação for reprovada no antifraude, por padrão faremos o
cancelamento da pré autorização automaticamente. Caso a tentativa de
cancelamento falhe, a transação manterá o status
pre_authorized e poderá ser
cancelada ou capturada manualmente, de acordo com a sua preferência.Exemplo de cobrança com erro ao acessar Antifraude
Em cobranças comcapture: false, caso um erro ocorra no provedor antifraude e nenhuma das opções de erro esteja habilitada, a transação é retornada ainda pré-autorizada. Em cobranças com capture: true e antifraude, a pré-autorização também existe até o veredito, e o desfecho segue captureOnError ou refundOnError.
curl --location --request POST 'https://api.malga.io/v1/charges' \
--header 'x-client-id: <YOUR_CLIENT_ID>' \
--header 'x-api-key: <YOUR_API_KEY>' \
--header 'Content-Type: application/json' \
--data-raw '{
"merchantId": "4dc47427-0257-44dd-9607-e10f10a7bdb1",
"amount": 991,
"currency": "BRL",
"statementDescriptor": "Pedido #231 loja joão",
"capture": true,
"paymentMethod": {
"paymentType": "credit",
"installments": 1
},
"paymentSource": {
"sourceType": "card",
"card": {
"cardHolderName": "JOSE DAS NEVES",
"cardNumber": "4929564637987814",
"cardCvv": "120",
"cardExpirationDate": "12/2026"
}
},
"fraudAnalysis": {
"sla": 10,
"customer": {
"name": "João Neves",
"identity": "62871519005",
"identityType": "CPF",
"birthdate": null,
"phone": "219988776654",
"billingAddress": {
"street": "Rua CJ-14",
"number": "100",
"zipCode": "69314702",
"country": "BR",
"state": "PR",
"district": "Jardim Tropical",
"city": "Boa vista",
"complement": "ap 110"
}
},
"cart": {
"items": [
{
"name": "ItemTeste1",
"quantity": 1,
"sku": "20170511",
"unitPrice": 991,
"risk": "High"
}
]
}
}
}'
< HTTP/2 201
< content-type: application/json; charset=utf-8
{
"id": "0bbd06e6-7424-4f17-a66b-be313212bf97",
"clientId": "<YOUR_CLIENT_ID>",
"merchantId": "4dc47427-0257-44dd-9607-e10f10a7bdb1",
"description": null,
"orderId": null,
"createdAt": "2022-08-10T19:26:55.701Z",
"amount": 991,
"originalAmount": 991,
"currency": "BRL",
"statementDescriptor": "Pedido #231 loja joão",
"capture": true,
"status": "pre_authorized",
"paymentMethod": {
"installments": 1,
"paymentType": "credit"
},
"paymentSource": {
"sourceType": "card",
"cardId": "4481cbca-c501-40c3-9136-0bed194301c5"
},
"fraudAnalysisMetadata": {
"sla": 10,
"customer": {
"id": "32ef3246-2635-4060-a3e3-a6d34e0bcb10",
"updatedAt": "2022-08-10T14:31:37.045Z",
"createdAt": "2022-08-10T14:31:37.045Z",
"idempotencyKey": null,
"requestId": null,
"name": "João Neves",
"identity": "62871519005",
"identityType": "CPF",
"birthdate": null,
"phone": "219988776654",
"billingAddress": {
"street": "Rua CJ-14",
"number": "100",
"zipCode": "69314702",
"country": "BR",
"state": "PR",
"district": "Jardim Tropical",
"city": "Boa vista",
"complement": "ap 110"
}
},
"cart": {
"items": [
{
"name": "ItemTeste1",
"quantity": 1,
"sku": "20170511",
"unitPrice": 991,
"risk": "High"
}
]
}
},
"transactionRequests": [
{
"id": "326624fb-9140-4ceb-b81f-7345aacc3c5a",
"createdAt": "2022-08-10T19:26:56.388Z",
"updatedAt": "2022-08-10T19:26:56.388Z",
"idempotencyKey": "d1501629-d6cf-495f-a533-15e53df02765",
"providerId": "7fe5a4b6-9428-45da-94ca-184819f3f273",
"providerType": "CLEARSALE",
"transactionId": null,
"amount": 991,
"authorizationCode": null,
"authorizationNsu": null,
"requestStatus": "timeout",
"requestType": "anti_fraud",
"responseTs": "9ms",
"providerError": {
"retryable": false,
"declinedCode": null,
"networkDeniedMessage": null,
"networkDeniedReason": null
}
},
{
"id": "dbf43dad-3434-4a17-bd59-6b24d2db2647",
"createdAt": "2022-08-10T19:26:55.802Z",
"updatedAt": "2022-08-10T19:26:56.412Z",
"idempotencyKey": "d1501629-d6cf-495f-a533-15e53df02765",
"providerId": "7a6c5924-076f-45d6-82ca-ca3dfc9ab2a8",
"providerType": "PAGARME_V5",
"transactionId": "17981570",
"amount": 991,
"authorizationCode": "430210",
"authorizationNsu": "17981570",
"requestStatus": "success",
"requestType": "pre_authorization",
"responseTs": "467ms",
"providerAuthorization": {
"networkAuthorizationCode": "430210",
"networkResponseCode": "authorized"
}
}
]
}
Caso ocorra alguma instabilidade com o provedor antifraude, existem duas
opções para lidar com este cenário que devem ser configuradas em seu fluxo de
pagamentos: -
captureOnError: Faz a captura mesmo que ocorra instabilidade
no provedor de antifraude. - refundOnError: Faz o estorno da transação em
caso de instabilidade no provedor de antifraude. Não pode ser ligada ao mesmo
tempo que captureOnError. Em cobranças com capture: false, quando
captureOnError e refundOnError estão desligadas, a transação é retornada
como pre_authorized. Em cobranças com capture: true e antifraude, a
transação segue pré-autorizada até o veredito e, sem veredito em 72 horas, é
cancelada automaticamente.