prestashop 1.7 新模块

Posted

技术标签:

【中文标题】prestashop 1.7 新模块【英文标题】:prestashop 1.7 new module 【发布时间】:2018-05-15 07:49:17 【问题描述】:

我在 prestashop 1.7 中遇到问题,当我在我的模块中加载 form.tpl 时,我无法执行 setAction。我需要的是,当我继续付款时,我使用支付平台打开新的销售,并在平台 carge 的 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> ";


    


【问题讨论】:

这是英文所以。请用英文发帖。 对不起,我的英语说得很少 那么请将您的问题发到es.***.com 我在 prestashop 1.7 中遇到问题,当我在我的模块中加载 form.tpl 时,我无法执行 setAction 我需要的是,当我继续付款时,我打开一个新的销售支付平台和prestashop中的平台carge验证我留下代码帮助是我问的,希望你理解 【参考方案1】:

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

postProcess 方法将其传递给 main,validation.php 文件将其传递给 main 文件所在的同一文件夹。

接下来修改validation.php文件,改到main目录下,这个文件应该如下。

应该导入

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

那么为了避免内核错误,必须实现以下代码sn-p

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

在这之后,需要执行逻辑并通过get接收参数,支付完成后返回支付界面,一旦接收到这个数据,就必须恢复购物车并将数据发送到迁移到主文件的函数

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 的函数,在那里将验证和创建订单。

需要注意的是,支付后的返回url必须是ulrCommerce/module/validation.php

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

【讨论】:

以上是关于prestashop 1.7 新模块的主要内容,如果未能解决你的问题,请参考以下文章

覆盖 Prestashop 1.7 模块的方法

Prestashop 1.7 模块目录数据未找到

PrestaShop 1.7 添加新资源和类

Prestashop 1.7 - 覆盖 homeslider 模块控制器(hookdisplayHeader javascript)

Prestashop 1.7 调试栏

尝试在 prestashop 1.7 管理模块中加载 js 和 css 文件