Как заполнить POST-данные из postProcess в smarty tpl через hookPaymentReturn - PullRequest
0 голосов
/ 24 января 2019

Я пытаюсь изменить поведение платежного модуля в Prestashop 1.6.x, чтобы создать квитанцию ​​клиента из источника подтверждения на страницу подтверждения заказа .

Я хотел бы получить предложение относительно наилучшего метода и некоторые рекомендации по его правильному достижению.

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

Насколько я понимаю, после оплаты:

  1. модуль проверяет заказ и обрабатывает данные POST внешнего источника с помощью функции PostProcess() (часть расширенного класса ModuleFrontController) и находится в файле controllers / front / validation.php.

  2. В пределах PostProcess(), если внешние данные в порядке (т.е. транзакция одобрена),он перенаправляет к контроллеру подтверждения заказа следующее:

public function postProcess() {

(...)

$somePostData = '';

//this is the variable that is populated from POST data and i need to show in the confirmation.tpl
$somePostData = Tools::getValue('postdata'); 

Tools::redirect('index.php?controller=order-confirmation&id_cart=' .
                    $this->context->cart->id . '&id_module=' .
                    $this->module->id . '&id_order=' .
                    $this->module->currentOrder . '&key=' .
                    $customer->secure_key
                );

(...)

}

В какой-то момент вызывается hookPaymentReturn() (находится в основном файле php модуля), который загружает определенный файл шаблона модуля, связанный со страницей подтверждения заказа.

Чтобы показать некоторые переменные через файл tpl, единственное решение, которое я нашел, это использовать smarty переменную непосредственно перед возвратом заполненного tpl, как показано ниже:

public function hookPaymentReturn()
    {
        if (!$this->active) {
            return;
        }

        //this is the variable that I want to populate from the above-mentioned $somePostData found in postProcess()
        $receipt_display = 'some data';

        $this->context->smarty->assign('receipt_display', $receipt_display);

        return $this->display(__FILE__, 'views/templates/hook/confirmation.tpl');
    }

Таким образом, мой вопрос заключается в том, как я могу заполнить $ receive_display данными из $ somePostData, как показано в двух вышеупомянутых разделах кода?

Есть ли другая методология, которую вы могли бы предложить, если приведенный вышеупомянуто неправильно?

Спасибо, mmystery

1 Ответ

0 голосов
/ 24 января 2019

Зависит от того, является ли $ _POST ['somePostData'] простой строкой, если да, добавьте ее к Tools::redirect в качестве следующего параметра в URL, если это самые сложные данные, у вас есть две опции, которые я вижу:

  1. создать таблицу с простым отображением: ps_yourpaymentmethod_data: id_order | данные и получить данные по идентификатору в hookPaymentReturn

  2. установить значение в cookie:

$ this-> context-> cookie-> someVar = Tools :: getValue ('postData'); $ This-> context-> Cookie-> запись ();

Прочитайте это в hookPaymentReturn:

if ($this->context->cookie->someVar) {
    $someVar = $this->context->cookie->someVar;
    $this->context->cookie->someVar = null;
    $this->context->cookie->write();
}
...