В настоящее время я использую 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);