Вход • Регистрация

В адресную строку браузера вместо символа "&" передается "&" - как решить эту проблему?

  • 18 мая 2017 г.
  • Всем привет! Прошу подсказать как победить следующую проблему:

    На сайте имеется форма обратной связи с полями НОМЕР ЗАКАЗА, РУБЛЕЙ, КОПЕЕК.
    Заполнив их и нажав ОПЛАТИТЬ происходит переход на сайт банка к форме ввода данных банковской карточки (экваринг в общем).

    В файле feedback.action.php формируется строка с параметрами определенными и т.д.... и происходит редирект на сайт банка...

    Проблема вот в чем! В адресную строку браузера вместо символа "&" передается "&"

    https://banksite.ru/Gateway/hppaction?formAction=com.aciworldwide.commerce.gateway.payment.action.HostedPaymentPageAction&PaymentID=7676460002171380


    КАК сделать чтобы был просто символ "&" ?

    Ниже кусок кода который в итоге перенаправляет на сайт банка

    Код

    .....
    foreach ( $params as $key => $value ) $postdata .= "&".rawurlencode($key)."=".rawurlencode($value);

    $ch = curl_init();
    curl_setopt ($ch, CURLOPT_URL, $url );
    curl_setopt ($ch, CURLOPT_POST, 1 );
    curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata );
    curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    $curl_result = curl_exec ($ch);
    curl_close($ch);

    $this->result["redirect"] = urldecode($curl_result);
    • 18 мая 2017 г. , редакция: 18 мая 2017 г.
    • Код
      .....
      foreach ( $params as $key => $value ) $postdata .= "&".rawurlencode($key)."=".rawurlencode($value);

      $ch = curl_init();
      curl_setopt ($ch, CURLOPT_URL, $url );
      curl_setopt ($ch, CURLOPT_POST, 1 );
      curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata );
      curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
      curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
      if ($curl_result = curl_exec ($ch))
      $curl_result = htmlspecialchars_decode(urldecode($curl_result));
      else $curl_result = "/";
      // вместо "/" лучше указать адрес страницы, говорящей об ошибке.
      curl_close($ch);

      $this->result["redirect"] = $curl_result;
      • 18 мая 2017 г.
      • Блин! не помогло :(
        • 18 мая 2017 г.
        • Замените это
          Код
          $curl_result = htmlspecialchars_decode(urldecode($curl_result));

          на это
          Код
          $curl_result = str_replace("&", "&", urldecode($curl_result));
          • 18 мая 2017 г.
          • Тоже не катит! Такой вариант я уже ранее пробовал сам... ну и сейчас еще раз попробовал вашу строку вставить! всё равно & в строке!
            • 18 мая 2017 г.
            • Цитата
              http://site.ru/?task=1&bot=2

              Значит надо смотреть, что дальше по коду у Вас происходит с $this->result["redirect"]
            • 18 мая 2017 г. , редакция: 18 мая 2017 г.
            • Цитата
              В ядре где то заменяется уже после попадания в $this->result["redirect"]
              Все верно. Берем файл: /js/site.js
              и находим там строчки
              Код
              if (response.redirect) {
              window.location = response.redirect;
              }

              Соответственно найденное меняем на эти строчки
              Код
              if (response.redirect) {
              window.location = prepare(response.redirect);
              }


              Теперь все будет как и положено или на кладено. :))

              Успехов.
              • 18 мая 2017 г.
              • Ееееее! Спасибо вам огромное Виталий! Всё заработало!!! )
            • 18 мая 2017 г.
            • Цитата
              Ееееее! Спасибо вам огромное Виталий! Всё заработало!!! )
              А что было сомнение, что не решим? :)) Если внимательно посмотреть на указанный файл, так там еще кое-что надо менять. Ну да ладно, всему свое время :)
  • 18 мая 2017 г.
  • Тут получается JS редирект отрабатывает. Можно попробовать $this->diafan->redirect(); - чтобы через header

Новости

  • 24 апреля, среда
  • В новой сборке совершили революцию в структурировании кастомизированной информации в шаблонах, добавили авторегистрацию пользователей, усовершенствовали защиту от спама, актуализировали накопительную скидку, а также улучшили производительность и стабильность работы системы.
  • 12 января
  • После выхода сборки 7.1 мы выпустили уже три патча, в каждом из которых улучшаем административную часть сайта. Сборка DIAFAN.CMS 7.1.3 уже доступна к установке. 
  • 15 декабря 2023 г.
  • Подводим итоги 2023 года. Выпустили новую сборку DIAFAN.CMS 7.1.1, вводим новые тарифы на аренду сайта и коммерческую поддержку и автообновления с января 2024 г., строим планы на будущий год.