From fe0cf5160fd6b6cf6ed3761f53c3663dd61b3597 Mon Sep 17 00:00:00 2001 From: GuilhermeLinkNacional Date: Mon, 3 Feb 2025 18:01:14 -0300 Subject: [PATCH 1/4] =?UTF-8?q?feat:=20Adi=C3=A7=C3=A3o=20de=20l=C3=B3gica?= =?UTF-8?q?=20para=20registrar=20array=20de=20cart=C3=B5es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- includes/LknWCGatewayCieloCredit.php | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/includes/LknWCGatewayCieloCredit.php b/includes/LknWCGatewayCieloCredit.php index 2073f4f..4fc6f76 100755 --- a/includes/LknWCGatewayCieloCredit.php +++ b/includes/LknWCGatewayCieloCredit.php @@ -6,8 +6,9 @@ use DateTime; use Exception; use WC_Logger; -use WC_Payment_Gateway; use WC_Subscriptions_Order; +use WC_Payment_Gateway; +use WC_Subscription; /** * Lkn_WC_Gateway_Cielo_Credit class. @@ -666,11 +667,14 @@ public function process_payment($order_id) 'SecurityCode' => $cardCvv, 'SaveCard' => $subscriptionSaveCard, 'Brand' => $provider, + 'CardOnFile' => array( + 'Usage' => 'First' + ) ), ), ); - $body = apply_filters('lkn_wc_cielo_process_body', $body, $_POST, $order_id); + do_action('lkn_wc_cielo_zero_auth', $body, $args['headers'], $this); $args['body'] = wp_json_encode($body); @@ -730,11 +734,20 @@ public function process_payment($order_id) 'brand' => $provider, ); - // Codificar os dados do cartão de pagamento em base64 - $paymentOptions = array('payment' => base64_encode(json_encode($cardPayment))); + $cardsArray = get_user_meta($user_id, 'card_array', true); + $cardsArray = is_array($cardsArray) ? $cardsArray : []; + $lastFourDigits = substr($responseDecoded->Payment->CreditCard->CardNumber, -4); + + // Adiciona o novo cartão à lista + $cardsArray[] = array( + 'cardToken' => $cardPayment['cardToken'], + 'brand' => $provider, + 'lastFourDigits' => $lastFourDigits, + ); - // Atualizar o user meta com os dados codificados em base64 - update_user_meta($user_id, 'cielo_card_token', $paymentOptions['payment']); + // Atualiza os metadados do usuário + update_user_meta($user_id, 'card_array', $cardsArray); + update_user_meta($user_id, 'default_card', array_key_last($cardsArray)); } // Remove cart From 562047de773db7f623f33b7bb03d484a9c9bc9dd Mon Sep 17 00:00:00 2001 From: GuilhermeLinkNacional Date: Tue, 4 Feb 2025 17:49:31 -0300 Subject: [PATCH 2/4] =?UTF-8?q?feat:=20Adi=C3=A7=C3=A3o=20de=20compatibili?= =?UTF-8?q?dade=20com=20a=20configura=C3=A7=C3=A3o=20de=20retentativas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- includes/LknWCGatewayCieloCredit.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/includes/LknWCGatewayCieloCredit.php b/includes/LknWCGatewayCieloCredit.php index 4fc6f76..70f5628 100755 --- a/includes/LknWCGatewayCieloCredit.php +++ b/includes/LknWCGatewayCieloCredit.php @@ -93,7 +93,7 @@ public function __construct() // Action hook to load custom JavaScript add_action('wp_enqueue_scripts', array($this, 'payment_gateway_scripts')); - add_action('woocommerce_scheduled_subscription_payment_' . $this->id, array($this, 'process_subscription_payment'), 10, 2); + add_action('woocommerce_scheduled_subscription_payment_' . $this->id, array($this, 'process_subscription_payment'), 10, 3); // Action hook to load admin JavaScript if (function_exists('get_plugins')) { @@ -108,9 +108,9 @@ public function __construct() * @param WC_Order $order * @return void */ - public function process_subscription_payment($amount, $order): void + public function process_subscription_payment($amount, $order, $isRetry = false): void { - do_action('lkn_wc_cielo_scheduled_subscription_payment', $amount, $order); + do_action('lkn_wc_cielo_scheduled_subscription_payment', $amount, $order, $isRetry); } /** From cac154db39f5e2e10355491c482a207a2de728e9 Mon Sep 17 00:00:00 2001 From: GuilhermeLinkNacional Date: Thu, 6 Feb 2025 16:56:43 -0300 Subject: [PATCH 3/4] =?UTF-8?q?docs:=20Atualizando=20vers=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/main.yml | 2 +- CHANGELOG.md | 3 +++ README.txt | 6 +++++- lkn-wc-gateway-cielo.php | 4 ++-- 4 files changed, 11 insertions(+), 4 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index f140be3..102bf82 100755 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -46,7 +46,7 @@ jobs: uses: mathieudutour/github-tag-action@v6.0 with: github_token: ${{ secrets.GITHUB_TOKEN }} - custom_tag: "1.16.0" + custom_tag: "1.17.0" # Generate new release - name: Generate new Release diff --git a/CHANGELOG.md b/CHANGELOG.md index 66ab35a..d586fb3 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,6 @@ +# 1.17.0 - 06/12/2024 +* Adição de compatibilidade com configurações de retentativas para assinaturas. + # 1.16.0 - 31/01/2025 * Adição do notice de donwloado do plugin: fraud-detection-for-woocommerce. * Adição de mensagem de avaliação do plugin no footer. diff --git a/README.txt b/README.txt index eeb4b53..f550b40 100755 --- a/README.txt +++ b/README.txt @@ -4,7 +4,7 @@ Donate link: https://www.linknacional.com.br/wordpress/woocommerce/cielo/ Tags: woocommerce, payment, paymethod, card, credit Requires at least: 5.7 Tested up to: 6.7.1 -Stable tag: 1.16.0 +Stable tag: 1.17.0 Requires PHP: 7.2 License: GPLv3 or later License URI: https://www.gnu.org/licenses/gpl-3.0.html @@ -93,6 +93,10 @@ Payment Gateway for Cielo API on WooCommerce plugin is dependent on WooCommerce 7. Debit card front page with payment fields. == Changelog == += 1.17.0 = +**06/02/2025** +* Added compatibility with retry settings for subscriptions. + = 1.16.0 = **31/01/2025** * Added the download notice for the plugin: fraud-detection-for-woocommerce. diff --git a/lkn-wc-gateway-cielo.php b/lkn-wc-gateway-cielo.php index 9d3096e..52796bc 100755 --- a/lkn-wc-gateway-cielo.php +++ b/lkn-wc-gateway-cielo.php @@ -3,7 +3,7 @@ * Plugin Name: Payment Gateway for Cielo API on WooCommerce * Plugin URI: https://www.linknacional.com.br/wordpress/woocommerce/cielo/ * Description: Adds the Cielo API 3.0 Payments gateway to your WooCommerce website. - * Version: 1.16.0 + * Version: 1.17.0 * Author: Link Nacional * Author URI: https://linknacional.com.br * Text Domain: lkn-wc-gateway-cielo @@ -326,7 +326,7 @@ private static function setup_constants(): void { // Defines addon version number for easy reference. if (! defined('LKN_WC_CIELO_VERSION')) { - define('LKN_WC_CIELO_VERSION', '1.16.0'); + define('LKN_WC_CIELO_VERSION', '1.17.0'); } if (! defined('LKN_WC_CIELO_TRANSLATION_PATH')) { define('LKN_WC_CIELO_TRANSLATION_PATH', plugin_dir_path(__FILE__) . 'languages/'); From e88280e4ca1e31886abef323330d801fa6a9a8ea Mon Sep 17 00:00:00 2001 From: GuilhermeLinkNacional Date: Fri, 7 Feb 2025 15:30:54 -0300 Subject: [PATCH 4/4] =?UTF-8?q?feat:=20Adi=C3=A7=C3=A3o=20compatibilidade?= =?UTF-8?q?=20com=20configura=C3=A7=C3=A3o=20para=20salvar=20token=20do=20?= =?UTF-8?q?cart=C3=A3o?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- includes/LknWCGatewayCieloCredit.php | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/includes/LknWCGatewayCieloCredit.php b/includes/LknWCGatewayCieloCredit.php index 70f5628..4b1b989 100755 --- a/includes/LknWCGatewayCieloCredit.php +++ b/includes/LknWCGatewayCieloCredit.php @@ -565,6 +565,7 @@ public function process_payment($order_id) $merchantOrderId = uniqid('invoice_'); $amount = $order->get_total(); $capture = ($this->get_option('capture', 'yes') == 'yes') ? true : false; + $saveCard = ($this->get_option('save_card_token', 'yes') == 'yes') ? true : false; $description = sanitize_text_field($this->get_option('invoiceDesc')); $description = preg_replace('/[^a-zA-Z\s]+/', '', $description); $description = preg_replace('/\s+/', ' ', $description); @@ -572,7 +573,6 @@ public function process_payment($order_id) $debug = $this->get_option('debug'); $currency = $order->get_currency(); $activeInstallment = $this->get_option('installment_payment'); - $subscriptionSaveCard = false; if ($this->validate_card_holder_name($cardName, false) === false) { $message = __('Card Holder Name is required!', 'lkn-wc-gateway-cielo'); @@ -608,7 +608,7 @@ public function process_payment($order_id) // Adicione esta linha para processar o pagamento recorrente se o pedido contiver uma assinatura if (class_exists('WC_Subscriptions_Order') && WC_Subscriptions_Order::order_contains_subscription($order_id)) { $order = apply_filters('lkn_wc_cielo_process_recurring_payment', $order); - $subscriptionSaveCard = true; + $saveCard = true; } // Convert the amount to equivalent in BRL @@ -665,7 +665,7 @@ public function process_payment($order_id) 'CardNumber' => $cardNum, 'ExpirationDate' => $cardExp, 'SecurityCode' => $cardCvv, - 'SaveCard' => $subscriptionSaveCard, + 'SaveCard' => $saveCard, 'Brand' => $provider, 'CardOnFile' => array( 'Usage' => 'First' @@ -720,7 +720,7 @@ public function process_payment($order_id) $order->add_meta_data('paymentId', $responseDecoded->Payment->PaymentId, true); do_action("lkn_wc_cielo_change_order_status", $order, $this, $capture); - if (class_exists('WC_Subscriptions_Order') && WC_Subscriptions_Order::order_contains_subscription($order_id)) { + if ($saveCard || (class_exists('WC_Subscriptions_Order') && WC_Subscriptions_Order::order_contains_subscription($order_id))) { // Salvar o token e a bandeira do cartão no meta do pedido $user_id = $order->get_user_id(); @@ -736,13 +736,15 @@ public function process_payment($order_id) $cardsArray = get_user_meta($user_id, 'card_array', true); $cardsArray = is_array($cardsArray) ? $cardsArray : []; - $lastFourDigits = substr($responseDecoded->Payment->CreditCard->CardNumber, -4); + $lastFourDigits = $responseDecoded->Payment->CreditCard->CardNumber; + $expirationDate = $responseDecoded->Payment->CreditCard->ExpirationDate; // Adiciona o novo cartão à lista $cardsArray[] = array( 'cardToken' => $cardPayment['cardToken'], 'brand' => $provider, - 'lastFourDigits' => $lastFourDigits, + 'cardDigits' => $lastFourDigits, + 'expirationDate' => $expirationDate, ); // Atualiza os metadados do usuário