aboutsummaryrefslogtreecommitdiffstats
path: root/public/admin/model/extension/payment/g2apay.php
diff options
context:
space:
mode:
Diffstat (limited to 'public/admin/model/extension/payment/g2apay.php')
-rw-r--r--public/admin/model/extension/payment/g2apay.php145
1 files changed, 145 insertions, 0 deletions
diff --git a/public/admin/model/extension/payment/g2apay.php b/public/admin/model/extension/payment/g2apay.php
new file mode 100644
index 0000000..83ea7b8
--- /dev/null
+++ b/public/admin/model/extension/payment/g2apay.php
@@ -0,0 +1,145 @@
+<?php
+
+class ModelExtensionPaymentG2aPay extends Model {
+
+ public function install() {
+ $this->db->query("
+ CREATE TABLE `" . DB_PREFIX . "g2apay_order` (
+ `g2apay_order_id` INT(11) NOT NULL AUTO_INCREMENT,
+ `order_id` int(11) NOT NULL,
+ `g2apay_transaction_id` varchar(255) NOT NULL,
+ `date_added` DATETIME NOT NULL,
+ `modified` DATETIME NOT NULL,
+ `refund_status` INT(1) DEFAULT NULL,
+ `currency_code` CHAR(3) NOT NULL,
+ `total` DECIMAL( 10, 2 ) NOT NULL,
+ KEY `g2apay_transaction_id` (`g2apay_transaction_id`),
+ PRIMARY KEY `g2apay_order_id` (`g2apay_order_id`)
+ ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
+ ");
+
+ $this->db->query("
+ CREATE TABLE IF NOT EXISTS `" . DB_PREFIX . "g2apay_order_transaction` (
+ `g2apay_order_transaction_id` INT(11) NOT NULL AUTO_INCREMENT,
+ `g2apay_order_id` INT(11) NOT NULL,
+ `date_added` DATETIME NOT NULL,
+ `type` ENUM('payment', 'refund') DEFAULT NULL,
+ `amount` DECIMAL( 10, 2 ) NOT NULL,
+ PRIMARY KEY (`g2apay_order_transaction_id`)
+ ) ENGINE=MyISAM DEFAULT COLLATE=utf8_general_ci;
+ ");
+ }
+
+ public function uninstall() {
+ $this->db->query("DROP TABLE IF EXISTS `" . DB_PREFIX . "g2apay_order`;");
+ $this->db->query("DROP TABLE IF EXISTS `" . DB_PREFIX . "g2apay_order_transaction`;");
+ }
+
+ public function getOrder($order_id) {
+
+ $qry = $this->db->query("SELECT * FROM `" . DB_PREFIX . "g2apay_order` WHERE `order_id` = '" . (int)$order_id . "' LIMIT 1");
+
+ if ($qry->num_rows) {
+ $order = $qry->row;
+ $order['transactions'] = $this->getTransactions($order['g2apay_order_id'], $qry->row['currency_code']);
+ return $order;
+ } else {
+ return false;
+ }
+ }
+
+ public function getTotalReleased($g2apay_order_id) {
+ $query = $this->db->query("SELECT SUM(`amount`) AS `total` FROM `" . DB_PREFIX . "g2apay_order_transaction` WHERE `g2apay_order_id` = '" . (int)$g2apay_order_id . "' AND (`type` = 'payment' OR `type` = 'refund')");
+
+ return (double)$query->row['total'];
+ }
+
+ public function refund($g2apay_order, $amount) {
+ if (!empty($g2apay_order) && $g2apay_order['refund_status'] != 1) {
+ if ($this->config->get('payment_g2apay_environment') == 1) {
+ $url = 'https://pay.g2a.com/rest/transactions/' . $g2apay_order['g2apay_transaction_id'];
+ } else {
+ $url = 'https://www.test.pay.g2a.com/rest/transactions/' . $g2apay_order['g2apay_transaction_id'];
+ }
+
+ $refunded_amount = round($amount, 2);
+
+ $string = $g2apay_order['g2apay_transaction_id'] . $g2apay_order['order_id'] . round($g2apay_order['total'], 2) . $refunded_amount . html_entity_decode($this->config->get('payment_g2apay_secret'));
+ $hash = hash('sha256', $string);
+
+ $fields = array(
+ 'action' => 'refund',
+ 'amount' => $refunded_amount,
+ 'hash' => $hash,
+ );
+
+ return $this->sendCurl($url, $fields);
+ } else {
+ return false;
+ }
+ }
+
+ public function updateRefundStatus($g2apay_order_id, $status) {
+ $this->db->query("UPDATE `" . DB_PREFIX . "g2apay_order` SET `refund_status` = '" . (int)$status . "' WHERE `g2apay_order_id` = '" . (int)$g2apay_order_id . "'");
+ }
+
+ private function getTransactions($g2apay_order_id, $currency_code) {
+ $query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "g2apay_order_transaction` WHERE `g2apay_order_id` = '" . (int)$g2apay_order_id . "'");
+
+ $transactions = array();
+ if ($query->num_rows) {
+ foreach ($query->rows as $row) {
+ $row['amount'] = $this->currency->format($row['amount'], $currency_code, true, true);
+ $transactions[] = $row;
+ }
+ return $transactions;
+ } else {
+ return false;
+ }
+ }
+
+ public function addTransaction($g2apay_order_id, $type, $total) {
+ $this->db->query("INSERT INTO `" . DB_PREFIX . "g2apay_order_transaction` SET `g2apay_order_id` = '" . (int)$g2apay_order_id . "',`date_added` = now(), `type` = '" . $this->db->escape($type) . "', `amount` = '" . (double)$total . "'");
+ }
+
+ public function getTotalRefunded($g2apay_order_id) {
+ $query = $this->db->query("SELECT SUM(`amount`) AS `total` FROM `" . DB_PREFIX . "g2apay_order_transaction` WHERE `g2apay_order_id` = '" . (int)$g2apay_order_id . "' AND 'refund'");
+
+ return (double)$query->row['total'];
+ }
+
+ public function sendCurl($url, $fields) {
+ $curl = curl_init($url);
+ curl_setopt($curl, CURLOPT_URL, $url);
+ curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
+ curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");
+ curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($fields));
+
+ $auth_hash = hash('sha256', $this->config->get('payment_g2apay_api_hash') . $this->config->get('payment_g2apay_username') . html_entity_decode($this->config->get('payment_g2apay_secret')));
+ $authorization = $this->config->get('payment_g2apay_api_hash') . ";" . $auth_hash;
+ curl_setopt(
+ $curl, CURLOPT_HTTPHEADER, array(
+ "Authorization: " . $authorization
+ )
+ );
+
+ $response = json_decode(curl_exec($curl));
+
+ curl_close($curl);
+ if (is_object($response)) {
+ return (string)$response->status;
+ } else {
+ return str_replace('"', "", $response);
+ }
+ }
+
+ public function logger($message) {
+ if ($this->config->get('payment_g2apay_debug') == 1) {
+ $log = new Log('g2apay.log');
+ $backtrace = debug_backtrace();
+ $log->write('Origin: ' . $backtrace[6]['class'] . '::' . $backtrace[6]['function']);
+ $log->write(print_r($message, 1));
+ }
+ }
+
+}