Página de resposta
A página de resposta permite exibir o resultado da transação para o pagador assim que ela for concluída. Embora esta página não seja obrigatória para o fluxo da transação, ela melhora a experiência do pagador ao redirecioná-lo de volta para o seu site. Essa página ajuda a completar a experiência de pagamento, mas considere que o pagador pode fechar o checkout sem acessá-la.
A integração pode enviar os dados do resultado do pagamento via método HTTP GET, e a sua plataforma pode invocar a página de resposta para todos os estados da transação, incluindo aprovado, rejeitado, em validação e aguardando pagamento (para pagamentos em dinheiro).
Observações
- Alguns provedores de hospedagem podem ter configurações que bloqueiam o envio de URLs como valores de parâmetros. Por exemplo:
&merchant_url=http%3A%2F%2Fwww.myshop.com
. - Evite depender da página de resposta para atualizar seu banco de dados ou acionar processos, pois os usuários podem não retornar a ela. Use a página de confirmação para essas operações.
- Se você deseja exibir informações relacionadas à transação, recomendamos mostrar pelo menos os seguintes detalhes: status, referência, valor, moeda e data.
- Recomenda-se incluir o parâmetro
responseUrl
no formulário de pagamento ou configurá-lo no Módulo PayU. O valor enviado no parâmetro tem prioridade. Se a integração não encontrar umresponseUrl
, o processo de pagamento termina no webcheckout.
Importante
Se você deseja que o PayU sempre exiba as informações da transação, deixe o parâmetroresponseUrl
em branco tanto no formulário de pagamento quanto no Módulo PayU. Nesse caso, a experiência de pagamento não mostrará ao comprador uma opção para retornar ao seu site.
Parâmetros
Abaixo, os parâmetros enviados para a página de resposta.
Parâmetros enviados 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¤cy=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 oTX_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.
- Se a primeira casa decimal for par e a segunda for
- Obtenha os parâmetros para gerar a assinatura (
merchantId
,referenceCode
,TX_VALUE
,currency
etransactionState
) 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
Esta calculadora permite gerar a assinatura usando qualquer um dos métodos de criptografia disponíveis.
Última modificação
8 de novembro de 2024:
Documentation updates (cb34649dc)