prestashop 1.7新模块

问题描述 投票:3回答:1

我在prestashop 1.7中有问题,当我在模块中加载form.tpl时,我无法执行setAction。我需要的是,当我继续付款时,我使用付款平台开了一个新交易,在prestashop的平台上进行验证,所以我离开了代码。请帮助

prestashop模块的主文件

         public function hookPaymentOptions($params) {

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

        $this->smarty->assign(
                $this->getPaymentApiVars()
        );

        $apiPayement = new PaymentOption();
        $apiPayement->setModuleName($this->name)
                ->setLogo($this->context->link->getBaseLink().'/modules/hhpayment/views/img/pago.jpg')
//                ->setCallToActionText($this->l(''))                
                //Définition d'un formulaire personnalisé
                ->setForm($this->fetch('module:hhpayment/views/templates/hook/payment_api_form.tpl'))
                ->setAdditionalInformation($this->fetch('module:hhpayment/views/templates/hook/displayPaymentApi.tpl'))
                 ->setAction($this->context->link->getModuleLink($this->name, 'validation', array(), true));


        return [$apiPayement];
    }

这是form.tpl,我在没有方法的情况下收取此费用,但这是通过测试的

<form action="{$payment_url}" target="_blank" >
    <div class="form-group">
        {* choix du mode de carte *}
        {l s='please choose your card type' mod='hhpayment'}
            <div class="radio">
                <label>
                    <input type="radio" name="cb_type" value="mastercard" id="cb_type1" checked="checked" /> Pago internacional
                </label>
            </div>
            <div class="radio">
                <label>
                    <input type="radio" name="cb_type" id="cb_type2" value="visa"/> Pago Nacional
                </label>
            </div>            
    </div>
    {* Informations pour l'api *}
    <input type="hidden" name="success_url" value="{$success_url}" />
    <input type="hidden" name="error_url" value="{$error_url}" />
    <input type="hidden" name="id_cart" value="{$id_cart}" />
    <input type="hidden" name="cart_total" value="{$cart_total}" />
    <input type="hidden" name="id_customer" value="{$id_customer}" />
</form>

这是验证文件

class hhpaymentvalidationModuleFrontController extends ModuleFrontController
{


    /**
     * Validation du paiement standard
     * Puis redirection vers la page de succès de commande
     */
    public function postProcess()
    {
         $cart = $this->context->cart;

       $this->abrir("http://davivienda.com");


        if ($cart->id_customer == 0 || $cart->id_address_delivery == 0 || $cart->id_address_invoice == 0 || !$this->module->active) {
            Tools::redirect('index.php?controller=order&step=1');
        }

        $customer = new Customer($cart->id_customer);

        if (!Validate::isLoadedObject($customer)) {
            Tools::redirect('index.php?controller=order&step=1');
        }

        $currency = $this->context->currency;
        $total = (float)$cart->getOrderTotal(true, Cart::BOTH);

        //La command passe directement en statut payé
        $this->module->validateOrder((int)$cart->id, Configuration::get('PS_OS_PAYMENT'), $total, $this->module->displayName, null, array(), (int)$currency->id, false, $customer->secure_key);
        Tools::redirect('index.php?controller=order-confirmation&id_cart='.(int)$cart->id.'&id_module='.(int)$this->module->id.'&id_order='.$this->module->currentOrder.'&key='.$customer->secure_key);
    }

    public function abrir($param) 
    {
        echo" <script> window.open(URL,'ventana1,'width=300,height=300,scrollbars=NO')</script> ";


    }

}
prestashop prestashop-1.7
1个回答
0
投票

我能够找到此问题的解决方案,我不知道它是否正确,但是它已经对我有用:

postProcess方法将其传递到主文件,而validation.php文件将其传递到主文件所在的文件夹。

然后是时候修改validation.php文件了,该文件已更改为与main相同的目录,该文件应如下所示。

应导入

require_once dirname(__FILE__) . '/config/config.inc.php';
require_once dirname(__FILE__) . '/main.php';

然后为了避免内核错误,必须实现以下代码片段

global $kernel;
if(!$kernel){
    require_once _PS_ROOT_DIR_.'/app/AppKernel.php';
    $kernel = new \AppKernel('prod', false);
    $kernel->boot();
}

此后,有必要实现逻辑并通过获取来接收参数,使付款屏幕在付款后将返回给我们,一旦收到此数据,就必须恢复购物车并将数据发送给功能已迁移到主文件

ob_start();
    $context = Context::getContext();

if (is_null($context->cart)) {
    $context->cart = new Cart($context->cookie->id_cart);
}
if (is_null($context->cart->id_currency)) {
    $context->cart->id_currency = $context->cookie->id_currency;
}

$cart = $context->cart;
$customer = new Customer($cart->id_customer);
$currency = $cart->id_currency;
$total = (float)$cart->getOrderTotal(true, Cart::BOTH);
$object = new filemain();

$order = $object->methodCreateInMain($cart->id, Configuration::get('PS_OS_PAYMENT'), $total, $currency, $customer->secure_key);

基本上,validation.php中的先前代码检索购物车数据,并通过参数将其发送到传递给main的函数,在该函数中将验证和创建订单。

应注意,付款后的返回网址必须为ulrCommerce/module/validation.php

以上对我来说非常有效,并且是基于所查看的各种博客和论坛的解决方案

© www.soinside.com 2019 - 2024. All rights reserved.