Hash_hmac() ожидает, что параметр 2 будет строкой, задан массив

Я получаю эту ошибку:

[2019-04-04 05:00:04] local.ERROR: hash_hmac() expects parameter 2 to be
 string, array given {"exception":"[object] (ErrorException(code: 0): hash_hmac() 
expects parameter 2 to be string, array given at /home/domains/domain.com/smm/app/Http/Controllers/CoinPaymentsController.php:132)[stacktrace]
#0 [internal function]: Illuminate\\Foundation\\Bootstrap\\HandleExceptions->handleError(2, 'hash_hmac() exp...', '/home/u37281288...', 132, Array)#1 

Это мой код:

 public function ipn(Request $request)
    {
        if (!$request->filled('ipn_mode') || !$request->filled('merchant')) {
            activity('coinpayments')
                ->withProperties(['ip' => $request->ip()])
                ->log('Missing POST data from callback.');
            die();
        }

        if ($request->input('ipn_mode') == 'httpauth') {
            //Verify that the http authentication checks out with the users supplied information
            if ($request->server('PHP_AUTH_USER') != $this->merchantId || $request->server('PHP_AUTH_PW') != $this->secretKey) {
                activity('coinpayments')
                    ->withProperties(['ip' => $request->ip()])
                    ->log('Unauthorized HTTP Request');
                die();
            }

        } elseif ($request->input('ipn_mode') == 'hmac') {
            // Create the HMAC hash to compare to the recieved one, using the secret key.
// line 132 of the error...
            $hmac = hash_hmac("sha512", $request->all(), $this->secretKey);

            if ($hmac != $request->server('HTTP_HMAC')) {
                activity('coinpayments')
                    ->withProperties(['ip' => $request->ip()])
                    ->log('Unauthorized HMAC Request');
                die();
            }

        } else {
            activity('coinpayments')
                ->withProperties(['ip' => $request->ip()])
                ->log('Unauthorized HMAC Request');
            die();
        }

        // Passed initial security test - now check the status
        $status = intval($request->input('status'));
        $statusText = $request->input('status_text');

        if ($request->input('merchant') != $this->merchantId) {
            activity('coinpayments')
                ->withProperties(['ip' => $request->ip()])
                ->log('Mismatching merchant ID. MerchantID:' . $request->input('merchant'));
            die();
        }

Я пытаюсь добавить CoinPayments на свой веб-сайт.. и когда я устанавливаю URL-адрес IPN, я получаю эту ошибку.. Платеж поступает на мой счет, но продукт не доступен для загрузки..

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
1 171
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вам нужно научиться правильно читать сообщение об ошибке, прежде чем публиковать его в stackoverflow, $request->all() дает вам массив, но hash_hmac() метод ожидает строку, вот и все, Если вам нужны все данные. то вы можете использовать функцию implode() для создания строки из входного массива.

$inputs = $request->all();
$string = implode("",$inputs);
$hmac = hash_hmac("sha512", $string, $this->secretKey); 

Но мне нужно дать все данные

Michael Bouix 04.04.2019 07:31

Ошибка сообщает вам, что второй параметр, переданный функции hash_hmac(), является массивом и должен быть строкой.

$request->all()) извлекает все входные данные в виде массива

Попробуйте передать имя ввода вместо всех, например:

$name = $request->input('name');
$hmac = hash_hmac("sha512", $name, $this->secretKey); 

Другие вопросы по теме