Validando um postback

Você deve validar a origem do postback, isto é, se ele foi realmente enviado pelo Pagar.me.

Para fazer isso, você deve calcular o HMAC-SHA1 do body da requisição HTTP e compará-lo com o header X-Hub-Signature.

EXPECTED_SIGNATURE=`cat postback_body | openssl dgst -sha1 -hmac "ak_test_grXijQ4GicOa2BLGZrDRTR5qNQxJW0"`
SIGNATURE=1213e67a3b34c2848f8317d29bcb8cbc9e0979b8
if [ "$SIGNATURE" = "$EXPECTED_SIGNATURE" ]; then
    echo "Valid Signature"
fi
require 'pagarme'

PagarMe.api_key = 'ak_test_grXijQ4GicOa2BLGZrDRTR5qNQxJW0';

if PagarMe::Postback.valid_request_signature?(postback_body, '1213e67a3b34c2848f8317d29bcb8cbc9e0979b8')
    puts "Valid Signature"
end
<?php
require("vendor/autoload.php");
$pagarme = new PagarMe\Client('SUA_CHAVE_DE_API');

$postbackPayload = file_get_contents('php://input');
$signature = $_SERVER['HTTP_X_HUB_SIGNATURE'];
$postbackIsValid = $pagarme->postbacks()->validate($postbackPayload, $signature);
const pagarme = require('pagarme')

// Calculate signature:
pagarme.postback.calculateSignature('apiKey', 'postbackBody')
// returns a hash

// Verify signature:
pagarme.postback.verifySignature('apiKey', 'postbackBody', 'X-Hub-Signature')
// returns true or false
postbackValidate = pagarme.postback.validate("signature", "payload", "api_key")

print(postbackValidate)

📘

Não se esqueça de:

  • postback_body pelo conteúdo do body da requisição HTTP do postback,
  • 1213e67a3b34c2848f8317d29bcb8cbc9e0979b8 pela signature recebido em X-Hub-Signature,
  • ak_test_grXijQ4GicOa2BLGZrDRTR5qNQxJW0 pela sua chave de API disponível
    no seu Dashboard.

📘

A X-Hub-Signature é o hash HMAC-SHA1 calculado a partir do body da requisição HTTP com a sua API Key do Pagar.me como chave.

📘

Endereços de IP das requisições

Recomendamos que sejam utilizadas as validações explicadas acima. Caso optem por liberar endereços de IP especificos, a Pagar.me se reserva o direito de alterar os IPs a qualquer momento sem prévio aviso. Atualmente os IPs de disparo dos postbacks são: 34.231.60.225, 52.21.35.223.