aboutsummaryrefslogtreecommitdiffstats
path: root/public/catalog/controller/extension/payment/g2apay.php
diff options
context:
space:
mode:
Diffstat (limited to 'public/catalog/controller/extension/payment/g2apay.php')
-rw-r--r--public/catalog/controller/extension/payment/g2apay.php189
1 files changed, 189 insertions, 0 deletions
diff --git a/public/catalog/controller/extension/payment/g2apay.php b/public/catalog/controller/extension/payment/g2apay.php
new file mode 100644
index 0000000..fe66b9b
--- /dev/null
+++ b/public/catalog/controller/extension/payment/g2apay.php
@@ -0,0 +1,189 @@
+<?php
+class ControllerExtensionPaymentG2APay extends Controller {
+ public function index() {
+ $this->load->language('extension/payment/g2apay');
+
+ $data['action'] = $this->url->link('extension/payment/g2apay/checkout', '', true);
+
+ return $this->load->view('extension/payment/g2apay', $data);
+ }
+
+ public function checkout() {
+ $this->load->model('checkout/order');
+ $this->load->model('account/order');
+ $this->load->model('extension/payment/g2apay');
+
+ $order_info = $this->model_checkout_order->getOrder($this->session->data['order_id']);
+
+ $order_data = array();
+
+ $this->load->model('setting/extension');
+
+ $totals = array();
+ $taxes = $this->cart->getTaxes();
+ $total = 0;
+
+ // Because __call can not keep var references so we put them into an array.
+ $total_data = array(
+ 'totals' => &$totals,
+ 'taxes' => &$taxes,
+ 'total' => &$total
+ );
+
+ $i = 0;
+
+ $results = $this->model_setting_extension->getExtensions('total');
+
+ foreach ($results as $result) {
+ if ($this->config->get('total_' . $result['code'] . '_status')) {
+ $this->load->model('extension/total/' . $result['code']);
+
+ // We have to put the totals in an array so that they pass by reference.
+ $this->{'model_extension_total_' . $result['code']}->getTotal($total_data);
+
+ if (isset($order_data['totals'][$i])) {
+ if (strstr(strtolower($order_data['totals'][$i]['code']), 'total') === false) {
+ $item = new stdClass();
+ $item->sku = $order_data['totals'][$i]['code'];
+ $item->name = $order_data['totals'][$i]['title'];
+ $item->amount = number_format($order_data['totals'][$i]['value'], 2);
+ $item->qty = 1;
+ $item->id = $order_data['totals'][$i]['code'];
+ $item->price = $order_data['totals'][$i]['value'];
+ $item->url = $this->url->link('common/home', '', true);
+ $items[] = $item;
+ }
+
+ $i++;
+ }
+ }
+ }
+
+ $ordered_products = $this->model_account_order->getOrderProducts($this->session->data['order_id']);
+
+ foreach ($ordered_products as $product) {
+ $item = new stdClass();
+ $item->sku = $product['product_id'];
+ $item->name = $product['name'];
+ $item->amount = $product['price'] * $product['quantity'];
+ $item->qty = $product['quantity'];
+ $item->id = $product['product_id'];
+ $item->price = $product['price'];
+ $item->url = $this->url->link('product/product', 'product_id=' . $product['product_id'], true);
+ $items[] = $item;
+ }
+
+ if ($this->config->get('payment_g2apay_environment') == 1) {
+ $url = 'https://checkout.pay.g2a.com/index/createQuote';
+ } else {
+ $url = 'https://checkout.test.pay.g2a.com/index/createQuote';
+ }
+
+ $order_total = number_format($order_info['total'], 2);
+
+ $string = $this->session->data['order_id'] . $order_total . $order_info['currency_code'] . html_entity_decode($this->config->get('payment_g2apay_secret'));
+
+ $fields = array(
+ 'api_hash' => $this->config->get('payment_g2apay_api_hash'),
+ 'hash' => hash('sha256', $string),
+ 'order_id' => $this->session->data['order_id'],
+ 'amount' => $order_total,
+ 'currency' => $order_info['currency_code'],
+ 'email' => $order_info['email'],
+ 'url_failure' => $this->url->link('checkout/failure'),
+ 'url_ok' => $this->url->link('extension/payment/g2apay/success'),
+ 'items' => json_encode($items)
+ );
+
+ $response_data = $this->model_extension_payment_g2apay->sendCurl($url, $fields);
+
+ $this->model_extension_payment_g2apay->logger($order_total);
+ $this->model_extension_payment_g2apay->logger($items);
+ $this->model_extension_payment_g2apay->logger($fields);
+
+ if ($response_data === false) {
+ $this->response->redirect($this->url->link('checkout/failure', '', true));
+ }
+
+ if (strtolower($response_data->status) != 'ok') {
+ $this->response->redirect($this->url->link('checkout/failure', '', true));
+ }
+
+ $this->model_extension_payment_g2apay->addG2aOrder($order_info);
+
+ if ($this->config->get('payment_g2apay_environment') == 1) {
+ $this->response->redirect('https://checkout.pay.g2a.com/index/gateway?token=' . $response_data->token);
+ } else {
+ $this->response->redirect('https://checkout.test.pay.g2a.com/index/gateway?token=' . $response_data->token);
+ }
+ }
+
+ public function success() {
+ $order_id = $this->session->data['order_id'];
+
+ if (isset($this->request->post['transaction_id'])) {
+ $g2apay_transaction_id = $this->request->post['transaction_id'];
+ } elseif (isset($this->request->get['transaction_id'])) {
+ $g2apay_transaction_id = $this->request->get['transaction_id'];
+ } else {
+ $g2apay_transaction_id = '';
+ }
+
+ $this->load->model('checkout/order');
+
+ $order_info = $this->model_checkout_order->getOrder($order_id);
+
+ if ($order_info) {
+ $this->load->model('extension/payment/g2apay');
+
+ $g2apay_order_info = $this->model_extension_payment_g2apay->getG2aOrder($order_id);
+
+ $this->model_extension_payment_g2apay->updateOrder($g2apay_order_info['g2apay_order_id'], $g2apay_transaction_id, 'payment', $order_info);
+
+ $this->model_checkout_order->addOrderHistory($order_id, $this->config->get('payment_g2apay_order_status_id'));
+ }
+
+ $this->response->redirect($this->url->link('checkout/success'));
+ }
+
+ public function ipn() {
+ $this->load->model('extension/payment/g2apay');
+ $this->model_extension_payment_g2apay->logger('ipn');
+
+ if (isset($this->request->get['token']) && hash_equals($this->config->get('payment_g2apay_secret_token'), $this->request->get['token'])) {
+ $this->model_extension_payment_g2apay->logger('token success');
+
+ if (isset($this->request->post['userOrderId'])) {
+ $g2apay_order = $this->model_extension_payment_g2apay->getG2aOrder($this->request->post['userOrderId']);
+
+ $string = $g2apay_order['g2apay_transaction_id'] . $g2apay_order['order_id'] . round($g2apay_order['total'], 2) . html_entity_decode($this->config->get('payment_g2apay_secret'));
+ $hash = hash('sha256', $string);
+ if($hash != $this->request->post['hash']){
+ $this->model_extension_payment_g2apay->logger('Hashes do not match, possible tampering!');
+ return;
+ }
+
+ switch ($this->request->post['status']) {
+ case 'complete':
+ $order_status_id = $this->config->get('payment_g2apay_complete_status_id');
+ break;
+ case 'rejected':
+ $order_status_id = $this->config->get('payment_g2apay_rejected_status_id');
+ break;
+ case 'canceled':
+ $order_status_id = $this->config->get('payment_g2apay_cancelled_status_id');
+ break;
+ case 'partial_refunded':
+ $order_status_id = $this->config->get('payment_g2apay_partially_refunded_status_id');
+ break;
+ case 'refunded':
+ $order_status_id = $this->config->get('payment_g2apay_refunded_status_id');
+ break;
+ }
+
+ $this->load->model('checkout/order');
+ $this->model_checkout_order->addOrderHistory($this->request->post['userOrderId'], $order_status_id);
+ }
+ }
+ }
+}