В рамках интеграции OfferWall мой провайдер попросил меня предоставить файл обратного вызова, позволяющий, например, возвращать параметры с серверов на серверы (S2S) после завершения расследования. Однако данный поставщик услуг запрашивает использование системы проверки подписи с использованием протокола HMA C SHA-1 ha sh. Этот предоставил мне файл примера, проблема в том, что у них есть только Ruby разработчики, и мне понадобится эквивалентность в PHP. Я попытался преобразовать из того, что я получил в Ruby в PHP, но я все еще не могу проверить подпись через условие, которое затем отправит запрос на сервер моего веб-сайта.
Вот предоставленный код от поставщика услуг в Ruby:
def index
url = request.original_url
Alerts::Notify.delay.send(1,"#{params} - IP: #{request.ip} - #{request.fullpath}", "#callback_testing")
app = App.find(params[:app_id])
secret_key = app.secret_key
signature = Base64.encode64(OpenSSL::HMAC.digest('sha1', secret_key, url.split("&hash=")[0]))
enc = signature.gsub("+", "-").gsub("/","_").gsub("=","").gsub("\n", "")
encoded_hash = "#{enc}"
if encoded_hash == params[:hash]
#puts "Golden boy"
else
#puts "You dun messed up son"
end
render plain: "foogile"
end
Вот мой код в PHP:
$key = "my-secret-key";
$URL = array(
'user_id' => $_GET['user_id'],
'app_id' => '16982',
'reward' => $_GET['reward'],
'status' => $_GET['status'],
'currency' => $_GET['currency'],
'screenout' => $_GET['screenout'],
'tx_id' => $_GET['tx_id'],
'debug' => 'true',
'hash' => $_GET['hash'],
);
$URL = 'https://fortool.fr/win/surveys/theoremreach/index.php?'. http_build_query($URL);
$encoded_key = utf8_encode($key);
$encoded_URL = utf8_encode($URL);
$hashed = hash_hmac('sha1', $encoded_URL, $encoded_key);
$digested_hash = pack('H*',$hashed);
$base64_encoded_result = base64_encode($digested_hash);
$final_result = str_replace(["+","/","="],["-","_",""],utf8_decode($base64_encoded_result));
if($hash == $base64_encoded_result) {
echo "1";
} else {
echo "0";
} // It always returns 0
Заранее благодарю за помощь