Как обновить статус заказа в joomla / virtuemart - PullRequest
0 голосов
/ 16 января 2020

В настоящее время я использую Joomla v3.9.14 и Virtuemart v3.6.10. Я почти закончил создание платежного шлюза с перенаправлением клиентов. Я застрял в методе, который должен получить отклик от платежного шлюза и обновить статус. Я понятия не имею, как создать URL для ответа шлюза оплаты, потому что нет соответствующей документации для этого. Любая помощь будет оценена.

Вот мой метод, который не работает:

function plgVmOnPaymentNotification(){
    if (!($method = $this->getVmPluginMethod($virtuemart_paymentmethod_id))) {
        return null; // Another method was selected, do nothing
    }

    if (!$this->selectedThisElement($method->payment_element)) {
        return false;
    }

    if (!class_exists('VirtueMartCart'))
    require(JPATH_VM_SITE . DS . 'helpers' . DS . 'cart.php');
    if (!class_exists('shopFunctionsF'))
    require(JPATH_VM_SITE . DS . 'helpers' . DS . 'shopfunctionsf.php');
    vmLanguage::loadJLang('com_virtuemart');
    $modelOrder = VmModel::getModel('orders');

    // $tarlanResponse = file_get_contents('php://input'); 
    // $tarlanData = json_decode($tarlanResponse, true);
    $tarlanData = vRequest::getRequest();
    $payment_name = $this->renderPluginName($method);
    $order['customer_notified'] = 1;
    $order['include_comment'] = 0;
    $order_number = $tarlanData['reference_id'];
    $virtuemart_order_id = VirtueMartModelOrders::getOrderIdByOrderNumber($order_number);
    $order = $modelOrder->getOrder($virtuemart_order_id);
    $customer_total = (number_format((float)$order['details']['BT']->order_total, 2, '.', ''));
    $payment_name = $this->renderPluginName($method);

    if(!empty($tarlanResponse)){
        switch($tarlanData['status']){
            case 0:
            $order->updateStatusForOneOrder($virtuemart_order_id, array('order_status' => $method->status_pending));
            break;
            case 1:
            $order->updateStatusForOneOrder($virtuemart_order_id, array('order_status' => $method->status_paid));
            $order->_updateOrderHist($virtuemart_order_id, $method->status_paid, 1, 'Произведена оплата заказа на сумму '.$order['details']['BT']->order_total.' KZT');
            break;
            case 2:
            $order->updateStatusForOneOrder($virtuemart_order_id, array('order_status' => $method->status_pending));
            break;
            case 3:
            $order->updateStatusForOneOrder($virtuemart_order_id, array('order_status' => $method->status_pending));
            break;
            case 4:
            $order->updateStatusForOneOrder($virtuemart_order_id, array('order_status' => $method->status_canceled));
            break;
            case 5:
            $order->updateStatusForOneOrder($virtuemart_order_id, array('order_status' => $method->status_refund));
            $order->_updateOrderHist($virtuemart_order_id, $method->status_refund, 1, 'Возврат на сумму' . $order['details']['BT']->order_total. ' KZT');
            break;
            case 6:
            $order->updateStatusForOneOrder($virtuemart_order_id, array('order_status' => $method->status_failed));
            break;
            default:
            vmError('Undefined transaction status!<br>To solve this problem write to <a href="mailto:support@tarlanpayments.kz">support@tarlanpayments.kz</a>');
            break;
        }
    }
    $html = $this->_getPaymentResponseHtml($tarlanData, $
    return true;
}

И мой URL из ответа на платеж выглядит так: $callbackUrl = JRoute::_("index.php?option=com_virtuemart&view=orders&layout=details& order_number=".$order['details']['BT']->order_number."&order_pass=".$order['details']['BT']->order_pass, false);

...