Estorno
Estornar uma transação com a API Pagar.me é muito simples, seja ela de Cartão de crédito ou de Boleto bancário. Tudo o que você precisa fazer é enviar uma requisição POST
para a rota /transactions/:id/refund
, na qual :id
é o ID da transação.
1. Cartão de Crédito
Estorno completo de uma transação
curl -X POST 'https://api.pagar.me/1/transactions/:id/refund' -H 'content-type: application/json' -d '{
"api_key": "ak_test_grXijQ4GicOa2BLGZrDRTR5qNQxJW0"
}'
transaction = PagarMe::Transaction.find_by_id("ID")
transaction.refund
transaction.status
<?php
require("vendor/autoload.php");
$pagarme = new PagarMe\Client('SUA_CHAVE_DE_API');
$refundedTransaction = $pagarme->transactions()->refund([
'id' => 'ID_OU_TOKEN_DA_TRANSAÇÃO',
]);
?>
var transaction = PagarMeService.GetDefaultService().Transactions.Find("ID");
transaction.Refund();
TransactionStatus status = transaction.Status;
import me.pagar.model.PagarMe;
import me.pagar.model.PagarMeException;
import me.pagar.model.Transaction;
import me.pagar.model.Transaction.PaymentMethod;
PagarMe.init("SUA_API_KEY");
Transaction tx = new Transaction().find(1130974);
tx.refund(1000);
import pagarme from 'pagarme'
pagarme.client.connect({ api_key: 'SUA_API_KEY' })
.then(client => client.transactions.refund({
id: 21314124
}))
import pagarme
pagarme.authentication_key('SUA_API_KEY')
trx = pagarme.transaction.find_by({
'id': 'ID_TRANSACTION'
})
params_refund = {
'amount': '10000'
}
refunded_trx = pagarme.transaction.refund(trx['id'], params_refund)
print(refunded_trx)
Pronto! De forma rápida você consegue estornar uma transação. Vale lembrar que também é possível estornar transações via Dashboard.
Estorno parcial de uma transação
Também é possível fazer estornos parciais de uma transação. Ou seja, se você deseja estornar uma quantia específica, é preciso passar apenas mais um parâmetro: amount.
Exemplos estorno parcial de cartão:
curl -X POST 'https://api.pagar.me/1/transactions/:id/refund' -H 'content-type: application/json' -d '{
"amount": "6153",
"api_key": "ak_test_grXijQ4GicOa2BLGZrDRTR5qNQxJW0"
}'
transaction = PagarMe::Transaction.find_by_id("{ID}")
transaction.refund("amount"=>1000)
transaction.status
<?php
require("vendor/autoload.php");
$pagarme = new PagarMe\Client('SUA_CHAVE_DE_API');
$partialRefundedTransaction = $pagarme->transactions()->refund([
'id' => 'ID_OU_TOKEN_DA_TRANSAÇÃO',
'amount' => 'VALOR_PARCIAL_EM_CENTAVOS'
]);
?>
var transaction = PagarMeService.GetDefaultService().Transactions.Find("ID");
transaction.Refund(1000);
TransactionStatus status = transaction.Status;
import pagarme from 'pagarme'
pagarme.client.connect({ api_key: 'SUA_API_KEY' })
.then(client => {
return client.transactions.create({
amount: 1000,
})
.then(transaction => client.transactions.refund({
id: transaction.id,
amount: 500
})
})
import pagarme
pagarme.authentication_key('SUA_API_KEY')
trx = pagarme.transaction.find_by({
'id': 'ID_TRANSACTION'
})
params_refund = {
'amount': '10000'
}
refunded_trx = pagarme.transaction.refund(trx['id'], params_refund)
print(refunded_trx)
Vale ressaltar:
Uma transação estornada parcialmente tem status
paid
até que a soma de todos os estornos parciais seja igual ao valor da transação. Somente nesse momento o status muda pararefunded
.
2. Boleto
Para estornar uma transação por boleto bancário, o caminho é um pouco mais extenso. Isso acontece pois precisamos dos dados bancários da pessoa que irá receber a quantia estornada. Veja o exemplo:
curl -X POST 'https://api.pagar.me/1/transactions/:id/refund' -H 'content-type: application/json' -d '{
"api_key": "ak_test_grXijQ4GicOa2BLGZrDRTR5qNQxJW0",
"bank_account": {
"agencia": "1111",
"agencia_dv": "1",
"bank_code": "001",
"conta": "11111111",
"conta_dv": "1",
"document_number": "11111111111",
"legal_name": "Jose da Silva"
}
}'
transaction = PagarMe::Transaction.find_by_id("ID")
bank_account ={ 'bank_code' => '001',
'agencia' => '1111',
'agencia_dv' => '1',
'conta' => '11111111',
'conta_dv' => '1',
'document_number' => '11111111111',
'legal_name' => 'Jose da Silva'
}
transaction = PagarMe::Transaction.find_by_id("1391567")
transaction.refund('bank_account'=> bank_account)
transaction.status
<?php
require("vendor/autoload.php");
$pagarme = new PagarMe\Client('SUA_CHAVE_DE_API');
$refundedTransaction = $pagarme->transactions()->refund([
'id' => 'ID_DA_TRANSACAO',
'bank_account' => [
'bank_code' => '001',
'agencia' => '1111',
'agencia_dv' => '1',
'conta' => '11111111',
'conta_dv' => '1',
'document_number' => '11111111111',
'legal_name' => 'Jose da Silva'
],
]);
?>
var transaction = PagarMeService.GetDefaultService().Transactions.Find("ID");
BankAccount bankAccount = new BankAccount();
bankAccount.Agencia = "0196";
bankAccount.AgenciaDv = "0";
bankAccount.Conta = "05392";
bankAccount.ContaDv = "0";
bankAccount.BankCode = "0341";
bankAccount.DocumentNumber = "05737104141";
bankAccount.LegalName = "JONATHAN LIMA";
transaction.Refund(bankAccount);
TransactionStatus status = transaction.Status;
import pagarme from 'pagarme'
pagarme.client.connect({ api_key: 'SUA_API_KEY' })
.then(client => client.transactions.refund({
id: 21314124,
bank_code: '237',
agencia: '1935',
agencia_dv: '9',
conta: '23398',
conta_dv: '9',
legal_name: 'API BANK ACCOUNT',
document_number: '26268738888'
}))
import pagarme
pagarme.authentication_key('SUA_API_KEY')
params = {
'amount': '10000',
'payment_method': 'boleto',
'customer': {
'email': '[email protected]',
'name': 'Daenerys Targaryen',
'document_number': '18152564000105',
'address': {
'zipcode': '04571020',
'neighborhood': 'Dragon Village',
'street': 'Rua Drogon',
'street_number': '240'
},
'phone': {
'number': '987654321',
'ddd': '11'
}
},
'metadata': {
'command':'Dracarys'
}
}
trx = pagarme.transaction.create(params)
params_pay_boleto = {
'status': 'paid'
}
pagarme.transaction.pay_boleto(trx['id'], params_pay_boleto)
params_refund = {
'amount': '10000',
'bank_account': {
'agencia': '0932',
'agencia_dv': '5',
'bank_code': '341',
'conta': '58054',
'conta_dv': '1',
'document_number': '26268738888',
'legal_name': 'HOUSE TARGARYEN'
}
}
refunded_trx = pagarme.transaction.refund(trx['id'], params_refund)
print(refunded_trx)
Estorno parcial por boleto
Como mencionado anteriormente, para que o estorno seja parcial você precisa apenas adicionar o parâmetro
amount
na requisição.
Updated over 5 years ago
Excelente trabalho, você agora já sabe como criar e estornar transações, assim como enviar metadata para tratar os dados posteriormente. Está pronto para aprender mais sobre o Checkout Pagar.me? Vamos lá!