Skip to content

Commit 08b48ef

Browse files
committed
feat: first release
0 parents  commit 08b48ef

File tree

10 files changed

+439
-0
lines changed

10 files changed

+439
-0
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
.idea/
2+
.vscode/
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
<?php
2+
3+
namespace Opencart\Admin\Controller\Extension\SimPay\Payment;
4+
5+
class SimPay extends \Opencart\System\Engine\Controller
6+
{
7+
private const SIMPAY_VERSION = '1.0.0';
8+
private $error = [];
9+
10+
public function index(): void
11+
{
12+
$this->load->language('extension/simpay/payment/simpay');
13+
$this->document->setTitle($this->language->get('heading_title'));
14+
15+
$this->load->model('setting/setting');
16+
17+
$data['webhook_url'] = 'URL_SHOP/index.php?route=extension/simpay/payment/simpaywebhook';
18+
19+
if ($this->request->server['REQUEST_METHOD'] == 'POST' && $this->validate()) {
20+
$this->model_setting_setting->editSetting('payment_simpay', [
21+
'payment_simpay_bearer' => $this->request->post['payment_simpay_bearer'],
22+
'payment_simpay_service_id' => $this->request->post['payment_simpay_service_id'],
23+
'payment_simpay_service_hash' => $this->request->post['payment_simpay_service_hash'],
24+
'payment_simpay_status' => $this->request->post['payment_simpay_status'],
25+
'payment_simpay_approved_status_id' => $this->request->post['payment_simpay_approved_status_id'],
26+
]);
27+
$this->session->data['success'] = $this->language->get('simpay_config_updated');
28+
$this->response->redirect($this->url->link('marketplace/extension', 'user_token=' . $this->session->data['user_token'] . '&type=payment', true));
29+
}
30+
31+
$data['error_warning'] = $this->error['warning'] ?? '';
32+
33+
$data['action'] = $this->url->link('extension/simpay/payment/simpay', 'user_token=' . $this->session->data['user_token'], true);
34+
$data['cancel'] = $this->url->link('marketplace/extension', 'user_token=' . $this->session->data['user_token'] . '&type=payment', true);
35+
36+
$data['payment_simpay_bearer'] = $this->config->get('payment_simpay_bearer') ?? '';
37+
$data['payment_simpay_service_id'] = $this->config->get('payment_simpay_service_id') ?? '';
38+
$data['payment_simpay_service_hash'] = $this->config->get('payment_simpay_service_hash') ?? '';
39+
$data['payment_simpay_status'] = $this->config->get('payment_simpay_status') ?? 0;
40+
$data['payment_simpay_approved_status_id'] = $this->config->get('payment_simpay_approved_status_id') ?? 0;
41+
42+
$data['header'] = $this->load->controller('common/header');
43+
$data['column_left'] = $this->load->controller('common/column_left');
44+
$data['footer'] = $this->load->controller('common/footer');
45+
$data['heading_title'] = $this->language->get('simpay_text_edit');
46+
47+
$data['simpay_ipn_text'] = $this->language->get('simpay_ipn_text');
48+
$data['simpay_entry_bearer'] = $this->language->get('simpay_entry_bearer');
49+
$data['simpay_entry_bearer_description'] = $this->language->get('simpay_entry_bearer_description');
50+
$data['simpay_entry_service_id'] = $this->language->get('simpay_entry_service_id');
51+
$data['simpay_entry_service_id_description'] = $this->language->get('simpay_entry_service_id_description');
52+
$data['simpay_entry_service_hash'] = $this->language->get('simpay_entry_service_hash');
53+
$data['simpay_entry_service_hash_description'] = $this->language->get('simpay_entry_service_hash_description');
54+
$data['simpay_entry_status'] = $this->language->get('simpay_entry_status');
55+
$version = $this->simpay_plugin_version_message();
56+
$data['simpay_save'] = $this->language->get('simpay_save');
57+
$data['simpay_version_actual'] = $version[0];
58+
$data['simpay_version_message'] = $version[1];
59+
60+
$data['simpay_enabled'] = $this->language->get('simpay_enabled');
61+
$data['simpay_disabled'] = $this->language->get('simpay_disabled');
62+
63+
$this->load->model('localisation/order_status');
64+
65+
$data['order_statuses'] = $this->model_localisation_order_status->getOrderStatuses();
66+
$data['payment_simpay_approved_status'] = $this->language->get('payment_simpay_approved_status');
67+
68+
$this->response->setOutput($this->load->view('extension/simpay/payment/simpay', $data));
69+
}
70+
71+
private function validate(): bool
72+
{
73+
if (!$this->user->hasPermission('modify', 'extension/simpay/payment/simpay')) {
74+
$this->error['warning'] = $this->language->get('simpay_error_permission');
75+
}
76+
77+
if (
78+
empty($this->request->post['payment_simpay_bearer']) ||
79+
empty($this->request->post['payment_simpay_service_id']) ||
80+
empty($this->request->post['payment_simpay_service_hash']) ||
81+
empty($this->request->post['payment_simpay_status']) ||
82+
empty($this->request->post['payment_simpay_approved_status_id'])
83+
) {
84+
$this->error['warning'] = $this->language->get('simpay_error_validation');
85+
}
86+
87+
return !$this->error;
88+
}
89+
90+
private function simpay_plugin_version_message()
91+
{
92+
$ch = curl_init();
93+
curl_setopt($ch, CURLOPT_URL, 'https://api.simpay.pl/ecommerce/plugin/opencart/version');
94+
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
95+
$response = curl_exec($ch);
96+
curl_close($ch);
97+
98+
$response = json_decode($response, true);
99+
100+
if (version_compare(($response['data']['version'] ?? '1.0.0'), self::SIMPAY_VERSION, '>')) {
101+
return [false, sprintf($this->language->get('simpay_version_old'), self::SIMPAY_VERSION, ($response['data']['version'] ?? '1.0.0'), $response['data']['zip_url'] ?? '')];
102+
}
103+
104+
return [true, $this->language->get('simpay_version_current') . self::SIMPAY_VERSION];
105+
}
106+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?php
2+
3+
$_['heading_title'] = 'SimPay.pl Przelewy / BLIK';
4+
$_['simpay_extension'] = 'Rozszerzenia';
5+
$_['simpay_config_updated'] = 'Ustawienia zostały zapisane pomyślnie.';
6+
$_['simpay_text_edit'] = 'Edycja bramki SimPay Przelewy / BLIK';
7+
$_['simpay_entry_bearer'] = 'Hasło / Bearer Token';
8+
$_['simpay_entry_bearer_description'] = 'Zakładka Konto Klienta > API > (WYBRANY KLUCZ) > "Szczegóły"';
9+
$_['simpay_entry_service_id'] = 'ID usługi';
10+
$_['simpay_entry_service_id_description'] = 'Zakładka Płatności online > Usługi > (WYBRANA USŁUGA) > "Szczegóły"';
11+
$_['simpay_entry_service_hash'] = 'Klucz do sygnatury IPN usługi';
12+
$_['simpay_entry_service_hash_description'] = 'Zakładka Płatności online > Usługi > (WYBRANA USŁUGA) > "Szczegóły" > "Ustawienia usługi"';
13+
$_['simpay_entry_status'] = 'Status płatności';
14+
$_['simpay_error_permission'] = 'Brak uprawnień do edycji tego modułu!';
15+
$_['simpay_error_validation'] = 'Jedno lub więcej z wymaganych parametrów nie zostało uzupełnione!';
16+
$_['simpay_ipn_text'] = 'W Panelu SimPay ustaw adres ipn na:';
17+
$_['simpay_version_current'] = 'Twoja wtyczka jest aktualna. Wersja: ';
18+
$_['simpay_version_old'] = 'Dostępna jest nowa wersja wtyczki OpenCart SimPay. Twoja wersja: %s, nowa wersja: %s. Możesz pobrać wtyczkę bezpośrednio <a href="%s" target="_blank">tutaj</a>.';
19+
$_['simpay_save'] = 'Zapisz';
20+
$_['simpay_enabled'] = 'Włączone';
21+
$_['simpay_disabled'] = 'Wyłączone';
22+
$_['payment_simpay_approved_status'] = 'Status zamówienia przy opłaconej transakcji';
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
{{ header }}
2+
{{ column_left }}
3+
4+
<div class="container mt-3">
5+
<h1>{{ heading_title }}</h1>
6+
7+
<form action="{{ action }}" method="post">
8+
9+
<div class="alert alert-info">
10+
{{ simpay_ipn_text }}<br>
11+
<b><u>{{ webhook_url }}</u></b>
12+
</div>
13+
14+
{% if simpay_version_actual %}
15+
<div class="alert alert-success">
16+
{{ simpay_version_message }}
17+
</div>
18+
{% else %}
19+
<div class="alert alert-warning">
20+
{{ simpay_version_message }}
21+
</div>
22+
{% endif %}
23+
24+
{% if error_warning %}
25+
<div class="alert alert-danger">
26+
{{ error_warning }}
27+
</div>
28+
{% endif %}
29+
30+
<div class="form-group mb-3">
31+
<label>{{ simpay_entry_bearer }}</label>
32+
<input type="text" name="payment_simpay_bearer" value="{{ payment_simpay_bearer }}" class="form-control" />
33+
<small>{{ simpay_entry_bearer_description }}</small>
34+
</div>
35+
36+
<div class="form-group mb-3">
37+
<label>{{ simpay_entry_service_id }}</label>
38+
<input type="text" name="payment_simpay_service_id" value="{{ payment_simpay_service_id }}" class="form-control" />
39+
<small>{{ simpay_entry_service_id_description }}</small>
40+
</div>
41+
42+
<div class="form-group mb-3">
43+
<label>{{ simpay_entry_service_hash }}</label>
44+
<input type="text" name="payment_simpay_service_hash" value="{{ payment_simpay_service_hash }}" class="form-control" />
45+
<small>{{ simpay_entry_service_hash_description }}</small>
46+
</div>
47+
48+
<div class="form-group mb-3">
49+
<label>{{ payment_simpay_approved_status }}</label>
50+
<select name="payment_simpay_approved_status_id" id="input-approved-status" class="form-select">
51+
{% for order_status in order_statuses %}
52+
<option value="{{ order_status.order_status_id }}"{% if order_status.order_status_id == payment_simpay_approved_status_id %} selected{% endif %}>{{ order_status.name }}</option>
53+
{% endfor %}
54+
</select>
55+
</div>
56+
57+
<div class="form-group mb-3">
58+
<label>{{ simpay_entry_status }}</label>
59+
<select name="payment_simpay_status" class="form-control">
60+
<option value="1" {% if payment_simpay_status %} selected {% endif %}>{{ simpay_enabled }}</option>
61+
<option value="0" {% if not payment_simpay_status %} selected {% endif %}>{{ simpay_disabled }}</option>
62+
</select>
63+
</div>
64+
65+
<button type="submit" class="btn btn-primary">{{ simpay_save }}</button>
66+
</form>
67+
</div>
68+
69+
{{ footer }}
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
<?php
2+
3+
namespace Opencart\Catalog\Controller\Extension\SimPay\Payment;
4+
5+
class SimPay extends \Opencart\System\Engine\Controller
6+
{
7+
public function index(): string
8+
{
9+
$this->load->language('extension/simpay/payment/simpay');
10+
11+
$data['action'] = $this->url->link('extension/simpay/payment/simpay|checkout', '', true);
12+
$data['message'] = $this->language->get('simpay_pay');
13+
14+
return $this->load->view('extension/simpay/payment/simpay', $data);
15+
}
16+
17+
public function checkout(): void
18+
{
19+
$this->load->model('checkout/order');
20+
$this->load->model('extension/simpay/payment/simpay');
21+
22+
$order_id = $this->session->data['order_id'];
23+
24+
if (empty($order_id)) {
25+
$this->response->redirect($this->url->link('checkout/cart', '', true));
26+
}
27+
28+
$order_info = $this->model_checkout_order->getOrder($order_id);
29+
$payload = array(
30+
'amount' => (float)$order_info['total'],
31+
'currency' => $order_info['currency_code'],
32+
'description' => 'Zamówienie #' . $order_info['order_id'] . ' - ' . $order_info['store_name'],
33+
'control' => (string)$order_info['order_id'],
34+
'customer' => array(
35+
'name' => substr($order_info['firstname'] . ' ' . $order_info['lastname'], 0, 64),
36+
'email' => $order_info['email'],
37+
),
38+
'antifraud' => array(
39+
'systemId' => !empty($order_info['customer_id']) ? $order_info['customer_id'] : null,
40+
),
41+
'returns' => array(
42+
'success' => $this->url->link('checkout/success'),
43+
'failure' => $this->url->link('checkout/failure'),
44+
),
45+
);
46+
47+
$bearer = $this->config->get('payment_simpay_bearer');
48+
$serviceId = $this->config->get('payment_simpay_service_id');
49+
50+
$ch = curl_init();
51+
curl_setopt($ch, CURLOPT_URL, sprintf('https://api.simpay.pl/payment/%s/transactions', $serviceId));
52+
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
53+
curl_setopt($ch, CURLOPT_POST, true);
54+
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
55+
'Authorization: Bearer ' . $bearer,
56+
'Content-Type: application/json',
57+
'Accept: application/json',
58+
'X-SIM-PLATFORM: opencart',
59+
'X-SIM-PLATFORM-VERSION: ' . VERSION,
60+
));
61+
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payload));
62+
63+
$response = curl_exec($ch);
64+
65+
if (curl_errno($ch)) {
66+
echo '<h3 style="color:red;">Wystąpił błąd podczas generowania płatności [SIMPAY001].</h3><h4>' . curl_error($ch) . ' ' . $response . '</p>';
67+
die();
68+
}
69+
70+
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
71+
if ((int)$httpCode < 200 || $httpCode >= 300) {
72+
echo '<h3 style="color:red;">Wystąpił błąd podczas generowania płatności [SIMPAY002].</h3><h4>' . $httpCode . ' ' . $response . '</p>';
73+
die();
74+
}
75+
76+
$json = json_decode($response, true);
77+
curl_close($ch);
78+
79+
$this->response->redirect($json['data']['redirectUrl']);
80+
}
81+
}

0 commit comments

Comments
 (0)