Skip to content

Commit

Permalink
More subscription work
Browse files Browse the repository at this point in the history
  • Loading branch information
TheCartpenter committed Jan 20, 2024
1 parent f35da0d commit db0ec8c
Show file tree
Hide file tree
Showing 12 changed files with 1,043 additions and 595 deletions.
28 changes: 14 additions & 14 deletions upload/admin/controller/extension/payment/paypal.php
Original file line number Diff line number Diff line change
Expand Up @@ -2305,20 +2305,20 @@ public function subscriptionButtons(): string {

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

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

$data['order_id'] = $order_id;
$data['order_subscription_id'] = $order_subscription_id;

$order_subscription_info = $this->model_extension_payment_paypal->getPayPalOrderSubscription($order_id);
$order_subscription_info = $this->model_extension_payment_paypal->getPayPalOrderSubscription($order_subscription_id);

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_id=' . $order_id, true));
$data['info_url'] = str_replace('&', '&', $this->url->link('extension/payment/paypal/getSubscriptionInfo', 'user_token=' . $this->session->data['user_token'] . '&order_subscription_id=' . $order_subscription_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));

Expand Down Expand Up @@ -2351,13 +2351,13 @@ public function enableSubscription(): void {

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

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

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

$json['success'] = $this->language->get('success_enable_subscription');
}
Expand All @@ -2381,13 +2381,13 @@ public function disableSubscription(): void {

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

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

$this->model_extension_payment_paypal->editOrderSubscriptionStatus($order_id, 2);
$this->model_extension_payment_paypal->editOrderSubscriptionStatus($order_subscription_id, 2);

$json['success'] = $this->language->get('success_disable_subscription');
}
Expand Down
7 changes: 4 additions & 3 deletions upload/admin/model/extension/payment/paypal.php
Original file line number Diff line number Diff line change
Expand Up @@ -299,20 +299,21 @@ public function install(): void {
`vault_id` varchar(50) NULL,
`vault_customer_id` varchar(50) NULL,
`environment` varchar(20) NULL,
`status` tinyint(1) NOT 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_subscription_id` int(11) NOT NULL,
`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,
`total` decimal(10, 2) NOT NULL,
PRIMARY KEY (`paypal_subscription_id`),
KEY (`order_id`),
KEY (`subscription_id`)
Expand All @@ -321,7 +322,7 @@ public function install(): void {
$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,
`order_subscription_id` int(11) NOT NULL,
`reference` varchar(255) NOT NULL,
`type` tinyint(1) NOT NULL,
`amount` decimal(15,4) NOT NULL,
Expand Down
120 changes: 103 additions & 17 deletions upload/catalog/controller/extension/payment/opayo.php
Original file line number Diff line number Diff line change
Expand Up @@ -341,19 +341,62 @@ public function confirm(): void {
$this->model_checkout_order->addHistory($this->session->data['order_id'], $setting['general']['order_status_id'], $message, false);

if ($setting['general']['transaction_method'] == 'PAYMENT') {
$subscriptions = $this->cart->getSubscriptions();
$subscription_products = $this->cart->getSubscriptions();

$order_products = $this->model_checkout_order->getProducts($this->session->data['order_id']);

$opayo_order_info = $this->model_extension_payment_opayo->getOrder($this->session->data['order_id']);
if (isset($this->request->server['HTTP_X_REAL_IP'])) {
$ip = $this->request->server['HTTP_X_REAL_IP'];
} elseif (isset($this->request->server['REMOTE_ADDR'])) {
$ip = $this->request->server['REMOTE_ADDR'];
} else {
$ip = '';
}

if (!empty($this->request->server['HTTP_X_FORWARDED_FOR'])) {
$forwarded_ip = $this->request->server['HTTP_X_FORWARDED_FOR'];
} elseif (!empty($this->request->server['HTTP_CLIENT_IP'])) {
$forwarded_ip = $this->request->server['HTTP_CLIENT_IP'];
} else {
$forwarded_ip = '';
}

if (isset($this->request->server['HTTP_USER_AGENT'])) {
$user_agent = $this->request->server['HTTP_USER_AGENT'];
} else {
$user_agent = '';
}

if (isset($this->request->server['HTTP_ACCEPT_LANGUAGE'])) {
$accept_language = $this->request->server['HTTP_ACCEPT_LANGUAGE'];
} else {
$accept_language = '';
}

// Loop through any products that are subscription items
foreach ($subscriptions as $item) {
foreach ($subscription_products as $item) {
foreach ($order_products as $order_product) {
$order_subscription = $this->model_checkout_order->getSubscription($this->session->data['order_id'], $order_product['order_product_id']);

if ($order_subscription && $item['product_id'] == $order_subscription['product_id'] && $order_subscription['product_id'] == $order_product['product_id']) {
$item['subscription']['name'] = $order_product['name'];
if ($order_subscription && $order_product['product_id'] == $item['product_id'] && $item['product_id'] == $order_subscription['product_id']) {
$item['subscription']['order_product_id'] = $order_product['order_product_id'];
$item['subscription']['product_id'] = $order_product['product_id'];
$item['subscription']['store_id'] = $this->config->get('config_store_id');
$item['subscription']['customer_id'] = $this->customer->getId();
$item['subscription']['payment_address_id'] = $order_info['payment_address_id'];
$item['subscription']['payment_method'] = $order_info['payment_method'];
$item['subscription']['shipping_address_id'] = $order_info['shipping_address_id'];
$item['subscription']['shipping_method'] = $order_info['shipping_method'];
$item['subscription']['quantity'] = $order_product['quantity'];
$item['subscription']['comment'] = $order_info['comment'];
$item['subscription']['affiliate_id'] = $order_info['affiliate_id'];
$item['subscription']['marketing_id'] = $order_info['marketing_id'];
$item['subscription']['tracking'] = $order_info['tracking'];
$item['subscription']['language_id'] = $order_info['language_id'];
$item['subscription']['currency_id'] = $order_info['currency_id'];
$item['subscription']['ip'] = $ip;
$item['subscription']['forwarded_ip'] = $forwarded_ip;
$item['subscription']['user_agent'] = $user_agent;
$item['subscription']['accept_language'] = $accept_language;

$this->model_extension_payment_opayo->subscriptionPayment($item, $payment_data['VendorTxCode']);
}
Expand Down Expand Up @@ -461,20 +504,63 @@ public function threeDSnotify(): void {

$payment_data['VendorTxCode'] = $this->session->data['order_id'] . 'SD' . date('YmdHis') . mt_rand(1, 999);

$subscriptions = $this->cart->getSubscriptions();
$subscription_products = $this->cart->getSubscriptions();

$order_products = $this->model_checkout_order->getProducts($this->session->data['order_id']);

$opayo_order_info = $this->model_extension_payment_opayo->getOrder($this->session->data['order_id']);

// Loop through any products that are subscription items
foreach ($subscriptions as $item) {

if (isset($this->request->server['HTTP_X_REAL_IP'])) {
$ip = $this->request->server['HTTP_X_REAL_IP'];
} elseif (isset($this->request->server['REMOTE_ADDR'])) {
$ip = $this->request->server['REMOTE_ADDR'];
} else {
$ip = '';
}

if (!empty($this->request->server['HTTP_X_FORWARDED_FOR'])) {
$forwarded_ip = $this->request->server['HTTP_X_FORWARDED_FOR'];
} elseif (!empty($this->request->server['HTTP_CLIENT_IP'])) {
$forwarded_ip = $this->request->server['HTTP_CLIENT_IP'];
} else {
$forwarded_ip = '';
}

if (isset($this->request->server['HTTP_USER_AGENT'])) {
$user_agent = $this->request->server['HTTP_USER_AGENT'];
} else {
$user_agent = '';
}

if (isset($this->request->server['HTTP_ACCEPT_LANGUAGE'])) {
$accept_language = $this->request->server['HTTP_ACCEPT_LANGUAGE'];
} else {
$accept_language = '';
}

foreach ($subscription_products as $item) {
foreach ($order_products as $order_product) {
$order_subscription = $this->model_checkout_order->getSubscription($this->session->data['order_id'], $order_product['order_product_id']);

if ($order_subscription && $item['product_id'] == $order_subscription['product_id'] && $order_subscription['product_id'] == $order_product['product_id']) {
$item['subscription']['name'] = $order_product['name'];


if ($order_subscription && $order_product['product_id'] == $item['product_id'] && $item['product_id'] == $order_subscription['product_id']) {
$item['subscription']['order_product_id'] = $order_product['order_product_id'];
$item['subscription']['product_id'] = $order_product['product_id'];
$item['subscription']['store_id'] = $this->config->get('config_store_id');
$item['subscription']['customer_id'] = $this->customer->getId();
$item['subscription']['payment_address_id'] = $order_info['payment_address_id'];
$item['subscription']['payment_method'] = $order_info['payment_method'];
$item['subscription']['shipping_address_id'] = $order_info['shipping_address_id'];
$item['subscription']['shipping_method'] = $order_info['shipping_method'];
$item['subscription']['quantity'] = $order_product['quantity'];
$item['subscription']['comment'] = $order_info['comment'];
$item['subscription']['affiliate_id'] = $order_info['affiliate_id'];
$item['subscription']['marketing_id'] = $order_info['marketing_id'];
$item['subscription']['tracking'] = $order_info['tracking'];
$item['subscription']['language_id'] = $order_info['language_id'];
$item['subscription']['currency_id'] = $order_info['currency_id'];
$item['subscription']['ip'] = $ip;
$item['subscription']['forwarded_ip'] = $forwarded_ip;
$item['subscription']['user_agent'] = $user_agent;
$item['subscription']['accept_language'] = $accept_language;

$this->model_extension_payment_opayo->subscriptionPayment($item, $payment_data['VendorTxCode']);
}
}
Expand Down
Loading

0 comments on commit db0ec8c

Please sign in to comment.