Перейти к содержанию
wlad

не проходит элемент $_POST массива

Рекомендуемые сообщения

Доброго всем.

Есть проблемма. Пишу модуль оплаты. Валидация оплаты проходит после посылки  3-х последовательных POST запросов от системы оплаты и моих ответов на каждый запрос. В элементе пост запроса с именем XML получаю сообщения, обрабатываю их и отвечаю. Все проходит нормально, кроме отмены оплаты.

По словам тех поддержки системы оплаты, в случае отмены они шлют точно такой же POST как и в других ситуациях (теже заголовки и тп). Отличия только в самом XML сообщении.

На входе функции приема сообщения от системы оплаты логирую $_POST['XML']. Во всех ситуациях кроме отмены оплаты элемент массива содержит xml сообщение. В случае отказа от оплаты, $_POST['XML'] существует, но пустой.

 

Вот таким его отправляют мне:

<?xml version="1.0" encoding="windows-1251" ?>
<ServiceProvider_Request>
<DateTime>20140212173811</DateTime>
<Version>1</Version>
<RequestType>TransactionResult</RequestType>
<PersonalAccount>1092</PersonalAccount>
<Currency>974</Currency>
<RequestId>27214</RequestId>
<TransactionResult>
<TransactionId>681545</TransactionId>
<ServiceProvider_TrxId>681545</ServiceProvider_TrxId>
<ErrorText>Операция отменена</ErrorText>
</TransactionResult>
</ServiceProvider_Request>

 

Почему он может пропадать? Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

может на последнем этапе редирект?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробуйте парсить ответ на <ErrorText>, предполагаю, в норм. ответе отсутствует или пустой текущий элемент массива. В общем, копать в сторону идентификатора, который отличает ответы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Похоже проблема с входящими сообщениями в кириллице windows-1251. Затирает сообщения или магазин или хостер. При чем все символы, включая цифры, анг буквы и пр.. Может было у кого?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

сделал отдельный лог на входящие POST как тут:

 https://ilser.by/blog/zametki-sisadmina/logirovanie-post-zaprosov-k-sajtu/

 

и оно таки доходит. Обрезает опенкарт. Где капнуть????

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Таки нашел заразу.

/system/library/request.php

 

 

public function clean($data) {


if (is_array($data)) {
foreach ($data as $key => $value) {
unset($data[$key]);

$data[$this->clean($key)] = $this->clean($value);
}
} else {
$data = htmlspecialchars($data, ENT_COMPAT, 'UTF-8');
}

return $data;

 

чистит сообщения.

Осталось разобраться по какому условию OPENCART не пропускает кирилицу win_1251

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

как не хотелось бы, но пришлось модифицировать движок магазина.

 

 

Содержимое файла xml для vqmod

 

<modification>
<id>Erip Cyrillic</id>
<version>1.0</version>
<vqmver>2.1.5</vqmver>
<author>Vlad</author>

<file name="/system/library/request.php">
<operation>
<search position="replace"><![CDATA[$data = htmlspecialchars($data, ENT_COMPAT,'UTF-8');]]></search>
<add><![CDATA[if(preg_match('//u', $data))
{$data = htmlspecialchars($data, ENT_COMPAT,'UTF-8');}
else
{$data = htmlspecialchars($data, ENT_COMPAT,'Windows-1251');}]]>
</add>
</operation>
</file>
</modification>

 

если у хостера php 5.4, то htmlspecialchars($data, ENT_COMPAT,'UTF-8'); - не пропустит ничего кириллического отличного от UTF-8.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.