Como cancelar transações na Mundi
Guid merchantKey = Guid.Parse("00000000-0000-0000-0000-000000000000");
// Chave do pedido
Guid orderKey = Guid.Parse("219d7581-78e2-4aa9-b708-b7c585780bfc");
// Cria o cliente para cancelar as transações.
IGatewayServiceClient client = new GatewayServiceClient(merchantKey, new Uri("https://sandbox.mundipaggone.com"));
// Cancela as transações de cartão de crédito do pedido.
var httpResponse = client.Sale.Manage(ManageOperationEnum.Cancel, orderKey);
if (httpResponse.HttpStatusCode == HttpStatusCode.OK
&& httpResponse.Response.CreditCardTransactionResultCollection.Any()
&& httpResponse.Response.CreditCardTransactionResultCollection.All(p => p.Success == true)) {
Console.WriteLine("Transações canceladas.");
}
<?php
try
{
// Carrega dependências
require_once(dirname(__FILE__) . '/vendor/autoload.php');
// Define a URL a ser utilizada
\Gateway\ApiClient::setBaseUrl("https://sandbox.mundipaggone.com");
// Define a chave de loja a ser utilizada
\Gateway\ApiClient::setMerchantKey("85328786-8BA6-420F-9948-5352F5A183EB");
// Cria objeto requisição
$request = new \Gateway\One\DataContract\Request\CancelRequest();
// Define dados da requisição
$request->setOrderKey("219d7581-78e2-4aa9-b708-b7c585780bfc");
//Cria um objeto ApiClient
$client = new Gateway\ApiClient();
// Faz a chamada para criação
$response = $client->cancel($request);
}
catch (\Gateway\One\DataContract\Report\ApiError $error)
{
$httpStatusCode = $error->errorCollection->ErrorItemCollection[0]->ErrorCode;
$response = array("message" => $error->errorCollection->ErrorItemCollection[0]->Description);
}
catch (Exception $ex)
{
$httpStatusCode = 500;
$response = array("message" => "Ocorreu um erro inesperado.");
}
finally
{
header('Content-Type: application/json');
print json_encode($response->getData());
}
require 'mundipagg_sdk'
# variable with merchant key
merchantKey = '85328786-8BA6-420F-9948-5352F5A183EB'
# instantiate class with request methods
# :sandbox for sandbox ambient
# :production for production ambient
gateway = Gateway::Gateway.new(:sandbox, merchantKey)
# creates request object for transaction
cancelSaleRequest = Gateway::ManageSaleRequest.new
cancelSaleRequest.OrderKey = '219d7581-78e2-4aa9-b708-b7c585780bfc'
# make the request and returns a response hash
puts response = gateway.Cancel(cancelSaleRequest)
from uuid import UUID
from mundipaggOnePython import GatewayServiceClient
from data_contracts import manage_creditcard_transaction, manage_sale_request
from enum_types import PlatformEnvironment, HttpContentTypeEnum, ManageOperationEnum
merchant_key = UUID('85328786-8BA6-420F-9948-5352F5A183EB')
end_point = "https://sandbox.mundipaggone.com/"
service_client = GatewayServiceClient(merchant_key, PlatformEnvironment.sandbox, HttpContentTypeEnum.json, end_point)
# cria o request de cancelamento.
manage_request = manage_sale_request(order_key = '219d7581-78e2-4aa9-b708-b7c585780bfc')
http_response = service_client.sale.manage_with_request(manage_operation = ManageOperationEnum.Cancel, manage_sale_request = manage_request)
# obtem o json da resposta.
json_response = http_response.json()
// Define loja
UUID merchantKey = UUID.fromString("85328786-8BA6-420F-9948-5352F5A183EB"); // Chave da Loja - MerchantKey
// Cria o cliente que vai efetuar a operação
GatewayServiceClient serviceClient = new GatewayServiceClient(merchantKey, "https://sandbox.mundipaggone.com");
// Define a chave do pedido que será cancelado
UUID orderKey = UUID.fromString("219d7581-78e2-4aa9-b708-b7c585780bfc"); // Chave do pedido
// Submete a requisição de cancelamento
HttpResponseGenerics<ManageSaleResponse, ManageSaleRequest> httpResponse
= serviceClient.getSale().Manage(ManageOperationEnum.Cancel, orderKey);
{
"OrderKey":"219d7581-78e2-4aa9-b708-b7c585780bfc"
}
Muitos consumidores desejam cancelar compras realizadas devido a problemas com o produto, insatisfação com o serviço, dentre outras razões.
Para isso a Mundi criou o método Cancel. Com ele é possível você realizar cancelamentos de pedidos e transações.
Cartão de crédito (Cancelamentos)
Cancelamentos só podem ser efetuados para transações de cartões de crédito. Boletos e débito online não podem ser cancelados pela nossa API. Para esses casos, a sua área financeira deve retornar os fundos do consumidor final via depósito bancário.
O método de cancelamento pode ser utilizado para:
- Cancelar um pedido, ou seja, ao cancelá-lo você estará cancelando todas as transações dentro do pedido. Basta informar na requisição o
OrderKey
. Exemplo acima! - Cancelar uma transação específica, ou seja, ao cancelá-la você estará cancelando uma única transação dentro do pedido. Basta informar na requisição o
OrderKey
e oTransactionKey
ou somente oTransactionKey
. Exemplo a seguir: - Cancelar parcialmente um pedido ou transação. Dedicamos a abaixo seção para isso.
Guid merchantKey = Guid.Parse("00000000-0000-0000-0000-000000000000");
// Chave do pedido
Guid orderKey = Guid.Parse("219d7581-78e2-4aa9-b708-b7c585780bfc");
// Cria o cliente para cancelar as transações.
IGatewayServiceClient client = new GatewayServiceClient(merchantKey, new Uri("https://sandbox.mundipaggone.com"));
// Transação específica que será cancelada.
var transactionToCancel = new ManageCreditCardTransaction() {
AmountInCents = 10000,
TransactionKey = Guid.Parse("20ba0520-7d09-44f8-8fbc-e4329e2b18d5")
};
// Cancela as transações de cartão de crédito do pedido.
var httpResponse = client.Sale.Manage(ManageOperationEnum.Cancel, orderKey, transactionToCancel);
if (httpResponse.HttpStatusCode == HttpStatusCode.OK
&& httpResponse.Response.CreditCardTransactionResultCollection.Any()
&& httpResponse.Response.CreditCardTransactionResultCollection.All(p => p.Success == true)) {
Console.WriteLine("Transações canceladas.");
}
<?php
try
{
// Carrega dependências
require_once(dirname(__FILE__) . '/vendor/autoload.php');
// Define a URL a ser utilizada
\Gateway\ApiClient::setBaseUrl("https://sandbox.mundipaggone.com");
// Define a chave de loja a ser utilizada
\Gateway\ApiClient::setMerchantKey("85328786-8BA6-420F-9948-5352F5A183EB");
// Cria objeto requisição
$request = new \Gateway\One\DataContract\Request\CancelRequest();
// Define dados da requisição
$request->addCreditCardTransaction()
->setAmountInCents(10000)
->setTransactionkey("20ba0520-7d09-44f8-8fbc-e4329e2b18d5");
$request->setOrderKey("219d7581-78e2-4aa9-b708-b7c585780bfc");
//Cria um objeto ApiClient
$client = new Gateway\ApiClient();
// Faz a chamada para criação
$response = $client->cancel($request);
}
catch (\Gateway\One\DataContract\Report\ApiError $error)
{
$httpStatusCode = $error->errorCollection->ErrorItemCollection[0]->ErrorCode;
$response = array("message" => $error->errorCollection->ErrorItemCollection[0]->Description);
}
catch (Exception $ex)
{
$httpStatusCode = 500;
$response = array("message" => "Ocorreu um erro inesperado.");
}
finally
{
header('Content-Type: application/json');
print json_encode($response->getData());
}
require 'mundipagg_sdk'
# variable with merchant key
merchantKey = '85328786-8BA6-420F-9948-5352F5A183EB'
# instantiate class with request methods
# :sandbox for sandbox ambient
# :production for production ambient
gateway = Gateway::Gateway.new(:sandbox, merchantKey)
# create credit card manage transaction object
creditCardTransaction = Gateway::ManageCreditCardTransaction.new
creditCardTransaction.AmountInCents = 10000
creditCardTransaction.TransactionKey = '20ba0520-7d09-44f8-8fbc-e4329e2b18d5'
# creates request object for transaction
cancelSaleRequest = Gateway::ManageSaleRequest.new
cancelSaleRequest.OrderKey = '219d7581-78e2-4aa9-b708-b7c585780bfc'
cancelSaleRequest.CreditCardTransactionCollection << creditCardTransaction
# make the request and returns a response hash
puts response = gateway.Cancel(cancelSaleRequest)
from uuid import UUID
from mundipaggOnePython import GatewayServiceClient
from data_contracts import manage_creditcard_transaction, manage_sale_request
from enum_types import PlatformEnvironment, HttpContentTypeEnum, ManageOperationEnum
merchant_key = UUID('85328786-8BA6-420F-9948-5352F5A183EB')
end_point = "https://sandbox.mundipaggone.com/"
service_client = GatewayServiceClient(merchant_key, PlatformEnvironment.sandbox, HttpContentTypeEnum.json, end_point)
# dados da transacao que sera cancelada
manage_creditcard_collection_data = [manage_creditcard_transaction(transaction_key = '20ba0520-7d09-44f8-8fbc-e4329e2b18d5', amount_in_cents = 10000)]
# cria o request de cancelamento.
manage_request = manage_sale_request(creditcard_transaction_collection = manage_creditcard_collection_data, order_key = '219d7581-78e2-4aa9-b708-b7c585780bfc')
http_response = service_client.sale.manage_with_request(manage_operation = ManageOperationEnum.Cancel, manage_sale_request = manage_request)
# obtem o json da resposta.
json_response = http_response.json()
// Define loja
UUID merchantKey = UUID.fromString("85328786-8BA6-420F-9948-5352F5A183EB"); // Chave da Loja - MerchantKey
// Cria o cliente que vai efetuar a operação
GatewayServiceClient serviceClient = new GatewayServiceClient(merchantKey, "https://sandbox.mundipaggone.com");
ManageSaleRequest manageSaleRequest = new ManageSaleRequest();
// Define os detalhes da transação de cartão de crédito
ManageCreditCardTransaction manageCreditCardTransaction = new ManageCreditCardTransaction();
manageCreditCardTransaction.setAmountInCents(10000L);
manageCreditCardTransaction.setTransactionKey(UUID.fromString("20ba0520-7d09-44f8-8fbc-e4329e2b18d5"));
// Cria a lista de transações de cartão e adiciona a transação criada a lista
List<ManageCreditCardTransaction> manageCreditCardTransactionList = new ArrayList<ManageCreditCardTransaction>();
manageCreditCardTransactionList.add(manageCreditCardTransaction);
// Define a chave do pedido que será cancelado
manageSaleRequest.setOrderKey(UUID.fromString("219d7581-78e2-4aa9-b708-b7c585780bfc"));
manageSaleRequest.setCreditCardTransactionCollection(manageCreditCardTransactionList);
// Submete a requisição de cancelamento
HttpResponseGenerics<ManageSaleResponse, ManageSaleRequest> httpResponse
= serviceClient.getSale().Manage(ManageOperationEnum.Cancel, manageSaleRequest);
{
"CreditCardTransactionCollection":[{
"AmountInCents":10000,
"TransactionKey":"20ba0520-7d09-44f8-8fbc-e4329e2b18d5"
}],
"OrderKey":"219d7581-78e2-4aa9-b708-b7c585780bfc"
}
Qual a diferença entre cancelamento e estorno?
Não se preocupe! Esses dois conceitos são bem parecidos!
O cancelamento é realizado até 23 hs e 59 min do dia da transação. Após este período é realizado o estorno da transação. Em termos práticos, o cancelamento não aparece na fatura do consumidor enquanto o estorno aparecerá. Aqui na Mundi ambos são feitos pelo mesmo método, pois queremos deixar tudo mais simples para você!
Algumas das adquirentes não permitem a realização de estornos via API. Da mesma maneira, não podemos realizar essas operações. Colocamos abaixo a lista das adquirentes e as funcionalidades permitidas.
Adquirente | Cancelamento | Estorno |
---|---|---|
Cielo | Sim | Sim |
Rede | Sim | Não |
Stone | Sim | Sim |
Elavon | Sim | Sim |
GetNet | Sim | Sim |
Na resposta da requisição de cancelamento, você receberá dois tipos de status de transação: Voided
caso a sua transação tenha sido cancelada ou Refunded
para casos nos quais a transação foi estornada.
Cancelamento parcial
Algumas adquirentes permitem que o ecommerce realize cancelamentos parciais. Pensando nisso, também colocamos na requisição uma opção para que você possa realizar essas operações. Colocamos abaixo a lista das adquirentes nas quais essas funcionalidades são permitidas.
Adquirente | Cancelamento parcial | Estorno parcial |
---|---|---|
Cielo | Sim | Sim |
Redecard | Sim | Não |
Stone | Sim | Sim |
GetNet | Sim | Sim |
Elavon | Sim | Sim |
Para realizar um cancelamento parcial basta acrescentar na requisição o valor que deve ser cancelado na transação no campo AmountInCents
. Caso você não nos informe esse valor, o default é que o valor total seja cancelado.
Na resposta da requisição de cancelamento, você poderá receber dois tipos de status de transação: PartialVoid
caso a sua transação tenha sido parcialmente cancelada ou PartialRefund
para casos nos quais a transação foi parcialmente estornada.
Cancelamento pendente
As adquirentes possuem instabilidades que refletem diretamente na realização de algumas operações. Em alguns cenários, fazemos a requisição de cancelamento e a mesma não é processada ou não é válida. Nesses casos, as transações podem assumir os status, PendingVoid
cancelamento pendente ou PendingRefund
estorno pendente.
Nesses casos, o ecommerce deve entrar em contato com a adquirente para realizar o cancelamento ou estorno da transação desejada. Basta informar os identificadores das transações nas adquirentes, a Mundi os disponibiliza tanto na resposta da requisição quanto no Portal.