Página de resposta

A página Resposta é uma página obrigatória e permite mostrar o resultado da transação ao pagador. Nosso sistema redireciona o pagador para esta página assim que a transação for realizada. Os dados com os resultados do pagamento são enviados ao seu sistema com o método HTTP GET.
Esta página é invocada para todos os estados da transação: aprovada, rejeitada, em validação, aguardando pagamento (dinheiro) etc.

Observações

  • Alguns provedores de hospedagem têm configurações que não permitem o envio de URLs como valores de parâmetro. Exemplo: &merchant_url=http%3A%2F%2Fwww.myshop.com
  • Para contas do Brasil, não há redirecionamento para a página de resposta.
  • Não dependa da página de resposta para atualizar seu banco de dados ou executar processos, pois os usuários podem não retornar a ela. Use a página de confirmação.
  • Se você deseja exibir informações relacionadas à transação, sugerimos mostrar pelo menos o seguinte: status, valor de referência, moeda e data.
  • Recomenda-se enviar o parâmetro responseUrl na forma de pagamento ou definir Módulo PayU; o que for enviado no parâmetro terá prioridade. Se o PayU não encontrar nenhum, o processo de pagamento termina no Webcheckout.

Variáveis

Envie as seguintes variáveis para a página de resposta.

Variáveis a serem enviadas para a página de resposta
Campo Tipo Tamanho Descrição Applies to
merchantId Numérico 12 O número de identificação do vendedor no sistema PayU, você encontra este número no e-mail de criação de conta. —
transactionState Numérico 2 Indica o status da transação no sistema.
Veja os estados da transação na coluna fornecida..
—
risk Decimal (#.00) — Risco associado à transação. Valores entre 0 e 1.
Quanto maior o valor, maior o risco.
Formato ###.00.
—
polResponseCode Alfanumérico 64 Código de resposta.
Veja os códigos de resposta na coluna fornecida.
—
referenceCode Alfanumérico 255 Referência da venda ou ordem. Deve ser exclusivo para cada transação enviada ao sistema. —
reference_pol Alfanumérico 255 Número de referência ou transação gerado pelo PayU. —
signature Alfanumérico 255 Assinatura digital criada para cada uma das transações. —
polPaymentMethod Alfanumérico 255 Identificador interno dos métodos de pagamento usados. —
polPaymentMethodType Numérico 2 O tipo de método de pagamento usado para o pagamento.
Veja os códigos dos métodos de pagamento.
—
installmentsNumber Numérico 2 Quantidade de parcelas em que o pagamento com cartão de crédito foi programado. —
TX_VALUE Numérico 14,2 Valor total da transação. Ele pode conter dois dígitos decimais. Por exemplo 10000.00 ou 10000 —
TX_TAX Numérico 14,2 Valor do IVA da transação, se o IVA não for enviado, o sistema aplica 19% automaticamente.
Ele pode conter dois dígitos decimais, por exemplo 19000.00.
Caso você não tenha IVA, deve preencher 0.
—
buyerEmail Alfanumérico 255 Campo que contém o e-mail do comprador para notificar o resultado da transação. Recomenda-se validá-lo quando os dados forem extraídos de um formulário —
processingDate Date (YYYY-MM-DD HH:mm:ss) — A data em que a transação foi feita. —
currency Alfanumérico 3 A respectiva moeda na qual o pagamento é feito. O processo de reconciliação é realizado em pesos na taxa representativa do dia. —
cus Alfanumérico 255 O CUS (código de rastreamento único) é a referência de pagamento no Banco, válido apenas para pagamentos com PSE. PSE Colômbia.
pseBank Alfanumérico 255 O nome do banco, válido apenas para pagamentos com PSE. PSE Colômbia.
lng Alfanumérico 2 Idioma no qual exibir o portal de pagamento. —
description Alfanumérico 255 Descrição of sale. —
lapResponseCode Alfanumérico 64 Código de resposta that PayU delivers.
Veja os códigos de respostas na coluna fornecida.
—
lapPaymentMethod Alfanumérico 255 Método de pagamento utilizado, por exemplo VISA. —
lapPaymentMethodType Alfanumérico 255 Tipo de método de pagamento usado, por exemplo CREDIT_CARD. —
lapTransactionState Alfanumérico 32 Status da transação.
Veja o status da transação na coluna fornecida.
—
message Alfanumérico 255 Descrição do status da transação. —
extra1 Alfanumérico 255 Campo adicional para envio de informações sobre a compra. —
extra2 Alfanumérico 255 Campo adicional para envio de informações sobre a compra. —
extra3 Alfanumérico 255 Campo adicional para envio de informações sobre a compra. —
authorizationCode Alfanumérico 12 Autorização Code of the sale. —
merchant_address Alfanumérico 255 Merchant’s address. —
merchant_name Alfanumérico 255 Nome do vendedor —
merchant_url Alfanumérico 255 URL do site do vendedor. —
orderLanguage Alfanumérico 2 Idioma da ordem (ISO-639-1). —
pseCycle Numérico — Identificador gerado pelo PSE. PSE Colômbia
pseReference1 Alfanumérico 255 Nº de referência 1 para pagamentos PSE. PSE Colômbia
pseReference2 Alfanumérico 255 Nº de referência 2 para pagamentos PSE. PSE Colômbia
pseReference3 Alfanumérico 255 Nº de referência 3 para pagamentos PSE. PSE Colômbia
telephone Alfanumérico 20 Número de telefone do vendedor. —
transactionId Alfanumérico 36 Identificador da transação. —
trazabilityCode Alfanumérico 64 Código de rastreamento da venda no site da loja. —
TX_ADMINISTRATIVE_FEE Decimal (#.00) — Valor da taxa administrativa. —
TX_TAX_ADMINISTRATIVE_FEE Decimal (#.00) — Valor do imposto da taxa administrativa. —
TX_TAX_ADMINISTRATIVE_FEE_RETURN_BASE Decimal (#.00) — Valor base da taxa administrativa para a restituição do imposto. —
action_code_description Alfanumérico 255 Descrição do código de resposta da VISANET. VISANET Peru
cc_holder Alfanumérico 150 Nome do titular do cartão. VISANET Peru
cc_number Alfanumérico — Número do cartão de crédito. VISANET Peru
processing_date_time Date (YYYY-MM-DD) — Date of the sale’s processing. VISANET Peru
request_number Alfanumérico 9 Número da ordem + identificador de transação VISANET Peru

Integrar a página de resposta

A seguir está um exemplo em PHP de como você pode integrar a página de resposta:

<?php
$ApiKey = "4Vj8eK4rloUd272L48hsrarnUA";
$merchant_id = $_REQUEST['merchantId'];
$referenceCode = $_REQUEST['referenceCode'];
$TX_VALUE = $_REQUEST['TX_VALUE'];
$New_value = number_format($TX_VALUE, 1, '.', '');
$currency = $_REQUEST['currency'];
$transactionState = $_REQUEST['transactionState'];
$firma_cadena = "$ApiKey~$merchant_id~$referenceCode~$New_value~$currency~$transactionState";
$firmacreada = md5($firma_cadena);
$firma = $_REQUEST['signature'];
$reference_pol = $_REQUEST['reference_pol'];
$cus = $_REQUEST['cus'];
$extra1 = $_REQUEST['description'];
$pseBank = $_REQUEST['pseBank'];
$lapPaymentMethod = $_REQUEST['lapPaymentMethod'];
$transactionId = $_REQUEST['transactionId'];

if ($_REQUEST['transactionState'] == 4 ) {
	$estadoTx = "Transação aprovada";
}

else if ($_REQUEST['transactionState'] == 6 ) {
	$estadoTx = "Transação rejeitada";
}

else if ($_REQUEST['transactionState'] == 104 ) {
	$estadoTx = "Erro";
}

else if ($_REQUEST['transactionState'] == 7 ) {
	$estadoTx = "Pagamento Pendente";
}

else {
	$estadoTx=$_REQUEST['mensaje'];
}


if (strtoupper($firma) == strtoupper($firmacreada)) {
?>
	<h2>Resumo transaçãoy</h2>
	<table>
	<tr>
	<td>Status da transação</td>
	<td><?php echo $estadoTx; ?></td>
	</tr>
	<tr>
	<tr>
	<td>ID de transação</td>
	<td><?php echo $transactionId; ?></td>
	</tr>
	<tr>
	<td>Referência de Venda</td>
	<td><?php echo $reference_pol; ?></td>
	</tr>
	<tr>
	<td>Referência de transação</td>
	<td><?php echo $referenceCode; ?></td>
	</tr>
	<tr>
	<?php
	if($pseBank != null) {
	?>
		<tr>
		<td>cus </td>
		<td><?php echo $cus; ?> </td>
		</tr>
		<tr>
		<td>Banco </td>
		<td><?php echo $pseBank; ?> </td>
		</tr>
	<?php
	}
	?>
	<tr>
	<td>valor total</td>
	<td>$<?php echo number_format($TX_VALUE); ?></td>
	</tr>
	<tr>
	<td>Moeda</td>
	<td><?php echo $currency; ?></td>
	</tr>
	<tr>
	<td>Descrição</td>
	<td><?php echo ($extra1); ?></td>
	</tr>
	<tr>
	<td>Entidade:</td>
	<td><?php echo ($lapPaymentMethod); ?></td>
	</tr>
	</table>
<?php
}
else
{
?>
	<h1>Erro ao validar assinatura digital.</h1>
<?php
}
?>

Exemplo GET enviado para a página de resposta.

http://mytestsite.com/response.php?&merchantId=508029&merchant_name=Test+PayU+Test&merchant_address=Av+123+Calle+12&telephone=7512354&merchant_url=http%3A%2F%2Fpruebaslapv.xtrweb.com&transactionState=6&lapTransactionState=DECLINED&message=Declinada&referenceCode=2015-05-27+13%3A04%3A37&reference_pol=7069375&transactionId=f5e668f1-7ecc-4b83-a4d1-0aaa68260862&description=test_payu_01&trazabilityCode=&cus=&orderLanguage=es&extra1=&extra2=&extra3=&polTransactionState=6&signature=e1b0939bbdc99ea84387bee9b90e4f5c&polResponseCode=5&lapResponseCode=ENTITY_DECLINED&risk=1.00&polPaymentMethod=10&lapPaymentMethod=VISA&polPaymentMethodType=2&lapPaymentMethodType=CREDIT_CARD&installmentsNumber=1&TX_VALUE=100.00&TX_TAX=.00&currency=USD&lng=es&pseCycle=&buyerEmail=test%40payulatam.com&pseBank=&pseReference1=&pseReference2=&pseReference3=&authorizationCode=&TX_ADMINISTRATIVE_FEE=.00&TX_TAX_ADMINISTRATIVE_FEE=.00&TX_TAX_ADMINISTRATIVE_FEE_RETURN_BASE=.00

Validação de assinatura

A validação da assinatura permite que você verifique a integridade dos dados. Você deve gerar a assinatura com as informações que encontrar na página de resposta e compará-la com as informações do parâmetro de assinatura.

Para validar a assinatura na página de resposta, você deve considerar:

  • Para obter o novo valor new_value, aproxime o TX_VALUE usando o método de Round half to even:
    • Se a primeira casa decimal for par e a segunda for 5, arredonde para o valor mais baixo.
    • Se a primeira casa decimal for ímpar e a segunda for 5, arredonde para o valor mais alto.
    • Caso contrário, você deve arredondar para a casa decimal mais próxima.
  • Obtenha os parâmetros para gerar a assinatura (merchantId, referenceCode, TX_VALUE, currency e transactionState) da página de resposta, e não de seu banco de dados.
  • Você deve armazenar sua ApiKey com segurança.
  • Crie a assinatura da seguinte forma:
"ApiKey~merchantId~referenceCode~new_value~currency~transactionState"

Exemplos:

A primeira casa decimal é um número par e a segunda é 5

Sua apiKey: 4Vj8eK4rloUd272L48hsrarnUA
Parâmetros obtidos na página de resposta:
- merchantId = 508029
- referenceCode = TestPayU04
- TX_VALUE = 150.25
- currency = USD
- transactionState = 6

A assinatura é gerada da seguinte forma:
MD5(4Vj8eK4rloUd272L48hsrarnUA~508029~TestPayU04~150.2~USD~6) = 00286dc735bd9eaa8ae3a3a4cbb40688

signature = 00286dc735bd9eaa8ae3a3a4cbb40688

A primeira casa decimal é um número ímpar e a segunda é 5

Sua apiKey: 4Vj8eK4rloUd272L48hsrarnUA 
Parâmetros obtidos na página de resposta: 
- merchantId = 508029
- referenceCode = TestPayU04
- TX_VALUE = 150.35
- currency = USD
- transactionState = 6

A assinatura é gerada da seguinte forma:
MD5(4Vj8eK4rloUd272L48hsrarnUA~508029~TestPayU04~150.4~USD~6) = 9df2bb60e2838170009040982967923f

signature = 9df2bb60e2838170009040982967923f 

Outros casos

Sua apiKey: 4Vj8eK4rloUd272L48hsrarnUA 
Parâmetros obtidos na página de resposta: 
- merchantId = 508029
- referenceCode = TestPayU04
- TX_VALUE = 150.34
- currency = USD
- transactionState = 6

A assinatura é gerada da seguinte forma:
MD5(4Vj8eK4rloUd272L48hsrarnUA~508029~TestPayU04~150.3~USD~6) = 779f163be9347a691bcdb25064644795

signature = 779f163be9347a691bcdb25064644795 

Compare a sua assinatura

Algoritmo:  

 ( ~ ~ ~ ~ ~ )


Resultado: 

Esta calculadora permite gerar a assinatura usando qualquer um dos métodos de criptografia disponíveis.

Última modificação 17 de dezembro de 2021: Documentation in Portuguese (53de9675)