我的订单完整退货方法是否正确?

时间:2016-05-04 09:59:37

标签: prestashop prestashop-1.6

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

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

成功付款后,它将调用此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,订单状态会更新为“已完成”,但这是我需要的吗?

还有其他考虑因素吗?我有机会在这一点上调用hookDisplayPaymentReturn但我为什么要这样做?

我似乎有一个非常标准的返回页面。这够了吗;

enter image description here

更新 - 我只是调用一个类似的钩子;

public function displayPaymentReturn()
{

    $params = $this->displayHook();

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

    return false;
}

1 个答案:

答案 0 :(得分:1)

据我所知,一切似乎都适合我。

您应该考虑添加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');
    }
}