Update catalog/controller/payment/hutko.php

This commit is contained in:
2025-12-14 12:05:09 +02:00
parent 8ef11454e1
commit e8750a0c29

View File

@@ -24,24 +24,20 @@ class Hutko extends \Opencart\System\Engine\Controller {
if (!$order_info) {
$json['error'] = 'Order missing';
} else {
// 1. Generate unique Ref for THIS attempt
$timestamp = time();
$hutko_ref = $order_info['order_id'] . '#' . $timestamp;
$hutko_ref = $order_info['order_id'] . '#' . time();
// Call the shared logic method
$request_data = $this->buildRequest($order_info, $hutko_ref);
if (!$request_data) {
$json['error'] = $this->language->get('error_payment_data_build');
} else {
$this->load->model('extension/hutko/payment/hutko');
// 2. Call API
$response = $this->api($this->checkout_url, $request_data);
if (($response['response']['response_status'] ?? '') === 'success' && !empty($response['response']['checkout_url'])) {
$url = $response['response']['checkout_url'];
// 3. Log to INTERNAL DB (Not Customer History)
$this->model_extension_hutko_payment_hutko->logTransaction(
$order_info['order_id'],
$hutko_ref,
@@ -50,14 +46,12 @@ class Hutko extends \Opencart\System\Engine\Controller {
$request_data['amount'] / 100,
$request_data['currency'],
[
'request_data' => $request_data, // Store sent data (except signature if needed)
'request_data' => $request_data,
'checkout_url' => $url,
'user_agent' => $this->request->server['HTTP_USER_AGENT'] ?? ''
]
);
// 4. Update Order Status to "Pending" (or configured status) if not already
// Only add history if it's a fresh order, don't spam.
if ($order_info['order_status_id'] == 0) {
$this->model_checkout_order->addHistory($order_info['order_id'], $this->config->get('payment_hutko_new_order_status_id'), $this->language->get('text_initiated_payment'), false);
}
@@ -66,8 +60,6 @@ class Hutko extends \Opencart\System\Engine\Controller {
} else {
$err = $response['response']['error_message'] ?? $this->language->get('error_api_communication');
$json['error'] = $err;
// Log Failure
$this->model_extension_hutko_payment_hutko->logTransaction(
$order_info['order_id'],
$hutko_ref,
@@ -165,8 +157,21 @@ class Hutko extends \Opencart\System\Engine\Controller {
}
}
private function validate($data) {
$sig = $data['signature'] ?? '';
unset($data['signature'], $data['response_signature_string']);
return hash_equals($this->sign($data), $sig);
}
// =========================================================================
// SHARED LOGIC START
// MAINTENANCE WARNING: Keep synchronized with Admin Controller
// =========================================================================
private function buildRequest($order, $hutko_ref) {
// Logic same as before, but using passed $hutko_ref
$products_data = $this->getProducts($order['order_id'], $order);
$total_products_sum = 0;
@@ -196,6 +201,10 @@ class Hutko extends \Opencart\System\Engine\Controller {
if ($amount_val < 0.01) $amount_val = 0.01;
$total_cents = (int)round($amount_val * 100);
// Catalog side URLs are simple
$response_url = $this->url->link('checkout/success', 'language=' . $this->config->get('config_language'), true);
$callback_url = $this->url->link('extension/hutko/payment/hutko.callback', '', true);
$reservation_data = [
"cms_name" => "OpenCart",
"cms_version" => VERSION,
@@ -214,8 +223,8 @@ class Hutko extends \Opencart\System\Engine\Controller {
'amount' => $total_cents,
'currency' => $order['currency_code'],
'order_desc' => 'Order #' . $order['order_id'],
'response_url' => $this->url->link('checkout/success', 'language=' . $this->config->get('config_language'), true),
'server_callback_url' => $this->url->link('extension/hutko/payment/hutko.callback', '', true),
'response_url' => $response_url,
'server_callback_url' => $callback_url,
'sender_email' => $order['email'],
'reservation_data' => base64_encode(json_encode($reservation_data))
];
@@ -224,8 +233,6 @@ class Hutko extends \Opencart\System\Engine\Controller {
return $data;
}
// Helper functions (getProducts, sign, validate, api, logOC) remain the same...
// Just ensure logOC uses file log for debug, not DB log.
private function getProducts(int $order_id, array $order_info): array {
$products_data = [];
$query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "order_product` WHERE `order_id` = '" . (int)$order_id . "'");
@@ -270,12 +277,6 @@ class Hutko extends \Opencart\System\Engine\Controller {
return sha1($str);
}
private function validate($data) {
$sig = $data['signature'] ?? '';
unset($data['signature'], $data['response_signature_string']);
return hash_equals($this->sign($data), $sig);
}
private function api($url, $data) {
if ($this->config->get('payment_hutko_save_logs')) $this->logOC('Req: ' . json_encode($data));
@@ -302,4 +303,7 @@ class Hutko extends \Opencart\System\Engine\Controller {
private function logOC($msg) {
$this->log->write("Hutko Payment: " . $msg);
}
// =========================================================================
// SHARED LOGIC END
// =========================================================================
}