Как в QIWI API при помощи SDK проверить целостность хеша и ответить, что все правильно?
Приветствую! Я могу формировать заявку при помощи QIWI PHP SDK, но мне помимо этого еще нужно проверять, что платеж оплачен, делать соответствующие действия, затем отправлять сервису сообщение о том, что проверка прошла успешно.
Для этого я создал файл good.php, в настройках API указал, что POST-запрос будет приходить на него. В нем написал код, чтобы он брал данные из заголовка X-Api-Signature-SHA256, затем брал массив данных (в формате JSON), которые приходят в теле запроса, перекодировал их в обычный PHP-массив.
Провел проверку и все данные выводятся успешно. Но непонятно как работает функция checkNotificationSignature, какие параметры ей задавать.
Первый параметр - $signature. Его я беру из заголовка X-Api-Signature-SHA256
Второй параметр - $notificationBody. Его я беру из массива данных
Третий параметр - $merchantSecret. А вот его я хз откуда брать. Это секретный ключ, из пары ключей, которое выдает QIWI или что?
Далее функция возвращает true или false. На основании ее ответа мне надо обратно отправить JSON массив. Вопрос: как мне при помощи CURL отправить его обратно, если я не знаю откуда конкретно он пришел?
Подпись уведомления отправляется в заголовке X-Api-Signature-SHA256. Для формирования подписи используется механизм проверки целостности HMAC с хэш-функцией SHA256.
Алгоритм проверки подписи:
1) Объединить значения параметров в одну строку с разделителем |:
После того, как был получен входящий запрос-уведомление, необходимо проверить подлинность цифровой подписи и отправить ответ в формате JSON. В ответе должен вернуться код результата обработки уведомления. Код результата должен находиться в параметре error.
А как отправить ответ, если я не знаю откуда пришел запрос?
// тут обрабатываете то, что пришло в запросе и валидируете хэш.
$isValidSignature = $billPayments->(...) ;
$errorCode = 0;
if(! $isValidSignature) {
$errorCode = 400; // тут нужно посмотреть в документации какие коды они принимают. Здесь для примера http bad request
}
echo json_encode([
'error' => $errorCode
]) ;
Как-то так. Возможны очепятки, так как пишу с телефона.
r4gn4r0k, мил человек, так и где взял $merchantSecret? Сейчас тоже необходимо подключить клиенту, но эти жмурики из киви намеренно похоже не пишут, где брать этот $merchantSecret, это же не секретный ключ полученный при регистрации api...