Этот код не будет проверять входящий парафраз Sha-out? - PullRequest
0 голосов
/ 17 апреля 2020

Я работаю над интеграцией сервера оплаты через веб-сайт WordPress. Все это работает нормально, за исключением последнего шага, когда веб-сайт должен проверить входящую фразу раскола. Даже после того, как платеж прошел, эта фраза не будет подтверждена, и я получу «ошибку WordPress», сообщающую, что транзакция не удалась.

Это код, который я использую на этапе проверки, можете ли вы найти что-нибудь неладное?

Спасибо.

    /**
     *
     */
    function check_barclay_response()
    {
        ob_clean();
        header('HTTP/1.1 200 OK');

        $datacheck = array();
        $datacheck1 = array();

        foreach ($_REQUEST as $key => $value) {
            if ($value == "") {
                continue;
            }
            $datacheck[$key] = $value;
            $datacheck1[strtoupper($key)] = strtoupper($value);
        }

        $verify = $this->checkShaOut($datacheck);

        if ($verify) {
            $this->transaction_successfull($datacheck1);
        } else {
            wp_die('Transaction is unsuccessfull!');
        }
    }

    /**
     * @param $datacheck
     * @return bool
     */
    protected function checkShaOut($datacheck)
    {
        $shaout = $this->sha_out;

        $origsig = $datacheck['SHASIGN'];

        unset($datacheck['SHASIGN']);
        unset($datacheck['wc-api']);

        uksort($datacheck, 'strcasecmp');
        $shasign = "";

        $shasig = null;
        foreach ($datacheck as $key => $value) {
            $shasig .= trim(strtoupper($key)) . '=' . utf8_encode(trim($value)) . $shaout;
        }

        $shasig = strtoupper(hash('sha1', $shasig));

        if ($shasig == $origsig) {
            return true;
        } else {
            return false;
        }
    }
...