Пытаюсь работать с платёжной системой liqpay, в апи настраиваются два url: result_url и server_url
. Первый отправляет пользователя на эту страницу, если он перейдёт по ссылке "вернуться на сайт" после оплаты, второй url обрабатывает данные, если пользователь после оплаты решил не переходить назад на сайт.
С сервера liqpay
ответ возвращается в $_POST
.
Создал такой callback:
add_action('the_content', function($content){
if(is_page('checkout')) { //проверим чтобы код не срабатывал на всех страницах
if (isset($_POST['data'])) {
$result = json_decode(base64_decode($_POST['data']));
// данные вернуться в base64 формат JSON
if ($result->status == 'success') {
ob_start();
echo '<div class="test1"><pre>';
var_export($result);
echo '</pre></div>';
$body = ob_get_clean();
wp_mail('mail@gmail.com', 'from checkout', 'Какое-то сообщение checkout . body = ' . $body);
}
}
}
return $content;
});
Правильный ли я использую хук? И почему этот callback не срабатывает на хук init
? the_content
правильно принимает данные и обрабатывает $_POST
Код не работает на хуке init
, потому что ещё рано. На этом этапе главный цикл WordPress не установлен. И хотя функция is_page()
уже существует, но возвращает она всегда false
.
Ваш код сможет работать, например, на хуке wp
:
<?php
add_action(
'wp',
function () {
if ( is_page( 'checkout' ) ) { // Проверим, чтобы код не срабатывал на всех страницах.
if ( isset( $_POST['data'] ) ) {
$result = json_decode( base64_decode( $_POST['data'] ) ); // Данные вернутся в base64 формат JSON.
if ( 'success' === $result->status ) {
ob_start();
echo '<div class="test1"><pre>';
var_export( $result );
echo '</pre></div>';
$body = ob_get_clean();
wp_mail( 'mail@gmail.com', 'from checkout', 'Какое-то сообщение checkout . body = ' . $body );
}
}
}
}
);
Подробнее о порядке загрузки WordPress здесь.
Если надо обработать ответ на отдельной странице создайте её, подгрузите часть ядра например создаём странице для получения ответа request_liqpay.php
require_once( $_SERVER['DOCUMENT_ROOT'] . '/wp-load.php' );
wp_mail(***);
// если нужен доступ к базе
global $wpdb;
$wpdb->insert/update/get_result и прочие действия
die();
Вот пару дней назад реализовал прослушку callback. Через функцию register_rest_route() регистрируем URL по которому будет срабатывать код для обработки callback. То есть не вздумайте создавать из админки пустые страницы.
Пример кода для проверки подлинности подписи (в файле который указали в параметре server_url
):
if ( isset( $_POST['data'] ) ) {
$data = $_POST['data'];
} else {
wp_die();
}
if ( isset( $_POST['signature'] ) ) {
$signature = $_POST['signature'];
} else {
wp_die();
}
$private_key = 'Ваш ключ';
//формируем нашу подпись
$my_signature = base64_encode( sha1(
$private_key .
$data .
$private_key
, 1 ));
if ( $my_signature === $signature ) {
// делаем проверку на каждый статус ответа по платежу
} else {
wp_die();
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Мне нужно дать пользователю делиться абсолютно любым файлом, при этом при загрузке на сервер использовать минимум проверок
Использую Ratchet php, я пытался считать файл по байтам и отправить их, но что-то не очень это ворк, есть ли другие способы ?
Как можно перенести определенные(поле статус которых 1) записи из 2ой таблицы в первую и при этом вставить в 1 дополнительные значения, которых...