Prestashop 1.7 DisplayPaymentByBinaries перехватывает модуль оплаты

Я создаю платежный модуль для Prestashop 1.7, и я пытаюсь использовать крючок DisplayPaymentByBinaries, потому что я не могу использовать кнопку отправки.

внизу вы найдете мой код:

    public function hookDisplayPaymentByBinaries()
{
    if (!Currency::exists('EUR', 0))
    {
        return  '<p class="payment_module" style="color:red;">' .
        $this->l('Payment Methods are only available when Euros are activated.') .
        '</p>';
    }
    $issuer_setting = $this->getConfigValue('MY_ISSUERS');

    try {

        $methods = $this->api->methods->all();
        $issuer_list = in_array($issuer_setting, array(self::ISSUERS_ALWAYS_VISIBLE, self::ISSUERS_ON_CLICK)) ? $this->_getIssuerList() : array();
    } catch (MY_API_Exception $e) {
        $methods = array();
        $issuer_list = array();

        if ($this->getConfigValue('MY_DEBUG_LOG') == self::DEBUG_LOG_ERRORS)
        {
            Logger::addLog(__METHOD__ . ' said: ' . $e->getMessage(), My::ERROR);
        }
        if ($this->getConfigValue('MY_DISPLAY_ERRORS'))
        {
            return
                '<p class="payment_module" style="color:red;">' .
                $e->getMessage() .
                '</p>'
                ;
        }
    }
    $this->setBinary = true;
    $this->smarty->assign(array(
            'methods'        => $methods,
            'issuers'        => $issuer_list,
            'issuer_setting' => $issuer_setting,
            'images'         => $this->getConfigValue('MY_IMAGES'),
            'warning'        => $this->warning,
            'msg_pay_with'   => $this->lang['Pay with %s'],
            'msg_bankselect' => $this->lang['Select your bank:'],
            'module'         => $this,
        ));

    return $this->display(__FILE__, 'my_methods.tpl');
}

Как описано prestashop:

Как вы могли прочитать выше, у вас не должно быть кнопки отправки в HTML-код вашего модуля, потому что PrestaShop автоматически сгенерирует ее. Если вы не можете удалить кнопку отправки из формы по каким-либо причинам (например: форма создается двоичными файлами), мы реализовали другой способ сделать ваш модуль совместимым с PrestaShp 1.7. Но учтите, что это НЕ рекомендуемый способ сделать это.

Для этого вам потребуется реализовать дополнительный перехватчик: displayPaymentByBinaries. Он предназначен для отображения формы оплаты и заменяет уникальную кнопку оплаты на кассе.

Вам также необходимо установить для двоичной переменной $ значение true. Он адаптирует поведение, чтобы скрыть кнопку оплаты и заменить ее формой при выборе варианта оплаты.

Я внедрил свой код, и мои варианты оплаты отображаются, но кнопка отправки все еще на месте. Как вы можете видеть в моей функции, я использовал:

$this->setBinary = true;

в заголовке файла я добавил:

use PrestaShop\PrestaShop\Core\Payment\PaymentOption;

Функция setBinary, которую я вызываю (из файла paymentoption):

public function setBinary($binary)
{
    $this->binary = $binary;
    return $this;
}

Может ли кто-нибудь помочь мне разобраться в том, что я здесь делаю не так? Другими словами, что мне нужно изменить, чтобы удалить кнопку отправки?

Заранее всем спасибо.


Ниже мой рабочий тент, благодаря @UnLoCo.

    public function hookPaymentOptions($params)
{
    if (!Currency::exists('EUR', 0))
    {
        return;
    }

    try {
        $methods = $this->api->methods->all();
    } catch (My_API_Exception $e) {
        $methods = array();

        if ($this->getConfigValue('My_DEBUG_LOG') == self::DEBUG_LOG_ERRORS)
        {
            Logger::addLog(__METHOD__ . ' said: ' . $e->getMessage(), My::ERROR);
        }

        return;
    }


    $payment_options = array();
    foreach($methods as $method)
    {
        $newOption = new PaymentOption();
        $newOption->setBinary(true);

        $payment_options[] = $newOption;
    }

    return $payment_options;
}

person Aurora    schedule 22.02.2017    source источник
comment
Я понял, что в возвращаемом способе оплаты вам нужно установить бинарное поле в значение true, вам нужно указать свой hookPaymentOptions код   -  person unloco    schedule 22.02.2017
comment
@UnLoCo Спасибо за то, что вы первый в мире, кто даже ответил на один из моих вопросов, и спасибо, что указали мне на это. Я упустил это из виду в руководстве. Позвольте мне попробовать ...   -  person Aurora    schedule 23.02.2017
comment
@UnLoCo У меня все работает благодаря тебе! Мне удалось придумать, как изменить код, чтобы не использовать hookDisplayPaymentByBinaries. Я обновил свой вопрос, чтобы показать людям, как реализовать двоичный код в hookPaymentOptions. Я хотел попросить вас разместить в нем свой комментарий как awnser и рабочий код из моего вопроса. И отмечу твой тент как правильный. Еще раз спасибо за то, что указали мне правильное направление!   -  person Aurora    schedule 23.02.2017
comment
Рад, что смог помочь, я добавил псевдокод в качестве ответа, ура   -  person unloco    schedule 23.02.2017
comment
@UnLoCo, дорогой сэр, как и обещал, я отметил это как правильное. И еще раз спасибо!   -  person Aurora    schedule 23.02.2017


Ответы (1)


Решение состоит в том, чтобы установить для двоичного файла значение true в возвращаемых вариантах оплаты.

public function hookPaymentOptions($params)
{
    //...

    $payment_option = new PaymentOption();
    $payment_option->setBinary(true);

    return array(
        $payment_option
    );    
}
person unloco    schedule 23.02.2017