Преобразование кода в Ruby в PHP для файла обратного вызова - PullRequest
0 голосов
/ 27 марта 2020

В рамках интеграции 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

Заранее благодарю за помощь

...