当前位置: 首页 > 知识库问答 >
问题:

Prestashop 1.7新模块

史朗
2023-03-14

加载表单时,prestashop 1.7中有一个问题。在我的模块中,tpl无法执行设置操作。我需要的是,当我继续付款时,我会使用付款平台打开一个新的销售,在平台车中的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 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> ";


    }

}

共有1个答案

潘阳舒
2023-03-14

我找到了这个问题的解决方案,我不知道它是否正确,但它已经对我起作用了:

后处理方法将其传递给main和验证。php文件将其传递到主文件所在的同一文件夹。

然后是修改验证的时候了。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);

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

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

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

 类似资料:
  • 新增一个类 net.wendal.nutzbook.module.CaptchaModule package net.wendal.nutzbook.module; import java.awt.image.BufferedImage; import javax.servlet.http.HttpSession; import net.wendal.nutzbook.util.Toolkit;

  • 概述 超声波模块进行了全面的改进,使用了注塑外壳对模块进行保护,并为其增加了氛围灯。氛围灯的引入大大提升了机器人在情绪表达上的潜力。 如下是新旧超声波的对比: 新超声波 超声波 塑料外壳 提升耐用性和质量 有 无 自带芯片 提升读值稳定性 有 无 氛围灯 额外的功能 8 颗 无

  • 更新内容 在应用里有两种更新内容的方法。较好的方法是用sync自动更新内容。Syncing 能保持内容自动更新,因为它不需要用户操作。 另外一种,手动刷新需要用户通过动作或者手势启动内容更新。手动刷新提供同步的同时保持当前的滚动位置。例如在Gmail里检查新邮件。 滑动刷新 滑动刷新是一个滑动手势。可用在普通列表,方格列表的开始处和卡片集合的最近内容出现的位置(Index 0)。 位置: 典型的,

  • 问题 你想重新加载已经加载的模块,因为你对其源码进行了修改。 解决方案 使用imp.reload()来重新加载先前加载的模块。举个例子: >>> import spam >>> import imp >>> imp.reload(spam) <module 'spam' from './spam.py'> >>> 讨论 重新加载模块在开发和调试过程中常常很有用。但在生产环境中的代码使用会不安全,因

  • 新建模型 新建实时模型 新建离线模型 新建模型 更新时间:2018-01-31 16:20:41 新建实时模型 实时数据计算广泛应用中各个环境中,特别IoT环境中,需要对设备数据进行实时计算并得以反馈。 点击“新建数据模型”,弹出新建模型的信息填写弹窗 选择模型类型为实时模型,输入名称,源表(只能选择数据接入流表),生成表英文名(在当前项目内不允许重复),生成表中文名,生成表描述,点击下一步进入模

  • 我现在迷路了。