我的订单完成 return 方法是否正确?

Is my order complete return approach correct?

当客户return输入以下内容时URL(示例);

http://prestashop.dev/index.php?action=completed&controller=callback&fc=module&hmac={valid-hmac}&merchant_order_id=14&module=chippin

支付成功后,会调用这个FrontController子class;

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,但我为什么要调用?

我的页面似乎很标准 return。够了吗;

更新 - 我只是调用一个钩子吗?

public function displayPaymentReturn()
{

    $params = $this->displayHook();

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

    return false;
}

据我所知,一切对我来说都还好。

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


编辑

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,
                        'hookDisplayPaymentReturn' => Hook::exec('displayPaymentReturn', $params, (int) $this->module->id);
                    )
                );

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

                Tools::redirect('index.php?controller=order-confirmation&id_cart='.$cart->id.'&id_module='.$this->module->id.'&id_order='.$order->id.'&key='.$customer->secure_key);

在您的模块中:

class myPaymentModule extends PaymentModule
{
    public function install()
    {
        if (!parent::install() || !$this->registerHook('paymentReturn'))
            return false;
        return true;
    }

    // Example taken from bankwire module
    public function hookPaymentReturn($params)
    {
        $state = $params['objOrder']->getCurrentState();

        $this->smarty->assign(array(
            '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,
            'status' => 'ok',
            'id_order' => $params['objOrder']->id
        ));
        if (isset($params['objOrder']->reference) && !empty($params['objOrder']->reference))
            $this->smarty->assign('reference', $params['objOrder']->reference);
        return $this->display(__FILE__, 'confirmation.tpl');
    }
}