Calcular a assinatura do IPN

A assinatura é calculada segundo a mesma lógica usada durante a solicitação de pagamento.

IMPORTANTE
Os dados enviados pela plataforma de pagamento são codificados em UTF-8. Qualquer alteração dos dados recebidos resultará em um cálculo de assinatura incorreto.

Você deve calcular a assinatura com os campos recebidos na notificação e não com os que você enviou na sua solicitação de pagamento.

  1. Levem em consideração todos os campos com o nome começando por vads_.
  2. Classifique todos os campos por ordem alfabética.
  3. Separe os valores dos campos com o símbolo "+".
  4. Concatene o resultado com a chave de teste ou de produção, separando-os com o símbolo "+".
  5. Conforme o algoritmo definido na configuração da sua loja:
    1. Se sua loja estiver configurada para usar “SHA-1”, aplique a função hash SHA-1 no string obtido na etapa anterior. Desvalorizado.
    2. Se sua loja estiver configurada para usar "HMAC-SHA-256", calcule e codifique no formato Base64 a assinatura da mensagem usando o algoritmo HMAC-SHA-256 com os parâmetros seguintes:
      • a função hash SHA-256,
      • a chave de teste ou de produção (em função do valor do campo vads_ctx_mode) como chave compartilhada,
      • O resultado da etapa anterior como mensagem para ser autenticada.
Exemplos em PHP
function getSignature($params, $key)
{
    /**
     * Função que calcula a assinatura.
     * $params : quadro apresentando os campos recebidos na IPN.
     * $key : chave de TEST ou de PRODUCTION
     */
    //IInicialização da variável que conterá o string a ser cifrado
    $conteúdo_assinatura= "";
								
    //Triagem dos campos por ordem alfabética
    ksort($params);
    foreach($params as $nome=>$valor){
								
        //Recuperação dos campos vads_
        if (substr($nom,0,5)=='vads_'){
								
            //Concatenação com o separador "+"
            $conteúdo_assinatura .= $valor."+";
         }
    }
    //Adição da chave no final do string
    $conteúdo_assinatura .= $key;
								
    //Codificação base64 do string cifrado com ol algoritmo HMAC-SHA-256
    $sign = base64_encode(hash_hmac('sha256',$conteúdo_assinatura, $key, true));
    return $sign;
 }