Prestashop 我的订单完全退货方法正确吗?

Prestashop 我的订单完全退货方法正确吗?,prestashop,prestashop-1.6,Prestashop,Prestashop 1.6,当客户返回到以下URL时(示例) 成功付款后,它将调用此FrontController子类 class ChippinCallbackModuleFrontController extends ModuleFrontController { public function postProcess() { $chippin = new Chippin(); $payment_response = new PaymentResponse();

当客户返回到以下URL时(示例)

成功付款后,它将调用此FrontController子类

class ChippinCallbackModuleFrontController extends ModuleFrontController
{
    public function postProcess()
    {
        $chippin = new Chippin();

        $payment_response = new PaymentResponse();
        $payment_response->getPostData();

        // if a valid response from gateway
        if(ChippinValidator::isValidHmac($payment_response)) {

            // "action" is passed as a param in the URL. don't worry, the Hmac can tell if it's valid or not.
            if ($payment_response->getAction() === "completed") {

                // payment_response->getMerchantOrderId() will just return the id_order from the orders table
                $order_id = Order::getOrderByCartId((int) ($payment_response->getMerchantOrderId()));
                $order = new Order($order_id);
                // this will update the order status for the benefit of the merchant.
                $order->setCurrentState(Configuration::get('CP_OS_PAYMENT_COMPLETED'));

                // assign variables to smarty (copied this from another gateway, don't really understand smarty)
                $this->context->smarty->assign(
                    array(
                        'order' => $order->reference,
                    )
                );

                // display this template
                $this->setTemplate('confirmation.tpl');
我对Prestashop还是个新手。我只是不确定这在技术上是否可行。
confirmation.tlp
视图确实显示了
order->reference
,订单状态更新为“Completed”,但这就是我所需要的吗

还有其他考虑吗?我现在有机会打电话给hookDisplayPaymentReturn,但我为什么要这么做呢

我似乎有一个相当标准的返回页。这是否足够

更新-我是不是把一个钩子叫做

public function displayPaymentReturn()
{

    $params = $this->displayHook();

    if ($params && is_array($params)) {
        return Hook::exec('displayPaymentReturn', $params, (int) $this->module->id);
    }

    return false;
}

就我所知,一切对我来说都很好

您应该考虑添加<代码> HooDeCasePayMeutsRe>/Cuff> >它允许其他模块向您的确认页添加代码。例如,Google模块可以添加javascript代码,将订单信息发送到确认页面上的分析


编辑

类ChippinCallbackModuleFrontController扩展了ModuleFrontController
{
公共函数后处理()
{
$chippin=新的chippin();
$payment_response=新的PaymentResponse();
$payment_response->getPostData();
//如果来自网关的响应有效
如果(无效者::isValidHmac($payment_response)){
//“action”在URL中作为参数传递。别担心,Hmac可以判断它是否有效。
如果($payment\u response->getAction()=“completed”){
//payment\u response->getMerchantOrderId()将从orders表返回id\u订单
$order\u id=order::getOrderByCartId((int)($payment\u response->getMerchantOrderId());
$order=新订单($order\u id);
//这将为商户的利益更新订单状态。
$order->setCurrentState(配置::get('CP_OS_PAYMENT_COMPLETED');
//将变量分配给smarty(从另一个网关复制,不太了解smarty)
$this->context->smarty->assign(
排列(
“订单”=>$order->reference,
'hookDisplayPaymentReturn'=>Hook::exec('displayPaymentReturn',$params,(int)$this->module->id);
)
);
$cart=$this->context->cart;
$customer=新客户($cart->id\u客户);
工具::重定向('index.php?controller=订单确认&id\u购物车='。$cart->id.&id\u模块='。$this->module->id.&id\u订单='。$order->id.&key='。$customer->secure\u key);
在您的模块中:

类myPaymentModule扩展了PaymentModule
{
公共函数安装()
{
如果(!parent::install()| |!$this->registerHook('paymentReturn'))
返回false;
返回true;
}
//示例取自bankwire模块
公共函数hookPaymentReturn($params)
{
$state=$params['objOrder']->getCurrentState();
$this->smarty->assign(数组)(
“total_to_pay”=>Tools::displayPrice($params['total_to_pay'],$params['currencyObj',false),
“bankwireDetails”=>Tools::nl2br($this->details),
“bankwireAddress”=>Tools::nl2br($this->address),
“bankwireOwner”=>$this->owner,
“状态”=>“正常”,
'id_order'=>$params['objOrder']->id
));
if(isset($params['objOrder']->参考)和&!empty($params['objOrder']->参考))
$this->smarty->assign('reference',$params['objOrder']->reference);
返回$this->display(_文件__,'confirmation.tpl');
}
}

这是什么意思?我应该在钩子里做,而不是直接调用
确认.tpl
页面?或者只使用空钩子方法?-查看我的更新您正在使用快捷方式显示确认模板。实际上,您应该重定向到订单确认控制器,该控制器将为您执行此过程。在您的模块中,您可以可以挂接
displayPaymentReturn
displayOrderConfirmation
。请参阅我的编辑查看
bankwire
模块(它是默认的预启动模块)。这是一个非常简单的模块。我以前见过
controller=order confirmation
,是的,我注意到我绕过了order confirmation controller。我可以使用bankwire。如果我不能调用
$cart=$this->context->cart
,这有关系吗?我可以像现在一样创建一个新的购物车?是的,就像lon一样g由于购物车存在,所以没有问题。
public function displayPaymentReturn()
{

    $params = $this->displayHook();

    if ($params && is_array($params)) {
        return Hook::exec('displayPaymentReturn', $params, (int) $this->module->id);
    }

    return false;
}