Cartão de crédito
A Malga realiza o papel de hub de pagamentos, porém não realiza a liquidação financeira sendo necessário conta em uma instituição financeira integrante do sistema de pagamentos. Dessa forma, recebemos os dados enviados pelo cliente no Serviço de Charges e fazemos a comunicação com os adquirentes e PSPs. Confira abaixo a lista de provedores suportados para cobranças com Cartão de Crédito.
Fluxo de pagamento
- Para criar uma transação com Cartão basta o cliente informar o meio de pagamento credit na criação de uma cobrança e os dados que identifiquem o cartão;
- Uma cobrança é feita no cartão através da instuição de pagamentos escolhida;
- Após a confirmação do pagamento, o provedor de pagamento irá realizar a transferência de fundos para a conta do recebedor;
- Posteriormente o cliente recebedor poderá ser notificado de que o pagamento foi cancelado ou contestado por suspeita de fraude diretamente pelo pagador junto ao seu banco emissor.
Fluxo de pagamento associado ao customer
- Criar um customer;
- Criar a tokenização do cartão;
- Criar um card através do token gerado;
- Realizar a associação do card com o customer;
- Para verificar a associação do cartão ao customer, basta realizar a consulta por meio Serviço de card
Provedores suportados
ProviderType | Descrição |
---|---|
ADYEN | Adyen |
BRAINTREE | Braintree |
BRASPAG | Braspag |
CIELO | Cielo |
GETNET | Getnet |
KLAP | Klap |
MERCADO_PAGO | Mercado Pago |
PAGARME | Pagar.me |
PAGSEGURO | PagSeguro |
REDE | Rede |
STRIPE | Stripe |
ZOOP | Zoop |
WORLDPAY | Worldpay |
SANDBOX | Simulador ambiente de teste |
Quando criada na Malga, a cobrança do tipo CARTÃO credit:
- É registrada com status
authorized
,pre_authorized
oufailed
; - É possível realizar o estorno total ou parcial da cobrança;
- É possível realizar a pré-autorização e captura da cobrança.
Notificação de alteração de status
objeto | evento | descrição |
---|---|---|
transaction | pending | Evento enviado quando a cobrança é criada na Malga |
transaction | pre_authorized | Evento enviado quando é pre-autorizado o pagamento, com reserva de saldo |
transaction | authorized | Evento enviado quando é autorizado o pagamento |
transaction | failed | Evento enviado quando a cobrança é negada pela instituição financeira antes de ter sido autorizada, sem estorno financeiro |
transaction | canceled | Evento enviado quando a cobrança é cancelada antes ter sido capturada, não produzindo um estorno financeiro |
transaction | voided | Evento enviado quando a cobrança é cancelada após ter sido autorizada, produzindo um estorno financeiro |
transaction | charged_back | Evento enviado quando a cobrança é contestada por fraude |
Exemplo de cobrança
Realize uma cobrança a partir dos dados do cartão de crédito sem tokenizar usando o Serviço de Charges.
curl --location --request POST 'https://api.malga.io/v1/charges' \
--header 'X-Client-Id: <YOUR_CLIENT_ID>' \
--header 'X-Api-Key: <YOUR_SECRET_KEY>' \
--header 'Content-Type: application/json' \
--data-raw '{
"merchantId": "7f8870a2-71c9-4ef0-a531-82000e00b7e1",
"amount": 150,
"currency": "BRL",
"statementDescriptor": "Pedido #231 loja joão",
"capture": false,
"paymentMethod": {
"paymentType": "credit",
"installments": 1
},
"paymentSource": {
"sourceType": "card",
"card": {
"cardNumber": "4929564637987814",
"cardCvv": "320",
"cardExpirationDate": "06/2028",
"cardHolderName": "JOAO DA SILVA"
}
}
}'
< HTTP/2 201
< content-type: application/json; charset=utf-8
{
"id": "10ad53ec-76bb-41d2-a0fe-7513f8f50a8f",
"merchantId": "7f8870a2-71c9-4ef0-a531-82000e00b7e1",
"clientId": "cc0b1e41-2936-45c5-947f-93995ffcdc00",
"createdAt": "2021-03-23T15:12:38.379Z",
"amount": 150,
"originalAmount": 150,
"currency": "BRL",
"statementDescriptor": "Pedido #231 loja joão",
"capture": false,
"status": "pre_authorized",
"paymentMethod": {
"paymentType": "credit",
"installments": 1
},
"paymentSource": {
"sourceType": "card",
"cardId": "148d5db0-f1c3-439f-902d-f1f268086e1d"
},
"transactionRequests": [{
"id": "5e506984-318a-4390-b87a-a3bd9b91d357",
"updatedAt": "2021-03-23T15:12:42.799Z",
"createdAt": "2021-03-23T15:12:38.392Z",
"idempotencyKey": "4271e96e-8c2f-4857-a122-279613bc4747",
"requestId": null,
"providerId": "72cc1ff1-5f6e-4eb2-9cc5-6a3a85525e4b",
"providerType": "STRIPE",
"amount": 150,
"authorizationCode": "",
"authorizationNsu": "1616512362092",
"responseCode": "20000",
"requestStatus": "success",
"requestType": "pre_authorization",
"responseTs": null
}]
}
Pré-autorização e captura
No fluxo de pagamentos por cartão é possível realizar uma autorização que reserva o saldo e fica pendente de uma captura posterior, ou você pode já autorizar o pagamento de maneira definitiva. Alguns lojistas optam por não capturar imediatamente a transação para poderem rodar um anti-fraude próprio após reservar o saldo no cartão, e dependendo do resultado da análise confirmar ou não a transação. A vantagem de estornar uma transação que ainda não tenha sido "capturada" é que o estorno é feito imediatamente na fatura do comprador, em alguns casos quando você tenta estornar uma transação já capturada pode levar até 30 dias para constar o estorno na fatura, por isso muitos lojistas optam por não capturar automaticamente e fazer isso manualmente depois.
O flag de capture
serve para indicar se a transação deve ou não ser capturada.
Na nossa API caso você envie o atributo capture: false
iremos retornar a transação autorizada (saldo reservado no cartão) com status pre_authorized
sendo necessário que você faça um request no Serviço de Captura para forçar manualmente a captura da transação e liberar para liquidação na conta do provedor. Se a transação não for capturada em 7 dias o adquirente pode desfazer automaticamente a transação.
Caso você envie o atributo capture: true
iremos retornar a transação autorizada com status authorized
, não sendo necessário mais nenhuma ação, a transação já fica liberada para liquidação no adquirente e não precisa chamar o Serviço de Captura.
Em nosso dashboard, também é possível capturar.
Estorno Total ou Parcial
No fluxo de pagamento por cartão, é possível realizar um estorno no valor total ou parcial da cobrança. No caso de estorno parcial, o lojista opta por realizar um estorno com valor inferior ao valor da venda, sendo feito o reembolso do valor parcial estornado para o comprador, permanecendo a cobrança como autorizada para liquidação do valor restante para o lojista.
Para realizar um estorno parcial, basta enviar na requisição de void um amount
inferior ao valor original da transação, sendo este amount
do estorno o valor a ser estornado. Uma vez aprovado a solicitação de estorno parcial junto ao emissor do cartão, o amount
da transação é então atualizado para o valor residual da transação após o estorno (valor da cobrança - valor estornado),
caution
O atributo originalAmount
do objeto charge
se mantém como o valor originalmente autorizado na transação, é o valor inicial da transação quando aprovada. Já o atributo amount
do objeto charge
é alterado a cada solicitação de estorno parcial, mantendo o saldo residual a receber pelo lojista.
Importante ressaltar que podem ser realizadas diversas requisições de estorno parcial para uma mesma transação, sendo que a cada requisição nosso sistema verifica se o valor a ser estornado, (o valor enviado na requisição de void
), é menor ou igual ao valor residual da transação, não sendo possível estornar um valor superior. O histórico de requisições de estorno pode ser encontrado na listagem de transactionRequests
do objeto charge
.
O status da transação permanecerá como authorized
ou pre_authorized
enquanto restar valor a ser pago ao lojista, sendo alterado para voided
somente quando o estorno zera todo o valor a receber do lojista.
Tratando erros na captura e estorno
As modificações feitas em uma cobrança para fins de estorno total, estorno parcial, ou captura podem retornar com erro no provedor. A fim de garantir o correto tratamento dos casos de exceção retornado pelos provedores nestas operações, nossa API, ao receber erro na captura/estorno, retorna HTTP Status Code 201, sendo criado um novo transactionRequest com o status failed
, porém não é modificado o status original da transação. É recomendado que você verifique o status do objeto charge retornado, ou o status do primeiro objeto da lista de transactionRequests para se certificar que a operação foi realizada com sucesso.
Cobrando em outras Moedas
A Malga suporta realização de cobranças em diferentes moedas, possibilitando você processar o pagamento na moeda de preferência do comprador.
Caso a moeda informada na cobrança seja diferente da moeda de origem do cartão do comprador, o mesmo pode ter que pagar taxa adicional no seu banco para compras no exterior. O comprador pode ainda ser cobrado uma taxa adicional pelo banco caso o cartão e o lojista estejam em paises diferentes, mesmo a moeda sendo a mesma.
A moeda deve ser enviada no campo currency
do objeto charge
, sendo a moeda BRL
o valor default caso não seja informado pelo solicitante. O código da moeda deve ser enviado no padrão ISO 4217, com todas as letras em maiúsculo.
info
Importante, a aceitação da moeda é condicionado ao provedor de pagamentos escolhido, somente alguns provedores suportam cobrança em diferentes moedas. Consulte o nosso suporte para saber se seu provedor suporta pagamentos em outras moedas.
Consulte a tabela de moedas aceitas
Split
Consulte como criar uma transaçao utilizando split clicando aqui