From 18c541e8ec4dc0369ddb054315d02300b2347020 Mon Sep 17 00:00:00 2001 From: TheCartpenter Date: Mon, 3 Jun 2024 22:11:59 -0400 Subject: [PATCH] Updated PayPal Checkout extension to v3.1.2 --- .../controller/extension/payment/paypal.php | 77 +++++++++++++++---- .../en-gb/extension/payment/paypal.php | 4 + .../admin/model/extension/payment/paypal.php | 13 ++-- .../extension/payment/paypal/order.twig | 54 +++++++++++-- .../controller/extension/payment/paypal.php | 31 ++++++-- .../model/extension/payment/paypal.php | 7 +- .../template/extension/recurring/paypal.twig | 4 +- upload/system/config/paypal.php | 2 +- 8 files changed, 144 insertions(+), 48 deletions(-) diff --git a/upload/admin/controller/extension/payment/paypal.php b/upload/admin/controller/extension/payment/paypal.php index 68d01b667..9403f1af6 100644 --- a/upload/admin/controller/extension/payment/paypal.php +++ b/upload/admin/controller/extension/payment/paypal.php @@ -2168,6 +2168,7 @@ private function getPaymentDetails($order_id) { $data['autocomplete_carrier_url'] = str_replace('&', '&', $this->url->link('extension/payment/paypal/autocompleteCarrier', 'user_token=' . $this->session->data['user_token'], true)); $data['create_tracker_url'] = str_replace('&', '&', $this->url->link('extension/payment/paypal/createTracker', 'user_token=' . $this->session->data['user_token'], true)); $data['cancel_tracker_url'] = str_replace('&', '&', $this->url->link('extension/payment/paypal/cancelTracker', 'user_token=' . $this->session->data['user_token'], true)); + $data['info_order_history_url'] = str_replace('&', '&', $this->url->link('sale/order/history', 'user_token=' . $this->session->data['user_token'] . '&order_id=' . $data['order_id'], true)); $data['country_code'] = ''; @@ -2253,7 +2254,6 @@ private function getPaymentDetails($order_id) { if (isset($paypal_order_info['purchase_units'][0]['payments']) && !$this->error) { $payments = $paypal_order_info['purchase_units'][0]['payments']; - $order_status_id = 0; $transaction_id = $data['transaction_id']; $transaction_status = $data['transaction_status']; @@ -2262,22 +2262,18 @@ private function getPaymentDetails($order_id) { $transaction_id = $authorization['id']; if (($authorization['status'] == 'CREATED') || ($authorization['status'] == 'PENDING')) { - $order_status_id = $setting['order_status']['pending']['id']; $transaction_status = 'created'; } if ($authorization['status'] == 'CAPTURED') { - $order_status_id = $setting['order_status']['completed']['id']; $transaction_status = 'completed'; } if ($authorization['status'] == 'PARTIALLY_CAPTURED') { - $order_status_id = $setting['order_status']['partially_captured']['id']; $transaction_status = 'partially_captured'; } if ($authorization['status'] == 'VOIDED') { - $order_status_id = $setting['order_status']['voided']['id']; $transaction_status = 'voided'; } @@ -2290,18 +2286,15 @@ private function getPaymentDetails($order_id) { if (!empty($payments['captures'])) { foreach ($payments['captures'] as $capture) { if (($capture['status'] == 'COMPLETED') && ($transaction_status == 'completed')) { - $order_status_id = $setting['order_status']['completed']['id']; $transaction_id = $capture['id']; $transaction_status = 'completed'; } if ($capture['status'] == 'PARTIALLY_REFUNDED') { - $order_status_id = $setting['order_status']['partially_refunded']['id']; $transaction_status = 'partially_refunded'; } if ($capture['status'] == 'REFUNDED') { - $order_status_id = $setting['order_status']['refunded']['id']; $transaction_status = 'refunded'; } @@ -2360,6 +2353,14 @@ public function capturePayment() { } else { $final_capture = false; } + + $comment = $this->request->post['comment']; + + if (!empty($this->request->post['notify'])) { + $notify = true; + } else { + $notify = false; + } $order_info = $this->model_sale_order->getOrder($order_id); @@ -2448,8 +2449,8 @@ public function capturePayment() { $transaction_status = 'partially_captured'; } - if ($order_status_id && ($order_info['order_status_id'] != $order_status_id)) { - $this->model_extension_payment_paypal->addOrderHistory($setting['general']['order_history_token'], $order_id, $order_status_id); + if ($order_status_id) { + $this->model_extension_paypal_payment_paypal->addOrderHistory($setting['general']['order_history_token'], $order_id, $order_status_id, $comment, $notify); } $paypal_order_data = array(); @@ -2479,12 +2480,21 @@ public function reauthorizePayment() { $order_id = (int)$this->request->post['order_id']; $reauthorize_amount = (float)$this->request->post['reauthorize_amount']; + + $comment = $this->request->post['comment']; + + if (!empty($this->request->post['notify'])) { + $notify = true; + } else { + $notify = false; + } $paypal_order_info = $this->model_extension_payment_paypal->getPayPalOrder($order_id); if ($paypal_order_info) { $transaction_id = $paypal_order_info['transaction_id']; $currency_code = $paypal_order_info['currency_code']; + $order_status_id = 0; $_config = new Config(); $_config->load('paypal'); @@ -2552,8 +2562,13 @@ public function reauthorizePayment() { } if (isset($result['id']) && isset($result['status']) && !$this->error) { + $order_status_id = $setting['order_status']['pending']['id']; $transaction_id = $result['id']; $transaction_status = 'created'; + + if ($order_status_id) { + $this->model_extension_paypal_payment_paypal->addOrderHistory($setting['general']['order_history_token'], $order_id, $order_status_id, $comment, $notify); + } $paypal_order_data = array( 'order_id' => $order_id, @@ -2581,11 +2596,20 @@ public function voidPayment() { $this->load->model('extension/payment/paypal'); $order_id = (int)$this->request->post['order_id']; + + $comment = $this->request->post['comment']; + + if (!empty($this->request->post['notify'])) { + $notify = true; + } else { + $notify = false; + } $paypal_order_info = $this->model_extension_payment_paypal->getPayPalOrder($order_id); if ($paypal_order_info) { $transaction_id = $paypal_order_info['transaction_id']; + $order_status_id = 0; $_config = new Config(); $_config->load('paypal'); @@ -2644,7 +2668,12 @@ public function voidPayment() { } if (!$this->error) { + $order_status_id = $setting['order_status']['voided']['id']; $transaction_status = 'voided'; + + if ($order_status_id) { + $this->model_extension_paypal_payment_paypal->addOrderHistory($setting['general']['order_history_token'], $order_id, $order_status_id, $comment, $notify); + } $paypal_order_data = array( 'order_id' => $order_id, @@ -2673,6 +2702,13 @@ public function refundPayment() { $order_id = (int)$this->request->post['order_id']; $refund_amount = (float)$this->request->post['refund_amount']; + $comment = $this->request->post['comment']; + + if (!empty($this->request->post['notify'])) { + $notify = true; + } else { + $notify = false; + } $order_info = $this->model_sale_order->getOrder($order_id); @@ -2893,8 +2929,8 @@ public function refundPayment() { $transaction_status = 'partially_refunded'; } - if ($order_status_id && ($order_info['order_status_id'] != $order_status_id)) { - $this->model_extension_payment_paypal->addOrderHistory($setting['general']['order_history_token'], $order_id, $order_status_id); + if ($order_status_id) { + $this->model_extension_paypal_payment_paypal->addOrderHistory($setting['general']['order_history_token'], $order_id, $order_status_id, $comment, $notify); } $paypal_order_data = array(); @@ -2952,7 +2988,7 @@ public function autocompleteCarrier() { } public function createTracker() { - if ($this->config->get('payment_paypal_status') && !empty($this->request->post['order_id']) && !empty($this->request->post['country_code']) && isset($this->request->post['tracking_number']) && isset($this->request->post['carrier_name'])) { + if ($this->config->get('payment_paypal_status') && !empty($this->request->post['order_id'])) { $this->load->language('extension/payment/paypal'); $this->load->model('extension/payment/paypal'); @@ -2961,6 +2997,13 @@ public function createTracker() { $country_code = $this->request->post['country_code']; $tracking_number = $this->request->post['tracking_number']; $carrier_name = $this->request->post['carrier_name']; + $comment = $this->request->post['comment']; + + if (!empty($this->request->post['notify'])) { + $notify = true; + } else { + $notify = false; + } $paypal_order_info = $this->model_extension_payment_paypal->getPayPalOrder($order_id); @@ -3024,7 +3067,7 @@ public function createTracker() { $tracker_info['capture_id'] = $transaction_id; $tracker_info['tracking_number'] = $tracking_number; $tracker_info['carrier'] = $carrier_code; - $tracker_info['notify_payer'] = false; + $tracker_info['notify_payer'] = $notify; if ($carrier_code == 'OTHER') { $tracker_info['carrier_name_other'] = $carrier_name; @@ -3070,8 +3113,8 @@ public function createTracker() { if ($order_info) { $order_status_id = $setting['order_status']['shipped']['id']; - if ($order_info['order_status_id'] != $order_status_id) { - $this->model_extension_payment_paypal->addOrderHistory($setting['general']['order_history_token'], $order_id, $order_status_id); + if ($order_status_id) { + $this->model_extension_paypal_payment_paypal->addOrderHistory($setting['general']['order_history_token'], $order_id, $order_status_id, $comment, $notify); } } @@ -3087,7 +3130,7 @@ public function createTracker() { } public function cancelTracker() { - if ($this->config->get('payment_paypal_status') && !empty($this->request->post['order_id']) && isset($this->request->post['tracking_number'])) { + if ($this->config->get('payment_paypal_status') && !empty($this->request->post['order_id'])) { $this->load->language('extension/payment/paypal'); $this->load->model('extension/payment/paypal'); diff --git a/upload/admin/language/en-gb/extension/payment/paypal.php b/upload/admin/language/en-gb/extension/payment/paypal.php index 376519c28..99c60175a 100644 --- a/upload/admin/language/en-gb/extension/payment/paypal.php +++ b/upload/admin/language/en-gb/extension/payment/paypal.php @@ -210,11 +210,15 @@ $_['text_transaction_refunded'] = 'A merchant refunded the payment capture.'; $_['text_transaction_partially_refunded'] = 'A merchant partially refunded the payment capture.'; $_['text_transaction_reversed'] = 'PayPal reversed the payment capture.'; +$_['text_transaction_comment'] = 'Comment'; +$_['text_transaction_notify'] = 'Notify Customer'; $_['text_transaction_action'] = 'Action'; $_['text_final_capture'] = 'Final Capture'; $_['text_tracker_information'] = 'Tracking Information'; $_['text_tracking_number'] = 'Tracking Number'; $_['text_carrier_name'] = 'Carrier'; +$_['text_tracker_comment'] = 'Comment'; +$_['text_tracker_notify'] = 'Notify Customer'; $_['text_tracker_action'] = 'Action'; $_['text_loading'] = 'Loading...'; diff --git a/upload/admin/model/extension/payment/paypal.php b/upload/admin/model/extension/payment/paypal.php index bda98e4cc..8253c213e 100644 --- a/upload/admin/model/extension/payment/paypal.php +++ b/upload/admin/model/extension/payment/paypal.php @@ -260,7 +260,7 @@ public function getAgreeStatus() { return $agree_status; } - public function addOrderHistory($order_history_token, $order_id, $order_status_id) { + public function addOrderHistory(string $order_history_token, int $order_id, int $order_status_id, string $comment = '', bool $notify = false): bool { if (isset($this->request->server['HTTPS']) && (($this->request->server['HTTPS'] == 'on') || ($this->request->server['HTTPS'] == '1'))) { $catalog = HTTPS_CATALOG; } else { @@ -269,7 +269,9 @@ public function addOrderHistory($order_history_token, $order_id, $order_status_i $data = array( 'order_id' => $order_id, - 'order_status_id' => $order_status_id + 'order_status_id' => $order_status_id, + 'notify' => $notify, + 'comment' => $comment ); $curl = curl_init(); @@ -366,7 +368,7 @@ public function uninstall() { } public function update() { - if ($this->config->get('paypal_version') < '3.0.0') { + if ($this->config->get('paypal_version') < '3.1.0') { $this->db->query("DROP TABLE IF EXISTS `" . DB_PREFIX . "paypal_checkout_integration_customer_token`"); $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_subscription`"); @@ -374,11 +376,6 @@ public function update() { $this->db->query("CREATE TABLE IF NOT EXISTS `" . DB_PREFIX . "paypal_checkout_integration_customer_token` (`customer_id` INT(11) NOT NULL, `payment_method` VARCHAR(20) NOT NULL, `vault_id` VARCHAR(50) NOT NULL, `vault_customer_id` VARCHAR(50) NOT NULL, `card_type` VARCHAR(40) NOT NULL, `card_nice_type` VARCHAR(40) NOT NULL, `card_last_digits` VARCHAR(4) NOT NULL, `card_expiry` VARCHAR(20) NOT NULL, `main_token_status` TINYINT(1) NOT NULL, PRIMARY KEY (`customer_id`, `payment_method`, `vault_id`), KEY `vault_customer_id` (`vault_customer_id`), KEY `main_token_status` (`main_token_status`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci"); $this->db->query("CREATE TABLE IF NOT EXISTS `" . DB_PREFIX . "paypal_checkout_integration_order` (`order_id` INT(11) NOT NULL, `paypal_order_id` VARCHAR(20) NOT NULL, `transaction_id` VARCHAR(20) NOT NULL, `transaction_status` VARCHAR(20) NOT NULL, `payment_method` VARCHAR(20) NOT NULL, `vault_id` VARCHAR(50) NOT NULL, `vault_customer_id` VARCHAR(50) NOT NULL, `card_type` VARCHAR(40) NOT NULL, `card_nice_type` VARCHAR(40) NOT NULL, `card_last_digits` VARCHAR(4) NOT NULL, `card_expiry` VARCHAR(20) NOT NULL, `total` DECIMAL(15,2) NOT NULL, `currency_code` VARCHAR(3) NOT NULL, `environment` VARCHAR(20) NOT NULL, `tracking_number` VARCHAR(64) NOT NULL, `carrier_name` VARCHAR(64) NOT NULL, PRIMARY KEY (`order_id`), KEY `paypal_order_id` (`paypal_order_id`), KEY `transaction_id` (`transaction_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci"); $this->db->query("CREATE TABLE IF NOT EXISTS `" . DB_PREFIX . "paypal_checkout_integration_subscription` (`paypal_subscription_id` INT(11) NOT NULL AUTO_INCREMENT, `order_id` INT(11) NOT NULL, `subscription_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_subscription_id`), KEY (`order_id`), KEY (`subscription_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci"); - } elseif ($this->config->get('paypal_version') < '3.1.0') { - $this->db->query("ALTER TABLE `" . DB_PREFIX . "paypal_checkout_integration_order` ADD COLUMN `total` DECIMAL(15,2) NOT NULL AFTER `card_expiry`"); - $this->db->query("ALTER TABLE `" . DB_PREFIX . "paypal_checkout_integration_order` ADD COLUMN `currency_code` VARCHAR(3) NOT NULL AFTER `total`"); - $this->db->query("ALTER TABLE `" . DB_PREFIX . "paypal_checkout_integration_order` ADD COLUMN `tracking_number` VARCHAR(64) NOT NULL AFTER `environment`"); - $this->db->query("ALTER TABLE `" . DB_PREFIX . "paypal_checkout_integration_order` ADD COLUMN `carrier_name` VARCHAR(64) NOT NULL AFTER `tracking_number`"); } } } diff --git a/upload/admin/view/template/extension/payment/paypal/order.twig b/upload/admin/view/template/extension/payment/paypal/order.twig index 3c58ed9ca..08601b0df 100644 --- a/upload/admin/view/template/extension/payment/paypal/order.twig +++ b/upload/admin/view/template/extension/payment/paypal/order.twig @@ -20,6 +20,15 @@ {{ attribute(_context, 'text_transaction_' ~ transaction_status) }} {% if ((transaction_status == 'created') or (transaction_status == 'completed') or (transaction_status == 'partially_captured') or (transaction_status == 'partially_refunded')) %} + + {{ text_transaction_comment }} + + +
+ +
+ + {{ text_transaction_action }} @@ -98,6 +107,17 @@ {% endif %} + {% if not tracking_number %} + + {{ text_tracker_comment }} + + +
+ +
+ + + {% endif %} {{ text_tracker_action }} @@ -120,7 +140,7 @@ window.addEventListener('load', function () { $.ajax({ type: 'post', url: '{{ capture_payment_url }}', - data: {'order_id': $('#tab-paypal #input_order_id').val(), 'capture_amount': $('#tab-paypal #input_capture_amount').val(), 'final_capture': $('#tab-paypal #input_final_capture:checked').val()}, + data: {'order_id': $('#tab-paypal #input_order_id').val(), 'capture_amount': $('#tab-paypal #input_capture_amount').val(), 'final_capture': $('#tab-paypal #input_final_capture:checked').val(), 'comment': $('#tab-paypal #input_transaction_comment').val(), 'notify': $('#tab-paypal #input_transaction_notify:checked').val()}, dataType: 'json', beforeSend: function() { $('#tab-paypal .btn').prop('disabled', true); @@ -155,7 +175,7 @@ window.addEventListener('load', function () { $.ajax({ type: 'post', url: '{{ reauthorize_payment_url }}', - data: {'order_id': $('#tab-paypal #input_order_id').val(), 'reauthorize_amount': $('#tab-paypal #input_reauthorize_amount').val()}, + data: {'order_id': $('#tab-paypal #input_order_id').val(), 'reauthorize_amount': $('#tab-paypal #input_reauthorize_amount').val(), 'comment': $('#tab-paypal #input_transaction_comment').val(), 'notify': $('#tab-paypal #input_transaction_notify:checked').val()}, dataType: 'json', beforeSend: function() { $('#tab-paypal .btn').prop('disabled', true); @@ -190,7 +210,7 @@ window.addEventListener('load', function () { $.ajax({ type: 'post', url: '{{ void_payment_url }}', - data: {'order_id': $('#tab-paypal #input_order_id').val()}, + data: {'order_id': $('#tab-paypal #input_order_id').val(), 'comment': $('#tab-paypal #input_transaction_comment').val(), 'notify': $('#tab-paypal #input_transaction_notify:checked').val()}, dataType: 'json', beforeSend: function() { $('#tab-paypal .btn').prop('disabled', true); @@ -225,7 +245,7 @@ window.addEventListener('load', function () { $.ajax({ type: 'post', url: '{{ refund_payment_url }}', - data: {'order_id': $('#tab-paypal #input_order_id').val(), 'refund_amount': $('#tab-paypal #input_refund_amount').val()}, + data: {'order_id': $('#tab-paypal #input_order_id').val(), 'refund_amount': $('#tab-paypal #input_refund_amount').val(), 'comment': $('#tab-paypal #input_transaction_comment').val(), 'notify': $('#tab-paypal #input_transaction_notify:checked').val()}, dataType: 'json', beforeSend: function() { $('#tab-paypal .btn').prop('disabled', true); @@ -260,7 +280,7 @@ window.addEventListener('load', function () { $.ajax({ type: 'post', url: '{{ create_tracker_url }}', - data: {'order_id': $('#tab-paypal #input_order_id').val(), 'country_code': $('#tab-paypal #input_country_code').val(), 'tracking_number': $('#tab-paypal #input_tracking_number').val(), 'carrier_name': $('#tab-paypal #input_carrier_name').val()}, + data: {'order_id': $('#tab-paypal #input_order_id').val(), 'country_code': $('#tab-paypal #input_country_code').val(), 'tracking_number': $('#tab-paypal #input_tracking_number').val(), 'carrier_name': $('#tab-paypal #input_carrier_name').val(), 'comment': $('#tab-paypal #input_tracker_comment').val(), 'notify': $('#tab-paypal #input_tracker_notify:checked').val()}, dataType: 'json', beforeSend: function() { $('#tab-paypal .btn').prop('disabled', true); @@ -326,7 +346,27 @@ window.addEventListener('load', function () { }); }); - updateTabPayPal(); + $('#tab-paypal #input_carrier_name').autocomplete({ + 'source': function(request, response) { + $.ajax({ + type: 'post', + url: '{{ autocomplete_carrier_url }}', + data: {'filter_country_code': $('#tab-paypal #input_country_code').val(), 'filter_carrier_name': encodeURIComponent(request)}, + dataType: 'json', + success: function(json) { + response($.map(json, function(item) { + return { + label: item['name'], + value: item['code'] + } + })); + } + }); + }, + 'select': function(item) { + $('#input_carrier_name').val(item['label']); + } + }); }); function updateTabPayPal() { @@ -353,6 +393,8 @@ function updateTabPayPal() { } }); }); + + $('#history').load('{{ info_order_history_url }}'); } \ No newline at end of file diff --git a/upload/catalog/controller/extension/payment/paypal.php b/upload/catalog/controller/extension/payment/paypal.php index 4b7c66a86..97bf6a858 100644 --- a/upload/catalog/controller/extension/payment/paypal.php +++ b/upload/catalog/controller/extension/payment/paypal.php @@ -1680,7 +1680,7 @@ public function approveOrder() { if (($authorization_status == 'CREATED') || ($authorization_status == 'DENIED') || ($authorization_status == 'PENDING')) { $message = sprintf($this->language->get('text_order_message'), $seller_protection_status); - $this->model_checkout_order->addOrderHistory($this->session->data['order_id'], $order_status_id, $message); + $this->model_checkout_order->addHistory($this->session->data['order_id'], $order_status_id, $message); } if (($authorization_status == 'CREATED') || ($authorization_status == 'DENIED') || ($authorization_status == 'PENDING')) { @@ -1809,7 +1809,7 @@ public function approveOrder() { if (($capture_status == 'COMPLETED') || ($capture_status == 'DECLINED') || ($capture_status == 'PENDING')) { $message = sprintf($this->language->get('text_order_message'), $seller_protection_status); - $this->model_checkout_order->addOrderHistory($this->session->data['order_id'], $order_status_id, $message); + $this->model_checkout_order->addHistory($this->session->data['order_id'], $order_status_id, $message); } if (($capture_status == 'COMPLETED') || ($capture_status == 'DECLINED') || ($capture_status == 'PENDING')) { @@ -2999,7 +2999,7 @@ public function completeOrder() { if (($authorization_status == 'CREATED') || ($authorization_status == 'DENIED') || ($authorization_status == 'PENDING')) { $message = sprintf($this->language->get('text_order_message'), $seller_protection_status); - $this->model_checkout_order->addOrderHistory($this->session->data['order_id'], $order_status_id, $message); + $this->model_checkout_order->addHistory($this->session->data['order_id'], $order_status_id, $message); } if (($authorization_status == 'CREATED') || ($authorization_status == 'DENIED') || ($authorization_status == 'PENDING')) { @@ -3128,7 +3128,7 @@ public function completeOrder() { if (($capture_status == 'COMPLETED') || ($capture_status == 'DECLINED') || ($capture_status == 'PENDING')) { $message = sprintf($this->language->get('text_order_message'), $seller_protection_status); - $this->model_checkout_order->addOrderHistory($this->session->data['order_id'], $order_status_id, $message); + $this->model_checkout_order->addHistory($this->session->data['order_id'], $order_status_id, $message); } if (($capture_status == 'COMPLETED') || ($capture_status == 'DECLINED') || ($capture_status == 'PENDING')) { @@ -3481,6 +3481,21 @@ public function addOrderHistory() { $this->load->language('extension/payment/paypal'); $this->load->model('extension/payment/paypal'); + + $order_id = (int)$this->request->post['order_id']; + $order_status_id = (int)$this->request->post['order_status_id']; + + if (!empty($this->request->post['comment'])) { + $comment = $this->request->post['comment']; + } else { + $comment = ''; + } + + if (!empty($this->request->post['notify'])) { + $notify = $this->request->post['notify']; + } else { + $notify = false; + } $_config = new Config(); $_config->load('paypal'); @@ -3492,7 +3507,7 @@ public function addOrderHistory() { if (hash_equals($setting['general']['order_history_token'], $this->request->get['order_history_token'])) { $this->load->model('checkout/order'); - $this->model_checkout_order->addOrderHistory($this->request->post['order_id'], $this->request->post['order_status_id'], '', true); + $this->model_checkout_order->addHistory($order_id, $order_status_id, $comment, $notify); $data['success'] = $this->language->get('success_order'); } @@ -3713,7 +3728,7 @@ public function callback() { if (($authorization_status == 'CREATED') || ($authorization_status == 'DENIED') || ($authorization_status == 'PENDING')) { $message = sprintf($this->language->get('text_order_message'), $seller_protection_status); - $this->model_checkout_order->addOrderHistory($this->session->data['order_id'], $order_status_id, $message); + $this->model_checkout_order->addHistory($this->session->data['order_id'], $order_status_id, $message); } if (($authorization_status == 'CREATED') || ($authorization_status == 'DENIED') || ($authorization_status == 'PENDING')) { @@ -3814,7 +3829,7 @@ public function callback() { if (($capture_status == 'COMPLETED') || ($capture_status == 'DECLINED') || ($capture_status == 'PENDING')) { $message = sprintf($this->language->get('text_order_message'), $seller_protection_status); - $this->model_checkout_order->addOrderHistory($this->session->data['order_id'], $order_status_id, $message); + $this->model_checkout_order->addHistory($this->session->data['order_id'], $order_status_id, $message); } if (($capture_status == 'COMPLETED') || ($capture_status == 'DECLINED') || ($capture_status == 'PENDING')) { @@ -4058,7 +4073,7 @@ public function webhook() { if ($order_status_id && ($order_info['order_status_id'] != $order_status_id)) { $this->load->model('checkout/order'); - $this->model_checkout_order->addOrderHistory($order_id, $order_status_id, '', true); + $this->model_checkout_order->addHistory($order_id, $order_status_id, '', true); } if (isset($webhook_event['resource']['id']) && $transaction_status) { diff --git a/upload/catalog/model/extension/payment/paypal.php b/upload/catalog/model/extension/payment/paypal.php index be3197a77..a6476605e 100644 --- a/upload/catalog/model/extension/payment/paypal.php +++ b/upload/catalog/model/extension/payment/paypal.php @@ -778,7 +778,7 @@ public function log($data, $title = '') { } public function update() { - if ($this->config->get('paypal_version') < '3.0.0') { + if ($this->config->get('paypal_version') < '3.1.0') { $this->db->query("DROP TABLE IF EXISTS `" . DB_PREFIX . "paypal_checkout_integration_customer_token`"); $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_subscription`"); @@ -786,11 +786,6 @@ public function update() { $this->db->query("CREATE TABLE IF NOT EXISTS `" . DB_PREFIX . "paypal_checkout_integration_customer_token` (`customer_id` INT(11) NOT NULL, `payment_method` VARCHAR(20) NOT NULL, `vault_id` VARCHAR(50) NOT NULL, `vault_customer_id` VARCHAR(50) NOT NULL, `card_type` VARCHAR(40) NOT NULL, `card_nice_type` VARCHAR(40) NOT NULL, `card_last_digits` VARCHAR(4) NOT NULL, `card_expiry` VARCHAR(20) NOT NULL, `main_token_status` TINYINT(1) NOT NULL, PRIMARY KEY (`customer_id`, `payment_method`, `vault_id`), KEY `vault_customer_id` (`vault_customer_id`), KEY `main_token_status` (`main_token_status`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci"); $this->db->query("CREATE TABLE IF NOT EXISTS `" . DB_PREFIX . "paypal_checkout_integration_order` (`order_id` INT(11) NOT NULL, `paypal_order_id` VARCHAR(20) NOT NULL, `transaction_id` VARCHAR(20) NOT NULL, `transaction_status` VARCHAR(20) NOT NULL, `payment_method` VARCHAR(20) NOT NULL, `vault_id` VARCHAR(50) NOT NULL, `vault_customer_id` VARCHAR(50) NOT NULL, `card_type` VARCHAR(40) NOT NULL, `card_nice_type` VARCHAR(40) NOT NULL, `card_last_digits` VARCHAR(4) NOT NULL, `card_expiry` VARCHAR(20) NOT NULL, `total` DECIMAL(15,2) NOT NULL, `currency_code` VARCHAR(3) NOT NULL, `environment` VARCHAR(20) NOT NULL, `tracking_number` VARCHAR(64) NOT NULL, `carrier_name` VARCHAR(64) NOT NULL, PRIMARY KEY (`order_id`), KEY `paypal_order_id` (`paypal_order_id`), KEY `transaction_id` (`transaction_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci"); $this->db->query("CREATE TABLE IF NOT EXISTS `" . DB_PREFIX . "paypal_checkout_integration_subscription` (`paypal_subscription_id` INT(11) NOT NULL AUTO_INCREMENT, `order_id` INT(11) NOT NULL, `subscription_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_subscription_id`), KEY (`order_id`), KEY (`subscription_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci"); - } elseif ($this->config->get('paypal_version') < '3.1.0') { - $this->db->query("ALTER TABLE `" . DB_PREFIX . "paypal_checkout_integration_order` ADD COLUMN `total` DECIMAL(15,2) NOT NULL AFTER `card_expiry`"); - $this->db->query("ALTER TABLE `" . DB_PREFIX . "paypal_checkout_integration_order` ADD COLUMN `currency_code` VARCHAR(3) NOT NULL AFTER `total`"); - $this->db->query("ALTER TABLE `" . DB_PREFIX . "paypal_checkout_integration_order` ADD COLUMN `tracking_number` VARCHAR(64) NOT NULL AFTER `environment`"); - $this->db->query("ALTER TABLE `" . DB_PREFIX . "paypal_checkout_integration_order` ADD COLUMN `carrier_name` VARCHAR(64) NOT NULL AFTER `tracking_number`"); } $this->db->query("DELETE FROM `" . DB_PREFIX . "event` WHERE `code` = 'paypal_order_info'"); diff --git a/upload/catalog/view/theme/default/template/extension/recurring/paypal.twig b/upload/catalog/view/theme/default/template/extension/recurring/paypal.twig index caf591d83..187c853e2 100644 --- a/upload/catalog/view/theme/default/template/extension/recurring/paypal.twig +++ b/upload/catalog/view/theme/default/template/extension/recurring/paypal.twig @@ -12,7 +12,7 @@ $('#paypal_recurring').on('click', '.button-enable-recurring', function() { $.ajax({ type: 'post', url: '{{ enable_url }}', - data: {'subscription_id' : '{{ subscription_id }}'}, + data: {'order_recurring_id' : '{{ order_recurring_id }}'}, dataType: 'json', beforeSend: function() { $('#paypal_recurring .btn').prop('disabled', true); @@ -47,7 +47,7 @@ $('#paypal_recurring').on('click', '.button-disable-recurring', function() { $.ajax({ type: 'post', url: '{{ disable_url }}', - data: {'subscription_id' : '{{ subscription_id }}'}, + data: {'order_recurring_id' : '{{ order_recurring_id }}'}, dataType: 'json', beforeSend: function() { $('#paypal_recurring .btn').prop('disabled', true); diff --git a/upload/system/config/paypal.php b/upload/system/config/paypal.php index 509e6c766..a4856fc60 100644 --- a/upload/system/config/paypal.php +++ b/upload/system/config/paypal.php @@ -1,6 +1,6 @@ '3.1.1', + 'version' => '3.1.2', 'partner' => array( 'production' => array( 'partner_id' => 'TY2Q25KP2PX9L',