Skip to content

Commit

Permalink
Working on PayPal and Opayo subscription extensions
Browse files Browse the repository at this point in the history
  • Loading branch information
TheCartpenter committed Jan 20, 2024
1 parent 8094a9a commit f213e1f
Show file tree
Hide file tree
Showing 17 changed files with 634 additions and 265 deletions.
70 changes: 42 additions & 28 deletions upload/admin/controller/extension/payment/paypal.php
Original file line number Diff line number Diff line change
Expand Up @@ -2235,7 +2235,7 @@ public function refundPayment(): void {

$this->load->model('extension/payment/paypal');

$order_id = $this->request->post['order_id'];
$order_id = (int)$this->request->post['order_id'];
$transaction_id = $this->request->post['transaction_id'];

$_config = new Config();
Expand Down Expand Up @@ -2315,63 +2315,73 @@ public function refundPayment(): void {
}

/**
* Recurring Buttons
* Subscription Buttons
*
* @return string
*/
public function recurringButtons(): string {
public function subscriptionButtons(): string {
$content = '';

if ($this->config->get('payment_paypal_status') && !empty($this->request->get['order_recurring_id'])) {
if ($this->config->get('payment_paypal_status')) {
$this->load->language('extension/payment/paypal');

$this->load->model('extension/other/recurring');
$this->load->model('extension/payment/paypal');

if (!empty($this->request->get['order_id'])) {
$order_id = (int)$this->request->get['order_id'];
} else {
$order_id = 0;
}

$data['order_recurring_id'] = $this->request->get['order_recurring_id'];
$data['order_id'] = $order_id;

$order_recurring_info = $this->model_extension_other_recurring->getRecurring($data['order_recurring_id']);
$order_subscription_info = $this->model_extension_payment_paypal->getPayPalOrderSubscription($order_id);

if ($order_recurring_info) {
$data['recurring_status'] = $order_recurring_info['status'];
if ($order_subscription_info) {
$data['subscription_status'] = $order_subscription_info['status'];

$data['info_url'] = str_replace('&', '&', $this->url->link('extension/payment/paypal/getRecurringInfo', 'user_token=' . $this->session->data['user_token'] . '&order_recurring_id=' . $data['order_recurring_id'], true));
$data['enable_url'] = str_replace('&', '&', $this->url->link('extension/payment/paypal/enableRecurring', 'user_token=' . $this->session->data['user_token'], true));
$data['disable_url'] = str_replace('&', '&', $this->url->link('extension/payment/paypal/disableRecurring', 'user_token=' . $this->session->data['user_token'], true));
$data['info_url'] = str_replace('&', '&', $this->url->link('extension/payment/paypal/getRecurringInfo', 'user_token=' . $this->session->data['user_token'] . '&order_id=' . $order_id, true));
$data['enable_url'] = str_replace('&', '&', $this->url->link('extension/payment/paypal/enableSubscription', 'user_token=' . $this->session->data['user_token'], true));
$data['disable_url'] = str_replace('&', '&', $this->url->link('extension/payment/paypal/disableSubscription', 'user_token=' . $this->session->data['user_token'], true));

$content = $this->load->view('extension/payment/paypal/recurring', $data);
$content = $this->load->view('extension/payment/paypal/subscription', $data);
}
}

return $content;
}

/**
* Get Recurring Info
* Get Subscription Info
*
* @return void
*/
public function getRecurringInfo(): void {
$this->response->setOutput($this->recurringButtons());
public function getSubscriptionInfo(): void {
$this->response->setOutput($this->subscriptionButtons());
}

/**
* Enable Recurring
* Enable Subscription
*
* @return void
*/
public function enableRecurring(): void {
public function enableSubscription(): void {
$json = [];

if ($this->config->get('payment_paypal_status') && !empty($this->request->post['order_recurring_id'])) {
if ($this->config->get('payment_paypal_status')) {
$this->load->language('extension/payment/paypal');

$this->load->model('extension/payment/paypal');

$order_recurring_id = $this->request->post['order_recurring_id'];
if (!empty($this->request->get['order_id'])) {
$order_id = (int)$this->request->get['order_id'];
} else {
$order_id = 0;
}

$this->model_extension_payment_paypal->editOrderRecurringStatus($order_recurring_id, 1);
$this->model_extension_payment_paypal->editOrderSubscriptionStatus($order_id, 1);

$json['success'] = $this->language->get('success_enable_recurring');
$json['success'] = $this->language->get('success_enable_subscription');
}

$json['error'] = $this->error;
Expand All @@ -2381,23 +2391,27 @@ public function enableRecurring(): void {
}

/**
* Disable Recurring
* Disable Subscription
*
* @return void
*/
public function disableRecurring(): void {
public function disableSubscription(): void {
$json = [];

if ($this->config->get('payment_paypal_status') && !empty($this->request->post['order_recurring_id'])) {
if ($this->config->get('payment_paypal_status')) {
$this->load->language('extension/payment/paypal');

$this->load->model('extension/payment/paypal');

$order_recurring_id = $this->request->post['order_recurring_id'];
if (!empty($this->request->get['order_id'])) {
$order_id = (int)$this->request->get['order_id'];
} else {
$order_id = 0;
}

$this->model_extension_payment_paypal->editOrderRecurringStatus($order_recurring_id, 2);
$this->model_extension_payment_paypal->editOrderRecurringStatus($order_id, 2);

Check failure on line 2412 in upload/admin/controller/extension/payment/paypal.php

View workflow job for this annotation

GitHub Actions / tests (8.3)

Call to an undefined method Proxy<ModelExtensionPaymentPayPal>::editOrderRecurringStatus().

$json['success'] = $this->language->get('success_disable_recurring');
$json['success'] = $this->language->get('success_disable_subscription');
}

$json['error'] = $this->error;
Expand Down
8 changes: 4 additions & 4 deletions upload/admin/language/en-gb/extension/payment/paypal.php
Original file line number Diff line number Diff line change
Expand Up @@ -297,8 +297,8 @@
$_['button_reauthorize_payment'] = 'Reauthorize';
$_['button_void_payment'] = 'Void';
$_['button_refund_payment'] = 'Refund';
$_['button_enable_recurring'] = 'Enable Recurring';
$_['button_disable_recurring'] = 'Disable Recurring';
$_['button_enable_subscription'] = 'Enable Subscription';
$_['button_disable_subscription'] = 'Disable Subscription';

// Success
$_['success_save'] = 'Success: You have modified PayPal!';
Expand All @@ -309,8 +309,8 @@
$_['success_reauthorize_payment'] = 'Success: Payment authorization was reauthorized.';
$_['success_void_payment'] = 'Success: Payment authorization was voided.';
$_['success_refund_payment'] = 'Success: Payment capture was refunded.';
$_['success_enable_recurring'] = 'Success: Recurring payment was enabled.';
$_['success_disable_recurring'] = 'Success: Recurring payment was disabled.';
$_['success_enable_subscription'] = 'Success: Subscription payment was enabled.';
$_['success_disable_subscription'] = 'Success: Subscription payment was disabled.';

// Error
$_['error_permission'] = 'Warning: You do not have permission to modify payment PayPal!';
Expand Down
27 changes: 13 additions & 14 deletions upload/admin/model/extension/payment/opayo.php
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,13 @@ class ModelExtensionPaymentOpayo extends Model {
* @return void
*/
public function install(): void {
$this->db->query("
CREATE TABLE IF NOT EXISTS `" . DB_PREFIX . "opayo_order` (
$this->db->query("CREATE TABLE IF NOT EXISTS `" . DB_PREFIX . "opayo_order` (
`opayo_order_id` int(11) NOT NULL AUTO_INCREMENT,
`order_id` int(11) NOT NULL,
`vps_tx_id` varchar(50),
`vendor_tx_code` varchar(50) NOT NULL,
`security_key` varchar(50) NOT NULL,
`tx_auth_no` varchar(50),
`tx_auth_no` varchar(50),
`release_status` int(1) DEFAULT NULL,
`void_status` int(1) DEFAULT NULL,
`settle_type` int(1) DEFAULT NULL,
Expand All @@ -32,35 +31,35 @@ public function install(): void {
KEY (`order_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;");

$this->db->query("
CREATE TABLE IF NOT EXISTS `" . DB_PREFIX . "opayo_order_transaction` (
$this->db->query("CREATE TABLE IF NOT EXISTS `" . DB_PREFIX . "opayo_order_transaction` (
`opayo_order_transaction_id` int(11) NOT NULL AUTO_INCREMENT,
`opayo_order_id` int(11) NOT NULL,
`opayo_order_id` int(11) NOT NULL,
`type` enum('auth', 'payment', 'rebate', 'void') DEFAULT NULL,
`amount` decimal(15,4) NOT NULL,
`date_added` datetime NOT NULL,
PRIMARY KEY (`opayo_order_transaction_id`),
KEY (`opayo_order_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;");

$this->db->query("
CREATE TABLE IF NOT EXISTS `" . DB_PREFIX . "opayo_order_subscription` (
`opayo_order_subscription_id` int(11) NOT NULL AUTO_INCREMENT,
$this->db->query("CREATE TABLE IF NOT EXISTS `" . DB_PREFIX . "opayo_order_subscription` (
`opayo_subscription_id` int(11) NOT NULL AUTO_INCREMENT,
`order_id` int(11) NOT NULL,
`subscription_id` int(11) NOT NULL,
`vps_tx_id` varchar(50),
`vendor_tx_code` varchar(50) NOT NULL,
`security_key` varchar(50) NOT NULL,
`tx_auth_no` varchar(50),
`tx_auth_no` varchar(50),
`next_payment` datetime NOT NULL,
`trial_end` datetime DEFAULT NULL,
`subscription_end` datetime DEFAULT NULL,
`currency_code` varchar(3) NOT NULL,
`total` decimal(15,4) NOT NULL,
`status` tinyint(1) NOT NULL,
`date_added` datetime NOT NULL,
`date_modified` datetime NOT NULL,
PRIMARY KEY (`opayo_order_subscription_id`),
KEY (`order_id`)
PRIMARY KEY (`opayo_subscription_id`),
KEY (`order_id`),
KEY (`subscription_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;");

$this->db->query("
Expand Down Expand Up @@ -391,8 +390,8 @@ public function sendCurl($url, $payment_data) {
/**
* Log
*
* @param string $title
* @param mixed $data
* @param string $title
* @param mixed $data
*
* @return void
*/
Expand Down
54 changes: 45 additions & 9 deletions upload/admin/model/extension/payment/paypal.php
Original file line number Diff line number Diff line change
Expand Up @@ -200,8 +200,14 @@ public function getPayPalOrder(int $order_id): array {
}
}

public function editOrderRecurringStatus(int $subscription_id, int $status): void {
$this->db->query("UPDATE `" . DB_PREFIX . "order_subscription` SET `status` = '" . (int)$status . "' WHERE `subscription_id` = '" . (int)$subscription_id . "'");
public function getPayPalOrderSubscription(int $order_id): array {
$query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "paypal_checkout_integration_order_subscription` WHERE `order_id` = '" . (int)$order_id . "'");

return $query->row;
}

public function editOrderSubscriptionStatus(int $order_id, int $status): void {
$this->db->query("UPDATE `" . DB_PREFIX . "paypal_checkout_integration_order_subscription` SET `status` = '" . (int)$status . "' WHERE `order_id` = '" . (int)$order_id . "'");
}

public function setAgreeStatus(): void {
Expand Down Expand Up @@ -285,12 +291,42 @@ public function log(array $data, ?string $title = null): void {
}

public function install(): void {
$this->db->query("CREATE TABLE IF NOT EXISTS `" . DB_PREFIX . "paypal_checkout_integration_order` (`order_id` int(11) NOT NULL, `transaction_id` varchar(20) NOT NULL, `transaction_status` varchar(20) NULL, `payment_method` varchar(20) NULL, `vault_id` varchar(50) NULL, `vault_customer_id` varchar(50) NULL, `environment` varchar(20) NULL, PRIMARY KEY (`order_id`, `transaction_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci");
$this->db->query("CREATE TABLE IF NOT EXISTS `" . DB_PREFIX . "paypal_checkout_integration_order_recurring` (`paypal_order_recurring_id` int(11) NOT NULL AUTO_INCREMENT, `order_id` int(11) NOT NULL, `order_recurring_id` int(11) NOT NULL, `date_added` datetime NOT NULL, `date_modified` datetime NOT NULL, `next_payment` datetime NOT NULL, `trial_end` datetime DEFAULT NULL, `subscription_end` datetime DEFAULT NULL, `currency_code` CHAR(3) NOT NULL, `total` decimal(10, 2) NOT NULL, PRIMARY KEY (`paypal_order_recurring_id`), KEY (`order_id`), KEY (`order_recurring_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci");
}

public function uninstall(): void {
$this->db->query("DROP TABLE IF EXISTS `" . DB_PREFIX . "paypal_checkout_integration_order`");
$this->db->query("DROP TABLE IF EXISTS `" . DB_PREFIX . "paypal_checkout_integration_order_recurring`");
$this->db->query("CREATE TABLE IF NOT EXISTS `" . DB_PREFIX . "paypal_checkout_integration_order` (
`order_id` int(11) NOT NULL,
`transaction_id` varchar(20) NOT NULL,
`transaction_status` varchar(20) NULL,
`payment_method` varchar(20) NULL,
`vault_id` varchar(50) NULL,
`vault_customer_id` varchar(50) NULL,
`environment` varchar(20) NULL,
PRIMARY KEY (`order_id`, `transaction_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci");

$this->db->query("CREATE TABLE IF NOT EXISTS `" . DB_PREFIX . "paypal_checkout_integration_order_subscription` (
`paypal_subscription_id` int(11) NOT NULL AUTO_INCREMENT,
`order_id` int(11) NOT NULL,
`date_added` datetime NOT NULL,
`date_modified` datetime NOT NULL,
`next_payment` datetime NOT NULL,
`trial_end` datetime DEFAULT NULL,
`subscription_end` datetime DEFAULT NULL,
`currency_code` varchar(3) NOT NULL,
`total` decimal(10, 2) NOT NULL,
`status` tinyin(1) NOT NULL,
PRIMARY KEY (`paypal_subscription_id`),
KEY (`order_id`),
KEY (`subscription_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci");

$this->db->query("
CREATE TABLE IF NOT EXISTS `" . DB_PREFIX . "order_subscription_transaction` (
`order_subscription_transaction_id` int(11) NOT NULL AUTO_INCREMENT,
`order_id` int(11) NOT NULL,
`reference` varchar(255) NOT NULL,
`type` tinyint(1) NOT NULL,
`amount` decimal(15,4) NOT NULL,
`date_added` datetime NOT NULL,
PRIMARY KEY (`order_subscription_transaction_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;");
}
}
6 changes: 3 additions & 3 deletions upload/admin/model/extension/payment/squareup.php
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ public function createTables(): void {
PRIMARY KEY (`squareup_transaction_id`),
KEY `order_id` (`order_id`),
KEY `transaction_id` (`transaction_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;");
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;");

$this->db->query("CREATE TABLE IF NOT EXISTS `" . DB_PREFIX . "squareup_token` (
`squareup_token_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
Expand All @@ -169,14 +169,14 @@ public function createTables(): void {
KEY `getCards` (`customer_id`, `sandbox`),
KEY `verifyCardCustomer` (`squareup_token_id`, `customer_id`),
KEY `cardExists` (`customer_id`, `brand`, `ends_in`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8");
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;");

$this->db->query("CREATE TABLE IF NOT EXISTS `" . DB_PREFIX . "squareup_customer` (
`customer_id` int(11) NOT NULL,
`sandbox` tinyint(1) NOT NULL,
`square_customer_id` varchar(32) NOT NULL,
PRIMARY KEY (`customer_id`, `sandbox`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8");
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;");
}

/**
Expand Down
6 changes: 3 additions & 3 deletions upload/admin/view/template/extension/payment/opayo/order.twig
Original file line number Diff line number Diff line change
Expand Up @@ -117,9 +117,9 @@ $('#button-void').click(function() {
if (data.error == false) {
html = '';
html += '<tr>';
html += '<td class="text-left">' + data.data.date_added + '</td>';
html += '<td class="text-left">void</td>';
html += '<td class="text-left">0.00</td>';
html += ' <td class="text-left">' + data.data.date_added + '</td>';
html += ' <td class="text-left">void</td>';
html += ' <td class="text-left">0.00</td>';
html += '</tr>';
$('.void-text').text('{{ text_yes }}');
Expand Down
Loading

0 comments on commit f213e1f

Please sign in to comment.