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 24 de junho de 2022: clon issue (d73e43fe)