Criar uma retentativa

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 retentar as transações.
IGatewayServiceClient client = new GatewayServiceClient(merchantKey, new Uri("https://sandbox.mundipaggone.com"));

// Retenta as transações não autorizadas de cartão de crédito no pedido.
var httpResponse = client.Sale.Retry(orderKey);

if (httpResponse.HttpStatusCode == HttpStatusCode.OK
    && httpResponse.Response.CreditCardTransactionResultCollection.Any()
    && httpResponse.Response.CreditCardTransactionResultCollection.All(p => p.Success == true)) {
    Console.WriteLine("Transações autorizadas.");
}
else {
    Console.WriteLine("Uma ou mais transações não foram autorizadas.");
}
<?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");

    // Create request object
    $request = new \Gateway\One\DataContract\Request\RetryRequest();

    // Define all request data
    $request->setOrderKey('219d7581-78e2-4aa9-b708-b7c585780bfc');

    // Create new ApiClient object
    $client = new Gateway\ApiClient();

    // Make the call
    $response = $client->Retry($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)

retrySaleRequest = Gateway::RetrySaleRequest.new

# fill retry object
retrySaleRequest.OrderKey = '219d7581-78e2-4aa9-b708-b7c585780bfc'

# make the request and returns a response hash
puts response = gateway.Retry(retrySaleRequest)
# coding=utf-8
from uuid import UUID
from mundipaggOnePython import GatewayServiceClient
from data_contracts import retry_sale_options, retry_sale_creditcard_transaction, retry_sale_request
from enum_types import PlatformEnvironment, HttpContentTypeEnum

# Cria a request.
request = retry_sale_request(order_key='219d7581-78e2-4aa9-b708-b7c585780bfc')

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)

http_response = service_client.sale.retry_with_request(retry_sale_request=request)

json_response = http_response.json()

print json_response
// 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
UUID orderKey = UUID.fromString("219d7581-78e2-4aa9-b708-b7c585780bfc"); // Chave do pedido

// Submete a requisição
HttpResponseGenerics<RetrySaleResponse, RetrySaleRequest> httpResponse
    = serviceClient.getSale().Retry(orderKey);
{
    "OrderKey":"219d7581-78e2-4aa9-b708-b7c585780bfc"
}

O método de retentativa é uma ferramenta exclusiva da Mundi. Além da retentativa automática que disponibilizamos em tempo real, você pode retentar suas transações quando quiser, inclusive transações de recorrência.

Com esse método você pode recuperar vendas mas lembre-se de adequar o seu fluxo de negócio à retentativa ou vice-versa.

Você pode retentar múltiplas transações dentro de um único pedido! O exemplo abaixo mostra como fazer 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 retentar as transações.
IGatewayServiceClient client = new GatewayServiceClient(merchantKey, new Uri("https://sandbox.mundipaggone.com"));

// Transação específica que será retentada.
RetrySaleCreditCardTransaction transactionToRetry = new RetrySaleCreditCardTransaction() {
    SecurityCode = "123",
    TransactionKey = Guid.Parse("20ba0520-7d09-44f8-8fbc-e4329e2b18d5"),
};

// Retenta as transações não autorizadas de cartão de crédito no pedido.
var httpResponse = client.Sale.Retry(orderKey, transactionToRetry);

if (httpResponse.HttpStatusCode == HttpStatusCode.OK
    && httpResponse.Response.CreditCardTransactionResultCollection.Any()
    && httpResponse.Response.CreditCardTransactionResultCollection.All(p => p.Success == true)) {
    Console.WriteLine("Transações autorizadas.");
}
else {
    Console.WriteLine("Uma ou mais transações não foram autorizadas.");
}
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::RetrySaleCreditCardTransaction.new
creditCardTransaction.SecurityCode = '123'
creditCardTransaction.TransactionKey = '20ba0520-7d09-44f8-8fbc-e4329e2b18d5'

retrySaleRequest = Gateway::RetrySaleRequest.new

# fill retry object
retrySaleRequest.OrderKey = '219d7581-78e2-4aa9-b708-b7c585780bfc'
retrySaleRequest.RetrySaleCreditCardTransactionCollection << creditCardTransaction

# make the request and returns a response hash
puts response = gateway.Retry(retrySaleRequest)
<?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\");

    // Create request object
    $request = new \\Gateway\\One\\DataContract\\Request\\RetryRequest();

    // Define all request data
    $request->setOrderKey(\"219d7581-78e2-4aa9-b708-b7c585780bfc\");
    $creditCardTransaction = new \\Gateway\\One\\DataContract\\Request\\RetryRequestData\\RetrySaleCreditCardTransaction();
    $creditCardTransaction->setSecurityCode(\"123\");
    $creditCardTransaction->setTransactionKey(\"20ba0520-7d09-44f8-8fbc-e4329e2b18d5\");

    $request->addRetrySaleCreditCardTransactionCollection($creditCardTransaction);

    // Create new ApiClient object
    $client = new Gateway\\ApiClient();

    // Make the call
    $response = $client->Retry($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());
}
# coding=utf-8
from uuid import UUID
from mundipaggOnePython import GatewayServiceClient
from data_contracts import retry_sale_options, retry_sale_creditcard_transaction, retry_sale_request
from enum_types import PlatformEnvironment, HttpContentTypeEnum

# Cria a transação.
transaction_collection = [
    retry_sale_creditcard_transaction(security_code='123', transaction_key='20ba0520-7d09-44f8-8fbc-e4329e2b18d5')]
# Cria a request.
request = retry_sale_request(creditcard_transaction_collection=transaction_collection,
                             order_key='219d7581-78e2-4aa9-b708-b7c585780bfc')

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)

http_response = service_client.sale.retry_with_request(retry_sale_request=request)

json_response = http_response.json()

print json_response
// 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");

RetrySaleRequest retrySaleRequest = new RetrySaleRequest();

// Define os detalhes da transação de cartão de crédito
RetrySaleCreditCardTransaction retrySaleCreditCardTransaction = new RetrySaleCreditCardTransaction();
retrySaleCreditCardTransaction.setSecurityCode("123");
retrySaleCreditCardTransaction.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<RetrySaleCreditCardTransaction> manageCreditCardTransactionList = new ArrayList<RetrySaleCreditCardTransaction>();
manageCreditCardTransactionList.add(retrySaleCreditCardTransaction);

// Define a chave do pedido
retrySaleRequest.setOrderKey(UUID.fromString("219d7581-78e2-4aa9-b708-b7c585780bfc"));
retrySaleRequest.setRetrySaleCreditCardTransactionCollection(manageCreditCardTransactionList);

// Submete a requisição
HttpResponseGenerics<RetrySaleResponse, RetrySaleRequest> httpResponse
	= serviceClient.getSale().Retry(retrySaleRequest);

🚧

A retentativa manual sem o código de segurança (CVV)

No método de retentativa existe uma tag que corresponde ao CVV do cartão. Ela não é obrigatória, porém, para não precisar nos enviar você deve desabilitar transações com o código de segurança na adquirente. Caso você permaneça com a funcionalidade habilitada é importante que você nos envie na requisição de uma retentativa.

Uma transação retentada pode continuar com o status NotAuthorized ou podemos recuperá-la e ela ficar com o status Captured. Caso você tenha feito uma pré-autorização ou utilize antifraude ela ficará com o status AuthorizedPendingCaptured.

RetryOrder e o status WithError

Como falamos anteriormente, algumas transações podem assumir o status WithError. Nesse cenários, o método de retentativa pode te ajudar da seguinte maneira:

  • Retentando a transação, ou seja, se a adquirente não processou a transação, o método tenta recuperar a venda perdida.
Language