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.