Plugin Directory

Changeset 3642474


Ignore:
Timestamp:
08/11/2026 07:57:18 PM (3 months ago)
Author:
neopayment
Message:

Update to version 3.0.6 from GitHub

Location:
neopayment
Files:
12 added
24 edited
1 copied

Legend:

Unmodified
Added
Removed
  • neopayment/tags/3.0.6/assets/css/neopayment-card-fields.css

    r3583684 r3642474  
    3535
    3636
    37 .required {
    38         color: #e74c3c;
    39         margin-left: 0.25rem;
    40         font-weight: bold;
    41         font-size: 1rem;
    42 }
    43 
    44 .neopayment-card-fields {
    45         padding: 10px;
    46         display: flex;
    47         flex-direction: column;
    48         gap: 15px;
    49         max-width: 100%;
    50 }
    51 
    52 .neopayment-card-fields__row {
    53         display: flex;
    54         gap: 15px;
    55         flex-wrap: wrap;
    56 }
    57 
    58 .neopayment-card-fields__group {
    59         flex: 1 1 1px;
    60         display: flex;
    61         flex-direction: column;
    62 }
    63 
    64 .neopayment-card-fields input {
    65         padding: 8px;
    66         font-size: 14px;
    67         border: 1px solid #ccc;
    68         border-radius: 4px;
    69 }
    70 
    71 .neopayment-card-fields__error {
    72         color: #e74c3c;
    73         font-size: 0.875rem;
    74         margin-top: 0.25rem;
    75         display: block;
    76         line-height: 1.2;
    77 }
    78 
    79 .required {
     37.neopayment-card-fields .required,
     38.wc-credit-card-form .required {
    8039        color: #e74c3c;
    8140        margin-left: 0.25rem;
  • neopayment/tags/3.0.6/assets/js/neopayment-3ds-popup.js

    r3583684 r3642474  
    1 const __ = (window.wp && window.wp.i18n && window.wp.i18n.__)
    2         ? window.wp.i18n.__
    3         : (s) => s;
    4 
    51jQuery(
    62        ($) => {
     3                const __ = (window.wp && window.wp.i18n && window.wp.i18n.__)
     4                        ? window.wp.i18n.__
     5                        : (s) => s;
     6
     7                /**
     8                 * Toggle challenge UI:
     9                 * - false (default): open 3DS in a browser popup window.
     10                 * - true: iframe modal flow.
     11                 */
     12                const USE_3DS_MODAL = false;
     13
    714                const MODAL_WIDTH = 560;
    815                const MODAL_HEIGHT = 760;
    916                const openedChallenges = new Set();
    1017                let modalElements = null;
     18                let popupWaitElements = null;
    1119                let iframeLoadTimer = null;
    1220                let fallbackCountdownTimer = null;
    1321                let processingHintTimer = null;
     22                let popupWatchTimer = null;
    1423                let activeChallengeUrl = null;
     24                let activeChallengePopup = null;
    1525                let frameLoadCount = 0;
    1626                let callbackHandled = false;
    1727                let blockPageNavigation = false;
     28                /** True once a popup window actually opened (not blocked). */
     29                let popupDidOpen = false;
     30                /** True when the shopper closed the popup before finishing 3DS. */
     31                let popupClosedByUser = false;
     32
     33                /* ------------------------------------------------------------------ */
     34                /* Modal */
     35                /* ------------------------------------------------------------------ */
    1836
    1937                function ensure3DSModal() {
    … …  
    6482
    6583                        const title = document.createElement('span');
    66                         title.textContent = __('Verificación segura 3DS', 'neopayment-payment-gateway');
     84                        title.textContent = __('Verificación de seguridad', 'neopayment-payment-gateway');
    6785
    6886                        const iframe = document.createElement('iframe');
    6987                        iframe.className = 'neopayment-3ds-modal__frame';
    70                         iframe.setAttribute('title', __('Autenticación 3DS', 'neopayment-payment-gateway'));
     88                        iframe.setAttribute('title', __('Verificación de seguridad', 'neopayment-payment-gateway'));
    7189                        iframe.setAttribute('allow', 'payment');
    7290                        iframe.style.height = `${MODAL_HEIGHT}px`;
    … …  
    98116
    99117                        const processingText = document.createElement('p');
    100                         processingText.textContent = __('Procesando autenticación 3DS. Por favor espere...', 'neopayment-payment-gateway');
     118                        processingText.textContent = __('Estamos verificando tu pago. Un momento, por favor…', 'neopayment-payment-gateway');
    101119                        processingText.style.margin = '0';
    102120                        processingText.style.fontSize = '14px';
    … …  
    129147                        openWindowBtn.type = 'button';
    130148                        openWindowBtn.className = 'neopayment-3ds-modal__open-window';
    131                         openWindowBtn.textContent = __('Abrir en nueva ventana', 'neopayment-payment-gateway');
     149                        openWindowBtn.textContent = __('Abrir en otra ventana', 'neopayment-payment-gateway');
    132150                        openWindowBtn.style.border = '1px solid #ccd5e2';
    133151                        openWindowBtn.style.background = '#fff';
    … …  
    142160                        cancelBtn.type = 'button';
    143161                        cancelBtn.className = 'neopayment-3ds-modal__cancel';
    144                         cancelBtn.textContent = __('Cancelar verificación', 'neopayment-payment-gateway');
     162                        cancelBtn.textContent = __('Cancelar', 'neopayment-payment-gateway');
    145163                        cancelBtn.style.border = '1px solid #ccd5e2';
    146164                        cancelBtn.style.background = '#fff';
    … …  
    220238                        let remaining = seconds;
    221239                        setModalStatus(
    222                                 __(
    223                                         'Cargando verificación 3DS... Si tarda demasiado, podrás abrirla en nueva ventana en',
    224                                         'neopayment-payment-gateway'
    225                                 ) + ` ${remaining}s`
     240                                __('Cargando la verificación… Si tarda mucho, podrás abrirla en otra ventana en', 'neopayment-payment-gateway') +
     241                                        ` ${remaining}s`
    226242                        );
    227243                        clearFallbackCountdown();
    … …  
    233249                                }
    234250                                setModalStatus(
    235                                         __(
    236                                                 'Cargando verificación 3DS... Si tarda demasiado, podrás abrirla en nueva ventana en',
    237                                                 'neopayment-payment-gateway'
    238                                         ) + ` ${remaining}s`
     251                                        __('Cargando la verificación… Si tarda mucho, podrás abrirla en otra ventana en', 'neopayment-payment-gateway') +
     252                                                ` ${remaining}s`
    239253                                );
    240254                        }, 1000);
    … …  
    263277                                showProcessingLayer(false);
    264278                                toggleOpenWindowButton(true);
    265                                 setModalStatus(__('La verificación está tardando. Si lo prefieres, ábrela en una nueva ventana.', 'neopayment-payment-gateway'));
     279                                setModalStatus(__('Esto está tardando más de lo habitual. Puedes abrirlo en otra ventana.', 'neopayment-payment-gateway'));
    266280                        }, 7000);
    267281
    … …  
    283297                                        showProcessingLayer(false);
    284298                                        toggleOpenWindowButton(false);
    285                                         setModalStatus(__('Procesando autenticación 3DS. Por favor espere...', 'neopayment-payment-gateway'));
     299                                        setModalStatus(__('Estamos verificando tu pago. Un momento, por favor…', 'neopayment-payment-gateway'));
    286300                                }
    287301                        };
    … …  
    313327                }
    314328
     329                /* ------------------------------------------------------------------ */
     330                /* Popup flow (default)                                               */
     331                /* ------------------------------------------------------------------ */
     332
     333                function ensurePopupWaitPanel() {
     334                        if (popupWaitElements) {
     335                                return popupWaitElements;
     336                        }
     337
     338                        const overlay = document.createElement('div');
     339                        overlay.className = 'neopayment-3ds-popup-wait';
     340                        overlay.style.position = 'fixed';
     341                        overlay.style.inset = '0';
     342                        overlay.style.display = 'none';
     343                        overlay.style.alignItems = 'center';
     344                        overlay.style.justifyContent = 'center';
     345                        overlay.style.background = 'rgba(0,0,0,.55)';
     346                        overlay.style.zIndex = '99998';
     347                        overlay.style.padding = '16px';
     348
     349                        const card = document.createElement('div');
     350                        card.style.maxWidth = '420px';
     351                        card.style.width = '100%';
     352                        card.style.background = '#fff';
     353                        card.style.borderRadius = '10px';
     354                        card.style.boxShadow = '0 16px 50px rgba(0,0,0,.35)';
     355                        card.style.padding = '20px 18px';
     356                        card.style.textAlign = 'center';
     357
     358                        const title = document.createElement('h3');
     359                        title.textContent = __('Verificación de seguridad', 'neopayment-payment-gateway');
     360                        title.style.margin = '0 0 10px';
     361                        title.style.fontSize = '18px';
     362                        title.style.color = '#22324a';
     363
     364                        const text = document.createElement('p');
     365                        text.className = 'neopayment-3ds-popup-wait__text';
     366                        text.style.margin = '0 0 16px';
     367                        text.style.fontSize = '14px';
     368                        text.style.lineHeight = '1.45';
     369                        text.style.color = '#475569';
     370
     371                        const actions = document.createElement('div');
     372                        actions.style.display = 'flex';
     373                        actions.style.gap = '10px';
     374                        actions.style.justifyContent = 'center';
     375                        actions.style.flexWrap = 'wrap';
     376
     377                        const reopenBtn = document.createElement('button');
     378                        reopenBtn.type = 'button';
     379                        reopenBtn.textContent = __('Intentarlo nuevamente', 'neopayment-payment-gateway');
     380                        reopenBtn.style.border = '1px solid #2f6fb3';
     381                        reopenBtn.style.background = '#2f6fb3';
     382                        reopenBtn.style.color = '#fff';
     383                        reopenBtn.style.padding = '8px 12px';
     384                        reopenBtn.style.borderRadius = '6px';
     385                        reopenBtn.style.fontSize = '13px';
     386                        reopenBtn.style.cursor = 'pointer';
     387
     388                        const cancelBtn = document.createElement('button');
     389                        cancelBtn.type = 'button';
     390                        cancelBtn.textContent = __('Cancelar', 'neopayment-payment-gateway');
     391                        cancelBtn.style.border = '1px solid #ccd5e2';
     392                        cancelBtn.style.background = '#fff';
     393                        cancelBtn.style.color = '#22324a';
     394                        cancelBtn.style.padding = '8px 12px';
     395                        cancelBtn.style.borderRadius = '6px';
     396                        cancelBtn.style.fontSize = '13px';
     397                        cancelBtn.style.cursor = 'pointer';
     398
     399                        reopenBtn.addEventListener('click', () => {
     400                                if (!activeChallengeUrl) {
     401                                        return;
     402                                }
     403
     404                                // Challenge URLs are typically one-time.
     405                                if (popupDidOpen || popupClosedByUser) {
     406                                        closeChallengePopup(true);
     407                                        showUserMessage(
     408                                                __('Verificación incompleta', 'neopayment-payment-gateway'),
     409                                                __(
     410                                                        'Cerraste la ventana de verificación. Inténtalo nuevamente para continuar.',
     411                                                        'neopayment-payment-gateway'
     412                                                ),
     413                                                true
     414                                        );
     415                                        return;
     416                                }
     417
     418                                // Popup was blocked and never opened, safe to retry the same URL.
     419                                start3DSChallenge(activeChallengeUrl);
     420                        });
     421                        cancelBtn.addEventListener('click', () => {
     422                                if (activeChallengeUrl) {
     423                                        openedChallenges.delete(activeChallengeUrl);
     424                                }
     425                                closeChallengePopup(true);
     426                                window.location.reload();
     427                        });
     428
     429                        actions.appendChild(reopenBtn);
     430                        actions.appendChild(cancelBtn);
     431                        card.appendChild(title);
     432                        card.appendChild(text);
     433                        card.appendChild(actions);
     434                        overlay.appendChild(card);
     435                        document.body.appendChild(overlay);
     436
     437                        popupWaitElements = { overlay, text, reopenBtn };
     438                        return popupWaitElements;
     439                }
     440
     441                function showPopupWaitPanel(message, options = {}) {
     442                        const panel = ensurePopupWaitPanel();
     443                        panel.text.textContent = message;
     444                        const reopenLabel = options.reopenLabel || __('Intentarlo nuevamente', 'neopayment-payment-gateway');
     445                        panel.reopenBtn.textContent = reopenLabel;
     446                        panel.overlay.style.display = 'flex';
     447                        document.body.classList.add('neopayment-3ds-modal-open');
     448                        blockPageNavigation = true;
     449                }
     450
     451                function hidePopupWaitPanel() {
     452                        if (!popupWaitElements) {
     453                                return;
     454                        }
     455                        popupWaitElements.overlay.style.display = 'none';
     456                        document.body.classList.remove('neopayment-3ds-modal-open');
     457                        blockPageNavigation = false;
     458                }
     459
     460                function clearPopupWatch() {
     461                        if (popupWatchTimer) {
     462                                clearInterval(popupWatchTimer);
     463                                popupWatchTimer = null;
     464                        }
     465                }
     466
     467                function isPopupBlocked(popup) {
     468                        if (!popup) {
     469                                return true;
     470                        }
     471                        try {
     472                                return popup.closed === true;
     473                        } catch (e) {
     474                                return true;
     475                        }
     476                }
     477
     478                function notifyPopupBlocked() {
     479                        showUserMessage(
     480                                __('No se pudo abrir la verificación', 'neopayment-payment-gateway'),
     481                                __(
     482                                        'Tu navegador bloqueó una ventana necesaria para verificar el pago. Permite ventanas emergentes en este sitio e inténtalo nuevamente.',
     483                                        'neopayment-payment-gateway'
     484                                ),
     485                                false
     486                        );
     487                        showPopupWaitPanel(
     488                                __(
     489                                        'No pudimos abrir la verificación. Permite ventanas emergentes en tu navegador y pulsa Intentarlo nuevamente.',
     490                                        'neopayment-payment-gateway'
     491                                )
     492                        );
     493                }
     494
     495                function openChallengePopup(url) {
     496                        activeChallengeUrl = url;
     497                        callbackHandled = false;
     498                        popupClosedByUser = false;
     499
     500                        let popup = null;
     501                        try {
     502                                // Unique name avoids reusing a closing/closed window handle.
     503                                popup = window.open(
     504                                        url,
     505                                        `neopayment_3ds_${Date.now()}`,
     506                                        `width=${MODAL_WIDTH},height=${MODAL_HEIGHT},scrollbars=yes,resizable=yes`
     507                                );
     508                        } catch (e) {
     509                                popup = null;
     510                        }
     511
     512                        activeChallengePopup = popup;
     513
     514                        // Some browsers return a Window even when blocked; re-check shortly after.
     515                        window.setTimeout(() => {
     516                                if (callbackHandled) {
     517                                        return;
     518                                }
     519                                if (isPopupBlocked(popup)) {
     520                                        activeChallengePopup = null;
     521                                        popupDidOpen = false;
     522                                        notifyPopupBlocked();
     523                                        return;
     524                                }
     525
     526                                popupDidOpen = true;
     527                                showPopupWaitPanel(
     528                                        __(
     529                                                'Completa la verificación en la ventana que se abrió. Mantén esta página abierta hasta terminar.',
     530                                                'neopayment-payment-gateway'
     531                                        )
     532                                );
     533
     534                                clearPopupWatch();
     535                                popupWatchTimer = window.setInterval(() => {
     536                                        if (callbackHandled) {
     537                                                clearPopupWatch();
     538                                                return;
     539                                        }
     540                                        if (isPopupBlocked(activeChallengePopup)) {
     541                                                clearPopupWatch();
     542                                                activeChallengePopup = null;
     543                                                popupClosedByUser = true;
     544                                                if (!callbackHandled) {
     545                                                        showPopupWaitPanel(
     546                                                                __(
     547                                                                        'Cerraste la ventana de verificación. Pulsa Intentarlo nuevamente para continuar.',
     548                                                                        'neopayment-payment-gateway'
     549                                                                ),
     550                                                                {
     551                                                                        reopenLabel: __('Intentarlo nuevamente', 'neopayment-payment-gateway'),
     552                                                                }
     553                                                        );
     554                                                }
     555                                        }
     556                                }, 700);
     557                        }, 350);
     558
     559                        return popup;
     560                }
     561
     562                function closeChallengePopup(forceCloseWindow = false) {
     563                        clearPopupWatch();
     564                        hidePopupWaitPanel();
     565                        if (forceCloseWindow && activeChallengePopup && !activeChallengePopup.closed) {
     566                                try {
     567                                        activeChallengePopup.close();
     568                                } catch (e) {
     569                                        // Ignore cross-window close errors.
     570                                }
     571                        }
     572                        activeChallengePopup = null;
     573                        activeChallengeUrl = null;
     574                        callbackHandled = false;
     575                        blockPageNavigation = false;
     576                        popupDidOpen = false;
     577                        popupClosedByUser = false;
     578                }
     579
     580                /**
     581                 * Single entry point for classic / blocks / order-pay challenge opening.
     582                 */
     583                function start3DSChallenge(url) {
     584                        if (!url) {
     585                                return;
     586                        }
     587                        if (USE_3DS_MODAL) {
     588                                open3DSModal(url);
     589                                return;
     590                        }
     591                        openChallengePopup(url);
     592                }
     593
    315594                function handlePopupEvents() {
    316595                        function asObject(maybeJson) {
    … …  
    358637                                if (!openedChallenges.has(challengeUrl)) {
    359638                                        openedChallenges.add(challengeUrl);
    360                                         open3DSModal(challengeUrl);
     639                                        start3DSChallenge(challengeUrl);
    361640                                }
    362641                                if (event) {
    … …  
    423702                                }
    424703                                openedChallenges.add(response.challenge_url);
    425                                 open3DSModal(response.challenge_url);
     704                                start3DSChallenge(response.challenge_url);
    426705                                return;
    427706                        }
    … …  
    447726                                        }
    448727                                        openedChallenges.add(details.challenge_url);
    449                                         open3DSModal(details.challenge_url);
     728                                        start3DSChallenge(details.challenge_url);
    450729                                        return;
    451730                                }
    … …  
    508787                                                return;
    509788                                        }
    510                                         // Ignore messages not coming from the active 3DS iframe.
    511                                         if (!modalElements || event.source !== modalElements.iframe.contentWindow) {
     789
     790                                        const fromIframe =
     791                                                modalElements && event.source === modalElements.iframe.contentWindow;
     792                                        const fromPopup =
     793                                                activeChallengePopup && event.source === activeChallengePopup;
     794                                        if (!fromIframe && !fromPopup) {
    512795                                                return;
    513796                                        }
     797
    514798                                        callbackHandled = true;
    515                                         close3DSModal();
     799                                        if (USE_3DS_MODAL) {
     800                                                close3DSModal();
     801                                        } else {
     802                                                closeChallengePopup(true);
     803                                        }
     804
    516805                                        if (event.data.neopayment3ds === 'success') {
    517806                                                window.location.href = event.data.redirect_to || window.location.href;
    … …  
    519808                                                console.warn('[NEOPAYMENT-3DS] Authentication failed.');
    520809                                                showUserMessage(
    521                                                         __('Error de autenticación', 'neopayment-payment-gateway'),
    522                                                         __('Inténtalo nuevamente. Si el problema persiste, verifica con tu banco.', 'neopayment-payment-gateway'),
    523                                                         false
     810                                                        __('No se pudo verificar el pago', 'neopayment-payment-gateway'),
     811                                                        __(
     812                                                                'No pudimos completar la verificación. Inténtalo nuevamente. Si el problema continúa, contacta a tu banco.',
     813                                                                'neopayment-payment-gateway'
     814                                                        ),
     815                                                        true
    524816                                                );
    525817                                        }
    … …  
    543835                        }
    544836                        openedChallenges.add(raw);
    545                         open3DSModal(raw);
     837                        start3DSChallenge(raw);
    546838                        try {
    547839                                const u = new URL(window.location.href);
  • neopayment/tags/3.0.6/changelog.txt

    r3583684 r3642474  
    29292026.04.13 - version 3.0.0
    3030* Renamed plugin
     31
     322025.09.22 - version 2.5.2
     33* Changed prefix
     34* Added nonces
     35* Resubmitted plugin
    3136
    32372025.09.22 - version 2.5.1
  • neopayment/tags/3.0.6/class-neopayment-standard.php

    r3583684 r3642474  
    241241                }
    242242
     243                if ( ! $is_order_pay && $this->is_blocks_checkout_page() ) {
     244                        return;
     245                }
     246
    243247                $base = plugin_dir_url(__FILE__) . 'assets/js/';
    244248                $ver  = NEOPAYMENT_Constants::NEOPAYMENT_PLUGIN_VERSION;
    … …  
    267271                );
    268272
    269                 // Script for the 3DS popup + classic checkout.
    270                 wp_enqueue_script(
    271                         'neopayment-3ds-popup',
     273                // Classic-only handle
     274                wp_register_script(
     275                        'neopayment-3ds-popup-classic',
    272276                        $base . 'neopayment-3ds-popup.js',
    273277                        array( 'jquery', 'neopayment-sweetalert' ),
    … …  
    275279                        true
    276280                );
     281                wp_enqueue_script( 'neopayment-3ds-popup-classic' );
    277282
    278283                // This will be used to handle the 3DS challenge response.
    … …  
    304309
    305310                wp_localize_script(
    306                         'neopayment-3ds-popup',
     311                        'neopayment-3ds-popup-classic',
    307312                        'neopayment_3DS',
    308313                        $localized
    309314                );
     315        }
     316
     317        /**
     318         * Whether the current checkout page is the WooCommerce Blocks checkout.
     319         *
     320         * @return bool
     321         */
     322        private function is_blocks_checkout_page() {
     323                if ( function_exists( 'has_block' ) && has_block( 'woocommerce/checkout' ) ) {
     324                        return true;
     325                }
     326
     327                if (
     328                        class_exists( '\Automattic\WooCommerce\Blocks\Utils\CartCheckoutUtils' )
     329                        && is_callable( array( '\Automattic\WooCommerce\Blocks\Utils\CartCheckoutUtils', 'is_checkout_block_default' ) )
     330                ) {
     331                        return (bool) \Automattic\WooCommerce\Blocks\Utils\CartCheckoutUtils::is_checkout_block_default();
     332                }
     333
     334                return false;
    310335        }
    311336
  • neopayment/tags/3.0.6/i18n/neopayment-es_ES-f2678d668666585d1540a505a20c9bed.json

    r3583684 r3642474  
    1 {"translation-revision-date":"2026-04-10T22:00:54+00:00","generator":"WP-CLI\/2.12.0","source":"assets\/js\/blocks\/components\/neopayment-card-fields.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"es","plural-forms":"nplurals=2; plural=(n != 1);"},"CVC":[""],"Card holder":["T\u00edtular de la tarjeta"],"Card number":["N\u00famero de tarjeta"],"Invalid card number":["N\u00famero de tarjeta no v\u00e1lido"],"Full name":["Nombre completo"],"You must enter the holder name":["Debes introducir el nombre del titular."],"Expiration date":["Fecha de expiraci\u00f3n"],"MM\/YY":["MM\/AA"],"Invalid date":[""],"Invalid CVC":[""]}}}
     1{"translation-revision-date":"2026-04-10T22:00:54+00:00","generator":"WP-CLI\/2.12.0","source":"assets\/js\/blocks\/components\/neopayment-card-fields.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"es","plural-forms":"nplurals=2; plural=(n != 1);"},"CVC":["CVC"],"Card holder":["T\u00edtular de la tarjeta"],"Card number":["N\u00famero de tarjeta"],"Invalid card number":["N\u00famero de tarjeta no v\u00e1lido"],"Full name":["Nombre completo"],"You must enter the holder name":["Debes introducir el nombre del titular."],"Expiration date":["Fecha de expiraci\u00f3n"],"MM\/YY":["MM\/AA"],"Invalid date":["Fecha no v\u00e1lida"],"Invalid CVC":["CVC no v\u00e1lido"]}}}
  • neopayment/tags/3.0.6/i18n/neopayment-es_ES-f88ada2d7211c328208abd2a14686141.json

    r3583684 r3642474  
    1 {"translation-revision-date":"2026-04-10T22:00:54+00:00","generator":"WP-CLI\/2.12.0","source":"build\/neopayment-standard.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"es","plural-forms":"nplurals=2; plural=(n != 1);"},"CVC":[""],"Card holder":["T\u00edtular de la tarjeta"],"Card number":["N\u00famero de tarjeta"],"Invalid card number":["N\u00famero de tarjeta no v\u00e1lido"],"Card (Visa\/Mastercard)":["Tarjeta (Visa\/Mastercard)"],"Full name":["Nombre completo"],"You must enter the holder name":["Debes introducir el nombre del titular."],"Expiration date":["Fecha de expiraci\u00f3n"],"MM\/YY":["MM\/AA"],"Invalid date":[""],"Invalid CVC":[""],"Holder name is required":[""],"Neopayment Standard Gateway":[""]}}}
     1{"translation-revision-date":"2026-04-10T22:00:54+00:00","generator":"WP-CLI\/2.12.0","source":"build\/neopayment-standard.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"es","plural-forms":"nplurals=2; plural=(n != 1);"},"CVC":["CVC"],"Card holder":["T\u00edtular de la tarjeta"],"Card number":["N\u00famero de tarjeta"],"Invalid card number":["N\u00famero de tarjeta no v\u00e1lido"],"Card (Visa\/Mastercard)":["Tarjeta (Visa\/Mastercard)"],"Full name":["Nombre completo"],"You must enter the holder name":["Debes introducir el nombre del titular."],"Expiration date":["Fecha de expiraci\u00f3n"],"MM\/YY":["MM\/AA"],"Invalid date":["Fecha no v\u00e1lida"],"Invalid CVC":["CVC no v\u00e1lido"],"Holder name is required":["El nombre del titular es obligatorio"],"Neopayment Standard Gateway":["Pasarela est\u00e1ndar Neopayment"]}}}
  • neopayment/tags/3.0.6/i18n/neopayment-es_ES-fcefad2ef835a8c55a07246ba112b97e.json

    r3583684 r3642474  
    1 {"translation-revision-date":"2026-04-10T22:00:54+00:00","generator":"WP-CLI\/2.12.0","source":"assets\/js\/blocks\/neopayment-standard.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"es","plural-forms":"nplurals=2; plural=(n != 1);"},"Invalid card number":["N\u00famero de tarjeta no v\u00e1lido"],"Card (Visa\/Mastercard)":["Tarjeta (Visa\/Mastercard)"],"Invalid date":[""],"Invalid CVC":[""],"Holder name is required":[""],"Neopayment Standard Gateway":[""]}}}
     1{"translation-revision-date":"2026-04-10T22:00:54+00:00","generator":"WP-CLI\/2.12.0","source":"assets\/js\/blocks\/neopayment-standard.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"es","plural-forms":"nplurals=2; plural=(n != 1);"},"Invalid card number":["N\u00famero de tarjeta no v\u00e1lido"],"Card (Visa\/Mastercard)":["Tarjeta (Visa\/Mastercard)"],"Invalid date":["Fecha no v\u00e1lida"],"Invalid CVC":["CVC no v\u00e1lido"],"Holder name is required":["El nombre del titular es obligatorio"],"Neopayment Standard Gateway":["Pasarela est\u00e1ndar Neopayment"]}}}
  • neopayment/tags/3.0.6/includes/blocks/class-neopayment-standard-blocks.php

    r3583684 r3642474  
    4343                return array(
    4444                        'neopayment-standard-blocks-js',
    45                         'neopayment-3ds-popup',
     45                        'neopayment-3ds-popup-blocks',
    4646                );
     47        }
     48
     49        /**
     50         * Styles for the blocks payment method UI.
     51         *
     52         * @return array
     53         */
     54        public function get_payment_method_style_handles() {
     55                return array( 'neopayment-card-fields-style' );
    4756        }
    4857
  • neopayment/tags/3.0.6/includes/class-neopayment-blocks-support.php

    r3583684 r3642474  
    3838                add_action( 'init', array( __CLASS__, 'register_scripts' ) );
    3939                add_action( 'init', array( __CLASS__, 'register_styles' ) );
     40                add_action( 'wp_enqueue_scripts', array( __CLASS__, 'maybe_enqueue_checkout_styles' ), 20 );
    4041        }
    4142
    … …  
    7475                                'wp-i18n',
    7576                        ),
    76                         $standard_asset['version'] ?? NEOPAYMENT_Constants::NEOPAYMENT_PLUGIN_VERSION,
     77                        $standard_asset['version'] ?? \NEOPAYMENT_Constants::NEOPAYMENT_PLUGIN_VERSION,
    7778                        true
    7879                );
    … …  
    8485                );
    8586
     87                $popup_ver = file_exists( NEOPAYMENT_PATH . 'assets/js/neopayment-3ds-popup.js' )
     88                        ? (string) filemtime( NEOPAYMENT_PATH . 'assets/js/neopayment-3ds-popup.js' )
     89                        : \NEOPAYMENT_Constants::NEOPAYMENT_PLUGIN_VERSION;
     90
    8691                wp_register_script(
    87                         'neopayment-3ds-popup',
     92                        'neopayment-sweetalert',
     93                        NEOPAYMENT_URL . 'assets/js/sweetAlert/sweetalert.min.js',
     94                        array(),
     95                        '2.1.2',
     96                        true
     97                );
     98
     99                // Blocks-only handle
     100                wp_register_script(
     101                        'neopayment-3ds-popup-blocks',
    88102                        NEOPAYMENT_URL . 'assets/js/neopayment-3ds-popup.js',
    89                         array( 'jquery', 'neopayment-standard-blocks-js' ),
    90                         file_exists( NEOPAYMENT_PATH . 'assets/js/neopayment-3ds-popup.js' ) ? filemtime( NEOPAYMENT_PATH . 'assets/js/neopayment-3ds-popup.js' ) : NEOPAYMENT_Constants::NEOPAYMENT_PLUGIN_VERSION,
     103                        array( 'jquery', 'neopayment-sweetalert', 'neopayment-standard-blocks-js' ),
     104                        $popup_ver,
    91105                        true
    92106                );
    … …  
    116130                                'wp-i18n',
    117131                        ),
    118                         $telered_asset['version'] ?? NEOPAYMENT_Constants::NEOPAYMENT_PLUGIN_VERSION,
     132                        $telered_asset['version'] ?? \NEOPAYMENT_Constants::NEOPAYMENT_PLUGIN_VERSION,
    119133                        true
    120134                );
    … …  
    133147         */
    134148        public static function register_styles() {
    135                 wp_enqueue_style(
     149                wp_register_style(
    136150                        'neopayment-card-fields-style',
    137151                        NEOPAYMENT_URL . 'assets/css/neopayment-card-fields.css',
    138152                        array(),
    139                         '1.0.0'
     153                        \NEOPAYMENT_Constants::NEOPAYMENT_PLUGIN_VERSION
    140154                );
    141155        }
     156
     157        /**
     158         * Enqueues checkout styles for classic flows when Blocks did not load them.
     159         *
     160         * @return void
     161         */
     162        public static function maybe_enqueue_checkout_styles() {
     163                if ( wp_style_is( 'neopayment-card-fields-style', 'enqueued' ) ) {
     164                        return;
     165                }
     166
     167                $is_order_pay = function_exists( 'is_wc_endpoint_url' ) && is_wc_endpoint_url( 'order-pay' );
     168                $is_checkout  = function_exists( 'is_checkout' ) && is_checkout();
     169                if ( ! $is_checkout && ! $is_order_pay ) {
     170                        return;
     171                }
     172
     173                wp_enqueue_style( 'neopayment-card-fields-style' );
     174        }
    142175}
  • neopayment/tags/3.0.6/package-lock.json

    r3583684 r3642474  
    99      "version": "2.0.0",
    1010      "devDependencies": {
    11         "@babel/core": "^7.27.4",
     11        "@babel/core": "^7.29.6",
    1212        "@babel/preset-env": "^7.29.5",
    1313        "@babel/preset-react": "^7.27.1",
    … …  
    1818      }
    1919    },
    20     "node_modules/@ampproject/remapping": {
    21       "version": "2.3.0",
    22       "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
    23       "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
    24       "dev": true,
    25       "license": "Apache-2.0",
    26       "dependencies": {
    27         "@jridgewell/gen-mapping": "^0.3.5",
    28         "@jridgewell/trace-mapping": "^0.3.24"
    29       },
    30       "engines": {
    31         "node": ">=6.0.0"
    32       }
    33     },
    3420    "node_modules/@babel/code-frame": {
    35       "version": "7.29.0",
    36       "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
    37       "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
    38       "dev": true,
    39       "license": "MIT",
    40       "dependencies": {
    41         "@babel/helper-validator-identifier": "^7.28.5",
     21      "version": "7.29.7",
     22      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz",
     23      "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==",
     24      "dev": true,
     25      "license": "MIT",
     26      "dependencies": {
     27        "@babel/helper-validator-identifier": "^7.29.7",
    4228        "js-tokens": "^4.0.0",
    4329        "picocolors": "^1.1.1"
    … …  
    4834    },
    4935    "node_modules/@babel/compat-data": {
    50       "version": "7.29.3",
    51       "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.3.tgz",
    52       "integrity": "sha512-LIVqM46zQWZhj17qA8wb4nW/ixr2y1Nw+r1etiAWgRM6U1IqP+LNhL1yg440jYZR72jCWcWbLWzIosH+uP1fqg==",
     36      "version": "7.29.7",
     37      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz",
     38      "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==",
    5339      "dev": true,
    5440      "license": "MIT",
    … …  
    5844    },
    5945    "node_modules/@babel/core": {
    60       "version": "7.27.4",
    61       "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.4.tgz",
    62       "integrity": "sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==",
    63       "dev": true,
    64       "license": "MIT",
    65       "dependencies": {
    66         "@ampproject/remapping": "^2.2.0",
    67         "@babel/code-frame": "^7.27.1",
    68         "@babel/generator": "^7.27.3",
    69         "@babel/helper-compilation-targets": "^7.27.2",
    70         "@babel/helper-module-transforms": "^7.27.3",
    71         "@babel/helpers": "^7.27.4",
    72         "@babel/parser": "^7.27.4",
    73         "@babel/template": "^7.27.2",
    74         "@babel/traverse": "^7.27.4",
    75         "@babel/types": "^7.27.3",
     46      "version": "7.29.7",
     47      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz",
     48      "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==",
     49      "dev": true,
     50      "license": "MIT",
     51      "dependencies": {
     52        "@babel/code-frame": "^7.29.7",
     53        "@babel/generator": "^7.29.7",
     54        "@babel/helper-compilation-targets": "^7.29.7",
     55        "@babel/helper-module-transforms": "^7.29.7",
     56        "@babel/helpers": "^7.29.7",
     57        "@babel/parser": "^7.29.7",
     58        "@babel/template": "^7.29.7",
     59        "@babel/traverse": "^7.29.7",
     60        "@babel/types": "^7.29.7",
     61        "@jridgewell/remapping": "^2.3.5",
    7662        "convert-source-map": "^2.0.0",
    7763        "debug": "^4.1.0",
    … …  
    8975    },
    9076    "node_modules/@babel/generator": {
    91       "version": "7.29.1",
    92       "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz",
    93       "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==",
    94       "dev": true,
    95       "license": "MIT",
    96       "dependencies": {
    97         "@babel/parser": "^7.29.0",
    98         "@babel/types": "^7.29.0",
     77      "version": "7.29.8",
     78      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.8.tgz",
     79      "integrity": "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==",
     80      "dev": true,
     81      "license": "MIT",
     82      "dependencies": {
     83        "@babel/parser": "^7.29.8",
     84        "@babel/types": "^7.29.8",
    9985        "@jridgewell/gen-mapping": "^0.3.12",
    10086        "@jridgewell/trace-mapping": "^0.3.28",
    … …  
    119105    },
    120106    "node_modules/@babel/helper-compilation-targets": {
    121       "version": "7.28.6",
    122       "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz",
    123       "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==",
    124       "dev": true,
    125       "license": "MIT",
    126       "dependencies": {
    127         "@babel/compat-data": "^7.28.6",
    128         "@babel/helper-validator-option": "^7.27.1",
     107      "version": "7.29.7",
     108      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz",
     109      "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==",
     110      "dev": true,
     111      "license": "MIT",
     112      "dependencies": {
     113        "@babel/compat-data": "^7.29.7",
     114        "@babel/helper-validator-option": "^7.29.7",
    129115        "browserslist": "^4.24.0",
    130116        "lru-cache": "^5.1.1",
    … …  
    193179    },
    194180    "node_modules/@babel/helper-globals": {
    195       "version": "7.28.0",
    196       "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz",
    197       "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==",
     181      "version": "7.29.7",
     182      "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz",
     183      "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==",
    198184      "dev": true,
    199185      "license": "MIT",
    … …  
    217203    },
    218204    "node_modules/@babel/helper-module-imports": {
    219       "version": "7.28.6",
    220       "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz",
    221       "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==",
    222       "dev": true,
    223       "license": "MIT",
    224       "dependencies": {
    225         "@babel/traverse": "^7.28.6",
    226         "@babel/types": "^7.28.6"
     205      "version": "7.29.7",
     206      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz",
     207      "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==",
     208      "dev": true,
     209      "license": "MIT",
     210      "dependencies": {
     211        "@babel/traverse": "^7.29.7",
     212        "@babel/types": "^7.29.7"
    227213      },
    228214      "engines": {
    … …  
    231217    },
    232218    "node_modules/@babel/helper-module-transforms": {
    233       "version": "7.28.6",
    234       "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz",
    235       "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==",
    236       "dev": true,
    237       "license": "MIT",
    238       "dependencies": {
    239         "@babel/helper-module-imports": "^7.28.6",
    240         "@babel/helper-validator-identifier": "^7.28.5",
    241         "@babel/traverse": "^7.28.6"
     219      "version": "7.29.7",
     220      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz",
     221      "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==",
     222      "dev": true,
     223      "license": "MIT",
     224      "dependencies": {
     225        "@babel/helper-module-imports": "^7.29.7",
     226        "@babel/helper-validator-identifier": "^7.29.7",
     227        "@babel/traverse": "^7.29.7"
    242228      },
    243229      "engines": {
    … …  
    322308    },
    323309    "node_modules/@babel/helper-string-parser": {
    324       "version": "7.27.1",
    325       "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
    326       "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
     310      "version": "7.29.7",
     311      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz",
     312      "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==",
    327313      "dev": true,
    328314      "license": "MIT",
    … …  
    332318    },
    333319    "node_modules/@babel/helper-validator-identifier": {
    334       "version": "7.28.5",
    335       "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
    336       "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==",
     320      "version": "7.29.7",
     321      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz",
     322      "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==",
    337323      "dev": true,
    338324      "license": "MIT",
    … …  
    342328    },
    343329    "node_modules/@babel/helper-validator-option": {
    344       "version": "7.27.1",
    345       "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz",
    346       "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==",
     330      "version": "7.29.7",
     331      "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz",
     332      "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==",
    347333      "dev": true,
    348334      "license": "MIT",
    … …  
    367353    },
    368354    "node_modules/@babel/helpers": {
    369       "version": "7.27.6",
    370       "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.6.tgz",
    371       "integrity": "sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==",
    372       "dev": true,
    373       "license": "MIT",
    374       "dependencies": {
    375         "@babel/template": "^7.27.2",
    376         "@babel/types": "^7.27.6"
     355      "version": "7.29.7",
     356      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz",
     357      "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==",
     358      "dev": true,
     359      "license": "MIT",
     360      "dependencies": {
     361        "@babel/template": "^7.29.7",
     362        "@babel/types": "^7.29.7"
    377363      },
    378364      "engines": {
    … …  
    381367    },
    382368    "node_modules/@babel/parser": {
    383       "version": "7.29.3",
    384       "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.3.tgz",
    385       "integrity": "sha512-b3ctpQwp+PROvU/cttc4OYl4MzfJUWy6FZg+PMXfzmt/+39iHVF0sDfqay8TQM3JA2EUOyKcFZt75jWriQijsA==",
    386       "dev": true,
    387       "license": "MIT",
    388       "dependencies": {
    389         "@babel/types": "^7.29.0"
     369      "version": "7.29.8",
     370      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.8.tgz",
     371      "integrity": "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==",
     372      "dev": true,
     373      "license": "MIT",
     374      "dependencies": {
     375        "@babel/types": "^7.29.8"
    390376      },
    391377      "bin": {
    … …  
    16231609    },
    16241610    "node_modules/@babel/template": {
    1625       "version": "7.28.6",
    1626       "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz",
    1627       "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==",
    1628       "dev": true,
    1629       "license": "MIT",
    1630       "dependencies": {
    1631         "@babel/code-frame": "^7.28.6",
    1632         "@babel/parser": "^7.28.6",
    1633         "@babel/types": "^7.28.6"
     1611      "version": "7.29.7",
     1612      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz",
     1613      "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==",
     1614      "dev": true,
     1615      "license": "MIT",
     1616      "dependencies": {
     1617        "@babel/code-frame": "^7.29.7",
     1618        "@babel/parser": "^7.29.7",
     1619        "@babel/types": "^7.29.7"
    16341620      },
    16351621      "engines": {
    … …  
    16381624    },
    16391625    "node_modules/@babel/traverse": {
    1640       "version": "7.29.0",
    1641       "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz",
    1642       "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==",
    1643       "dev": true,
    1644       "license": "MIT",
    1645       "dependencies": {
    1646         "@babel/code-frame": "^7.29.0",
    1647         "@babel/generator": "^7.29.0",
    1648         "@babel/helper-globals": "^7.28.0",
    1649         "@babel/parser": "^7.29.0",
    1650         "@babel/template": "^7.28.6",
    1651         "@babel/types": "^7.29.0",
     1626      "version": "7.29.8",
     1627      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.8.tgz",
     1628      "integrity": "sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==",
     1629      "dev": true,
     1630      "license": "MIT",
     1631      "dependencies": {
     1632        "@babel/code-frame": "^7.29.7",
     1633        "@babel/generator": "^7.29.8",
     1634        "@babel/helper-globals": "^7.29.7",
     1635        "@babel/parser": "^7.29.8",
     1636        "@babel/template": "^7.29.7",
     1637        "@babel/types": "^7.29.8",
    16521638        "debug": "^4.3.1"
    16531639      },
    … …  
    16571643    },
    16581644    "node_modules/@babel/types": {
    1659       "version": "7.29.0",
    1660       "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz",
    1661       "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==",
    1662       "dev": true,
    1663       "license": "MIT",
    1664       "dependencies": {
    1665         "@babel/helper-string-parser": "^7.27.1",
    1666         "@babel/helper-validator-identifier": "^7.28.5"
     1645      "version": "7.29.8",
     1646      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz",
     1647      "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==",
     1648      "dev": true,
     1649      "license": "MIT",
     1650      "dependencies": {
     1651        "@babel/helper-string-parser": "^7.29.7",
     1652        "@babel/helper-validator-identifier": "^7.29.7"
    16671653      },
    16681654      "engines": {
    … …  
    16881674      "dependencies": {
    16891675        "@jridgewell/sourcemap-codec": "^1.5.0",
     1676        "@jridgewell/trace-mapping": "^0.3.24"
     1677      }
     1678    },
     1679    "node_modules/@jridgewell/remapping": {
     1680      "version": "2.3.5",
     1681      "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
     1682      "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
     1683      "dev": true,
     1684      "license": "MIT",
     1685      "dependencies": {
     1686        "@jridgewell/gen-mapping": "^0.3.5",
    16901687        "@jridgewell/trace-mapping": "^0.3.24"
    16911688      }
    … …  
    25312528    },
    25322529    "node_modules/fast-uri": {
    2533       "version": "3.1.2",
    2534       "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.2.tgz",
    2535       "integrity": "sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==",
     2530      "version": "4.1.2",
     2531      "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-4.1.2.tgz",
     2532      "integrity": "sha512-TyGmBcbDTZXcb2cj5MV89DrF42DKvb3y5DDUNh95iO+IMeAzMkVSxK1PZRrRIpc9yg8U2GhGdbofNa0LS/a4Bw==",
    25362533      "dev": true,
    25372534      "funding": [
  • neopayment/tags/3.0.6/package.json

    r3583684 r3642474  
    88  },
    99  "overrides": {
    10     "fast-uri": ">=3.1.1",
     10    "fast-uri": ">=3.1.5",
    1111    "@babel/plugin-transform-modules-systemjs": ">=7.29.4"
    1212  },
    1313  "devDependencies": {
    14     "@babel/core": "^7.27.4",
     14    "@babel/core": "^7.29.6",
    1515    "@babel/preset-env": "^7.29.5",
    1616    "@babel/preset-react": "^7.27.1",
  • neopayment/tags/3.0.6/readme.txt

    r3583684 r3642474  
    44442. Activate the plugin through the \'Plugins\' screen in WordPress.
    45453. Go to **WooCommerce > Settings > Payments** and enable the \"Neopayment\".
    46 4. Configure your Neopayment credentials and settings.
     464. Enable the **Neopayment** payment method.
     475. Configure your Neopayment credentials and settings.
     486. Save the changes and perform a test transaction before using the plugin in production.
     49
    4750
    4851== Frequently Asked Questions ==
    … …  
    6063Yes. You must be an approved merchant with Neopayment to use this plugin.
    6164
     65== Screenshots ==
     66
     671. Neopayment payment method configuration in WooCommerce.
     682. Neopayment payment option displayed at checkout.
     69
    6270== Changelog ==
     71
     722026.06.23 - version 3.0.5
     73* Fix workflows
     74
     752026.06.23 - version 3.0.4
     76* Added GitHub workflows
     77
     782026.05.12 - version 3.0.2
     79* Added support for pay_for_order flows and 3DS challenge handling
     80* Fix OAuth token management for prod and test mode
     81* Fix 3DS on order-pay mode
     82* Updated payment gateway scripts and dependencies
     83
     842026.05.06 - version 3.0.1
     85* Introduced modal-based flow for 3D Secure replacing popup
     86* Improved 3DS processing feedback and error handling
     87* Fix plugin check errors based on WordPress feedback
     88* Fix scripts enqueued on cart pages
     89
     902026.04.13 - version 3.0.0
     91* Renamed plugin to Neopayment
     92
    63932025.09.22 - version 2.5.2
    6494* Changed prefix
  • neopayment/trunk/assets/css/neopayment-card-fields.css

    r3583684 r3642474  
    3535
    3636
    37 .required {
    38         color: #e74c3c;
    39         margin-left: 0.25rem;
    40         font-weight: bold;
    41         font-size: 1rem;
    42 }
    43 
    44 .neopayment-card-fields {
    45         padding: 10px;
    46         display: flex;
    47         flex-direction: column;
    48         gap: 15px;
    49         max-width: 100%;
    50 }
    51 
    52 .neopayment-card-fields__row {
    53         display: flex;
    54         gap: 15px;
    55         flex-wrap: wrap;
    56 }
    57 
    58 .neopayment-card-fields__group {
    59         flex: 1 1 1px;
    60         display: flex;
    61         flex-direction: column;
    62 }
    63 
    64 .neopayment-card-fields input {
    65         padding: 8px;
    66         font-size: 14px;
    67         border: 1px solid #ccc;
    68         border-radius: 4px;
    69 }
    70 
    71 .neopayment-card-fields__error {
    72         color: #e74c3c;
    73         font-size: 0.875rem;
    74         margin-top: 0.25rem;
    75         display: block;
    76         line-height: 1.2;
    77 }
    78 
    79 .required {
     37.neopayment-card-fields .required,
     38.wc-credit-card-form .required {
    8039        color: #e74c3c;
    8140        margin-left: 0.25rem;
  • neopayment/trunk/assets/js/neopayment-3ds-popup.js

    r3583684 r3642474  
    1 const __ = (window.wp && window.wp.i18n && window.wp.i18n.__)
    2         ? window.wp.i18n.__
    3         : (s) => s;
    4 
    51jQuery(
    62        ($) => {
     3                const __ = (window.wp && window.wp.i18n && window.wp.i18n.__)
     4                        ? window.wp.i18n.__
     5                        : (s) => s;
     6
     7                /**
     8                 * Toggle challenge UI:
     9                 * - false (default): open 3DS in a browser popup window.
     10                 * - true: iframe modal flow.
     11                 */
     12                const USE_3DS_MODAL = false;
     13
    714                const MODAL_WIDTH = 560;
    815                const MODAL_HEIGHT = 760;
    916                const openedChallenges = new Set();
    1017                let modalElements = null;
     18                let popupWaitElements = null;
    1119                let iframeLoadTimer = null;
    1220                let fallbackCountdownTimer = null;
    1321                let processingHintTimer = null;
     22                let popupWatchTimer = null;
    1423                let activeChallengeUrl = null;
     24                let activeChallengePopup = null;
    1525                let frameLoadCount = 0;
    1626                let callbackHandled = false;
    1727                let blockPageNavigation = false;
     28                /** True once a popup window actually opened (not blocked). */
     29                let popupDidOpen = false;
     30                /** True when the shopper closed the popup before finishing 3DS. */
     31                let popupClosedByUser = false;
     32
     33                /* ------------------------------------------------------------------ */
     34                /* Modal */
     35                /* ------------------------------------------------------------------ */
    1836
    1937                function ensure3DSModal() {
    … …  
    6482
    6583                        const title = document.createElement('span');
    66                         title.textContent = __('Verificación segura 3DS', 'neopayment-payment-gateway');
     84                        title.textContent = __('Verificación de seguridad', 'neopayment-payment-gateway');
    6785
    6886                        const iframe = document.createElement('iframe');
    6987                        iframe.className = 'neopayment-3ds-modal__frame';
    70                         iframe.setAttribute('title', __('Autenticación 3DS', 'neopayment-payment-gateway'));
     88                        iframe.setAttribute('title', __('Verificación de seguridad', 'neopayment-payment-gateway'));
    7189                        iframe.setAttribute('allow', 'payment');
    7290                        iframe.style.height = `${MODAL_HEIGHT}px`;
    … …  
    98116
    99117                        const processingText = document.createElement('p');
    100                         processingText.textContent = __('Procesando autenticación 3DS. Por favor espere...', 'neopayment-payment-gateway');
     118                        processingText.textContent = __('Estamos verificando tu pago. Un momento, por favor…', 'neopayment-payment-gateway');
    101119                        processingText.style.margin = '0';
    102120                        processingText.style.fontSize = '14px';
    … …  
    129147                        openWindowBtn.type = 'button';
    130148                        openWindowBtn.className = 'neopayment-3ds-modal__open-window';
    131                         openWindowBtn.textContent = __('Abrir en nueva ventana', 'neopayment-payment-gateway');
     149                        openWindowBtn.textContent = __('Abrir en otra ventana', 'neopayment-payment-gateway');
    132150                        openWindowBtn.style.border = '1px solid #ccd5e2';
    133151                        openWindowBtn.style.background = '#fff';
    … …  
    142160                        cancelBtn.type = 'button';
    143161                        cancelBtn.className = 'neopayment-3ds-modal__cancel';
    144                         cancelBtn.textContent = __('Cancelar verificación', 'neopayment-payment-gateway');
     162                        cancelBtn.textContent = __('Cancelar', 'neopayment-payment-gateway');
    145163                        cancelBtn.style.border = '1px solid #ccd5e2';
    146164                        cancelBtn.style.background = '#fff';
    … …  
    220238                        let remaining = seconds;
    221239                        setModalStatus(
    222                                 __(
    223                                         'Cargando verificación 3DS... Si tarda demasiado, podrás abrirla en nueva ventana en',
    224                                         'neopayment-payment-gateway'
    225                                 ) + ` ${remaining}s`
     240                                __('Cargando la verificación… Si tarda mucho, podrás abrirla en otra ventana en', 'neopayment-payment-gateway') +
     241                                        ` ${remaining}s`
    226242                        );
    227243                        clearFallbackCountdown();
    … …  
    233249                                }
    234250                                setModalStatus(
    235                                         __(
    236                                                 'Cargando verificación 3DS... Si tarda demasiado, podrás abrirla en nueva ventana en',
    237                                                 'neopayment-payment-gateway'
    238                                         ) + ` ${remaining}s`
     251                                        __('Cargando la verificación… Si tarda mucho, podrás abrirla en otra ventana en', 'neopayment-payment-gateway') +
     252                                                ` ${remaining}s`
    239253                                );
    240254                        }, 1000);
    … …  
    263277                                showProcessingLayer(false);
    264278                                toggleOpenWindowButton(true);
    265                                 setModalStatus(__('La verificación está tardando. Si lo prefieres, ábrela en una nueva ventana.', 'neopayment-payment-gateway'));
     279                                setModalStatus(__('Esto está tardando más de lo habitual. Puedes abrirlo en otra ventana.', 'neopayment-payment-gateway'));
    266280                        }, 7000);
    267281
    … …  
    283297                                        showProcessingLayer(false);
    284298                                        toggleOpenWindowButton(false);
    285                                         setModalStatus(__('Procesando autenticación 3DS. Por favor espere...', 'neopayment-payment-gateway'));
     299                                        setModalStatus(__('Estamos verificando tu pago. Un momento, por favor…', 'neopayment-payment-gateway'));
    286300                                }
    287301                        };
    … …  
    313327                }
    314328
     329                /* ------------------------------------------------------------------ */
     330                /* Popup flow (default)                                               */
     331                /* ------------------------------------------------------------------ */
     332
     333                function ensurePopupWaitPanel() {
     334                        if (popupWaitElements) {
     335                                return popupWaitElements;
     336                        }
     337
     338                        const overlay = document.createElement('div');
     339                        overlay.className = 'neopayment-3ds-popup-wait';
     340                        overlay.style.position = 'fixed';
     341                        overlay.style.inset = '0';
     342                        overlay.style.display = 'none';
     343                        overlay.style.alignItems = 'center';
     344                        overlay.style.justifyContent = 'center';
     345                        overlay.style.background = 'rgba(0,0,0,.55)';
     346                        overlay.style.zIndex = '99998';
     347                        overlay.style.padding = '16px';
     348
     349                        const card = document.createElement('div');
     350                        card.style.maxWidth = '420px';
     351                        card.style.width = '100%';
     352                        card.style.background = '#fff';
     353                        card.style.borderRadius = '10px';
     354                        card.style.boxShadow = '0 16px 50px rgba(0,0,0,.35)';
     355                        card.style.padding = '20px 18px';
     356                        card.style.textAlign = 'center';
     357
     358                        const title = document.createElement('h3');
     359                        title.textContent = __('Verificación de seguridad', 'neopayment-payment-gateway');
     360                        title.style.margin = '0 0 10px';
     361                        title.style.fontSize = '18px';
     362                        title.style.color = '#22324a';
     363
     364                        const text = document.createElement('p');
     365                        text.className = 'neopayment-3ds-popup-wait__text';
     366                        text.style.margin = '0 0 16px';
     367                        text.style.fontSize = '14px';
     368                        text.style.lineHeight = '1.45';
     369                        text.style.color = '#475569';
     370
     371                        const actions = document.createElement('div');
     372                        actions.style.display = 'flex';
     373                        actions.style.gap = '10px';
     374                        actions.style.justifyContent = 'center';
     375                        actions.style.flexWrap = 'wrap';
     376
     377                        const reopenBtn = document.createElement('button');
     378                        reopenBtn.type = 'button';
     379                        reopenBtn.textContent = __('Intentarlo nuevamente', 'neopayment-payment-gateway');
     380                        reopenBtn.style.border = '1px solid #2f6fb3';
     381                        reopenBtn.style.background = '#2f6fb3';
     382                        reopenBtn.style.color = '#fff';
     383                        reopenBtn.style.padding = '8px 12px';
     384                        reopenBtn.style.borderRadius = '6px';
     385                        reopenBtn.style.fontSize = '13px';
     386                        reopenBtn.style.cursor = 'pointer';
     387
     388                        const cancelBtn = document.createElement('button');
     389                        cancelBtn.type = 'button';
     390                        cancelBtn.textContent = __('Cancelar', 'neopayment-payment-gateway');
     391                        cancelBtn.style.border = '1px solid #ccd5e2';
     392                        cancelBtn.style.background = '#fff';
     393                        cancelBtn.style.color = '#22324a';
     394                        cancelBtn.style.padding = '8px 12px';
     395                        cancelBtn.style.borderRadius = '6px';
     396                        cancelBtn.style.fontSize = '13px';
     397                        cancelBtn.style.cursor = 'pointer';
     398
     399                        reopenBtn.addEventListener('click', () => {
     400                                if (!activeChallengeUrl) {
     401                                        return;
     402                                }
     403
     404                                // Challenge URLs are typically one-time.
     405                                if (popupDidOpen || popupClosedByUser) {
     406                                        closeChallengePopup(true);
     407                                        showUserMessage(
     408                                                __('Verificación incompleta', 'neopayment-payment-gateway'),
     409                                                __(
     410                                                        'Cerraste la ventana de verificación. Inténtalo nuevamente para continuar.',
     411                                                        'neopayment-payment-gateway'
     412                                                ),
     413                                                true
     414                                        );
     415                                        return;
     416                                }
     417
     418                                // Popup was blocked and never opened, safe to retry the same URL.
     419                                start3DSChallenge(activeChallengeUrl);
     420                        });
     421                        cancelBtn.addEventListener('click', () => {
     422                                if (activeChallengeUrl) {
     423                                        openedChallenges.delete(activeChallengeUrl);
     424                                }
     425                                closeChallengePopup(true);
     426                                window.location.reload();
     427                        });
     428
     429                        actions.appendChild(reopenBtn);
     430                        actions.appendChild(cancelBtn);
     431                        card.appendChild(title);
     432                        card.appendChild(text);
     433                        card.appendChild(actions);
     434                        overlay.appendChild(card);
     435                        document.body.appendChild(overlay);
     436
     437                        popupWaitElements = { overlay, text, reopenBtn };
     438                        return popupWaitElements;
     439                }
     440
     441                function showPopupWaitPanel(message, options = {}) {
     442                        const panel = ensurePopupWaitPanel();
     443                        panel.text.textContent = message;
     444                        const reopenLabel = options.reopenLabel || __('Intentarlo nuevamente', 'neopayment-payment-gateway');
     445                        panel.reopenBtn.textContent = reopenLabel;
     446                        panel.overlay.style.display = 'flex';
     447                        document.body.classList.add('neopayment-3ds-modal-open');
     448                        blockPageNavigation = true;
     449                }
     450
     451                function hidePopupWaitPanel() {
     452                        if (!popupWaitElements) {
     453                                return;
     454                        }
     455                        popupWaitElements.overlay.style.display = 'none';
     456                        document.body.classList.remove('neopayment-3ds-modal-open');
     457                        blockPageNavigation = false;
     458                }
     459
     460                function clearPopupWatch() {
     461                        if (popupWatchTimer) {
     462                                clearInterval(popupWatchTimer);
     463                                popupWatchTimer = null;
     464                        }
     465                }
     466
     467                function isPopupBlocked(popup) {
     468                        if (!popup) {
     469                                return true;
     470                        }
     471                        try {
     472                                return popup.closed === true;
     473                        } catch (e) {
     474                                return true;
     475                        }
     476                }
     477
     478                function notifyPopupBlocked() {
     479                        showUserMessage(
     480                                __('No se pudo abrir la verificación', 'neopayment-payment-gateway'),
     481                                __(
     482                                        'Tu navegador bloqueó una ventana necesaria para verificar el pago. Permite ventanas emergentes en este sitio e inténtalo nuevamente.',
     483                                        'neopayment-payment-gateway'
     484                                ),
     485                                false
     486                        );
     487                        showPopupWaitPanel(
     488                                __(
     489                                        'No pudimos abrir la verificación. Permite ventanas emergentes en tu navegador y pulsa Intentarlo nuevamente.',
     490                                        'neopayment-payment-gateway'
     491                                )
     492                        );
     493                }
     494
     495                function openChallengePopup(url) {
     496                        activeChallengeUrl = url;
     497                        callbackHandled = false;
     498                        popupClosedByUser = false;
     499
     500                        let popup = null;
     501                        try {
     502                                // Unique name avoids reusing a closing/closed window handle.
     503                                popup = window.open(
     504                                        url,
     505                                        `neopayment_3ds_${Date.now()}`,
     506                                        `width=${MODAL_WIDTH},height=${MODAL_HEIGHT},scrollbars=yes,resizable=yes`
     507                                );
     508                        } catch (e) {
     509                                popup = null;
     510                        }
     511
     512                        activeChallengePopup = popup;
     513
     514                        // Some browsers return a Window even when blocked; re-check shortly after.
     515                        window.setTimeout(() => {
     516                                if (callbackHandled) {
     517                                        return;
     518                                }
     519                                if (isPopupBlocked(popup)) {
     520                                        activeChallengePopup = null;
     521                                        popupDidOpen = false;
     522                                        notifyPopupBlocked();
     523                                        return;
     524                                }
     525
     526                                popupDidOpen = true;
     527                                showPopupWaitPanel(
     528                                        __(
     529                                                'Completa la verificación en la ventana que se abrió. Mantén esta página abierta hasta terminar.',
     530                                                'neopayment-payment-gateway'
     531                                        )
     532                                );
     533
     534                                clearPopupWatch();
     535                                popupWatchTimer = window.setInterval(() => {
     536                                        if (callbackHandled) {
     537                                                clearPopupWatch();
     538                                                return;
     539                                        }
     540                                        if (isPopupBlocked(activeChallengePopup)) {
     541                                                clearPopupWatch();
     542                                                activeChallengePopup = null;
     543                                                popupClosedByUser = true;
     544                                                if (!callbackHandled) {
     545                                                        showPopupWaitPanel(
     546                                                                __(
     547                                                                        'Cerraste la ventana de verificación. Pulsa Intentarlo nuevamente para continuar.',
     548                                                                        'neopayment-payment-gateway'
     549                                                                ),
     550                                                                {
     551                                                                        reopenLabel: __('Intentarlo nuevamente', 'neopayment-payment-gateway'),
     552                                                                }
     553                                                        );
     554                                                }
     555                                        }
     556                                }, 700);
     557                        }, 350);
     558
     559                        return popup;
     560                }
     561
     562                function closeChallengePopup(forceCloseWindow = false) {
     563                        clearPopupWatch();
     564                        hidePopupWaitPanel();
     565                        if (forceCloseWindow && activeChallengePopup && !activeChallengePopup.closed) {
     566                                try {
     567                                        activeChallengePopup.close();
     568                                } catch (e) {
     569                                        // Ignore cross-window close errors.
     570                                }
     571                        }
     572                        activeChallengePopup = null;
     573                        activeChallengeUrl = null;
     574                        callbackHandled = false;
     575                        blockPageNavigation = false;
     576                        popupDidOpen = false;
     577                        popupClosedByUser = false;
     578                }
     579
     580                /**
     581                 * Single entry point for classic / blocks / order-pay challenge opening.
     582                 */
     583                function start3DSChallenge(url) {
     584                        if (!url) {
     585                                return;
     586                        }
     587                        if (USE_3DS_MODAL) {
     588                                open3DSModal(url);
     589                                return;
     590                        }
     591                        openChallengePopup(url);
     592                }
     593
    315594                function handlePopupEvents() {
    316595                        function asObject(maybeJson) {
    … …  
    358637                                if (!openedChallenges.has(challengeUrl)) {
    359638                                        openedChallenges.add(challengeUrl);
    360                                         open3DSModal(challengeUrl);
     639                                        start3DSChallenge(challengeUrl);
    361640                                }
    362641                                if (event) {
    … …  
    423702                                }
    424703                                openedChallenges.add(response.challenge_url);
    425                                 open3DSModal(response.challenge_url);
     704                                start3DSChallenge(response.challenge_url);
    426705                                return;
    427706                        }
    … …  
    447726                                        }
    448727                                        openedChallenges.add(details.challenge_url);
    449                                         open3DSModal(details.challenge_url);
     728                                        start3DSChallenge(details.challenge_url);
    450729                                        return;
    451730                                }
    … …  
    508787                                                return;
    509788                                        }
    510                                         // Ignore messages not coming from the active 3DS iframe.
    511                                         if (!modalElements || event.source !== modalElements.iframe.contentWindow) {
     789
     790                                        const fromIframe =
     791                                                modalElements && event.source === modalElements.iframe.contentWindow;
     792                                        const fromPopup =
     793                                                activeChallengePopup && event.source === activeChallengePopup;
     794                                        if (!fromIframe && !fromPopup) {
    512795                                                return;
    513796                                        }
     797
    514798                                        callbackHandled = true;
    515                                         close3DSModal();
     799                                        if (USE_3DS_MODAL) {
     800                                                close3DSModal();
     801                                        } else {
     802                                                closeChallengePopup(true);
     803                                        }
     804
    516805                                        if (event.data.neopayment3ds === 'success') {
    517806                                                window.location.href = event.data.redirect_to || window.location.href;
    … …  
    519808                                                console.warn('[NEOPAYMENT-3DS] Authentication failed.');
    520809                                                showUserMessage(
    521                                                         __('Error de autenticación', 'neopayment-payment-gateway'),
    522                                                         __('Inténtalo nuevamente. Si el problema persiste, verifica con tu banco.', 'neopayment-payment-gateway'),
    523                                                         false
     810                                                        __('No se pudo verificar el pago', 'neopayment-payment-gateway'),
     811                                                        __(
     812                                                                'No pudimos completar la verificación. Inténtalo nuevamente. Si el problema continúa, contacta a tu banco.',
     813                                                                'neopayment-payment-gateway'
     814                                                        ),
     815                                                        true
    524816                                                );
    525817                                        }
    … …  
    543835                        }
    544836                        openedChallenges.add(raw);
    545                         open3DSModal(raw);
     837                        start3DSChallenge(raw);
    546838                        try {
    547839                                const u = new URL(window.location.href);
  • neopayment/trunk/changelog.txt

    r3583684 r3642474  
    29292026.04.13 - version 3.0.0
    3030* Renamed plugin
     31
     322025.09.22 - version 2.5.2
     33* Changed prefix
     34* Added nonces
     35* Resubmitted plugin
    3136
    32372025.09.22 - version 2.5.1
  • neopayment/trunk/class-neopayment-standard.php

    r3583684 r3642474  
    241241                }
    242242
     243                if ( ! $is_order_pay && $this->is_blocks_checkout_page() ) {
     244                        return;
     245                }
     246
    243247                $base = plugin_dir_url(__FILE__) . 'assets/js/';
    244248                $ver  = NEOPAYMENT_Constants::NEOPAYMENT_PLUGIN_VERSION;
    … …  
    267271                );
    268272
    269                 // Script for the 3DS popup + classic checkout.
    270                 wp_enqueue_script(
    271                         'neopayment-3ds-popup',
     273                // Classic-only handle
     274                wp_register_script(
     275                        'neopayment-3ds-popup-classic',
    272276                        $base . 'neopayment-3ds-popup.js',
    273277                        array( 'jquery', 'neopayment-sweetalert' ),
    … …  
    275279                        true
    276280                );
     281                wp_enqueue_script( 'neopayment-3ds-popup-classic' );
    277282
    278283                // This will be used to handle the 3DS challenge response.
    … …  
    304309
    305310                wp_localize_script(
    306                         'neopayment-3ds-popup',
     311                        'neopayment-3ds-popup-classic',
    307312                        'neopayment_3DS',
    308313                        $localized
    309314                );
     315        }
     316
     317        /**
     318         * Whether the current checkout page is the WooCommerce Blocks checkout.
     319         *
     320         * @return bool
     321         */
     322        private function is_blocks_checkout_page() {
     323                if ( function_exists( 'has_block' ) && has_block( 'woocommerce/checkout' ) ) {
     324                        return true;
     325                }
     326
     327                if (
     328                        class_exists( '\Automattic\WooCommerce\Blocks\Utils\CartCheckoutUtils' )
     329                        && is_callable( array( '\Automattic\WooCommerce\Blocks\Utils\CartCheckoutUtils', 'is_checkout_block_default' ) )
     330                ) {
     331                        return (bool) \Automattic\WooCommerce\Blocks\Utils\CartCheckoutUtils::is_checkout_block_default();
     332                }
     333
     334                return false;
    310335        }
    311336
  • neopayment/trunk/i18n/neopayment-es_ES-f2678d668666585d1540a505a20c9bed.json

    r3583684 r3642474  
    1 {"translation-revision-date":"2026-04-10T22:00:54+00:00","generator":"WP-CLI\/2.12.0","source":"assets\/js\/blocks\/components\/neopayment-card-fields.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"es","plural-forms":"nplurals=2; plural=(n != 1);"},"CVC":[""],"Card holder":["T\u00edtular de la tarjeta"],"Card number":["N\u00famero de tarjeta"],"Invalid card number":["N\u00famero de tarjeta no v\u00e1lido"],"Full name":["Nombre completo"],"You must enter the holder name":["Debes introducir el nombre del titular."],"Expiration date":["Fecha de expiraci\u00f3n"],"MM\/YY":["MM\/AA"],"Invalid date":[""],"Invalid CVC":[""]}}}
     1{"translation-revision-date":"2026-04-10T22:00:54+00:00","generator":"WP-CLI\/2.12.0","source":"assets\/js\/blocks\/components\/neopayment-card-fields.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"es","plural-forms":"nplurals=2; plural=(n != 1);"},"CVC":["CVC"],"Card holder":["T\u00edtular de la tarjeta"],"Card number":["N\u00famero de tarjeta"],"Invalid card number":["N\u00famero de tarjeta no v\u00e1lido"],"Full name":["Nombre completo"],"You must enter the holder name":["Debes introducir el nombre del titular."],"Expiration date":["Fecha de expiraci\u00f3n"],"MM\/YY":["MM\/AA"],"Invalid date":["Fecha no v\u00e1lida"],"Invalid CVC":["CVC no v\u00e1lido"]}}}
  • neopayment/trunk/i18n/neopayment-es_ES-f88ada2d7211c328208abd2a14686141.json

    r3583684 r3642474  
    1 {"translation-revision-date":"2026-04-10T22:00:54+00:00","generator":"WP-CLI\/2.12.0","source":"build\/neopayment-standard.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"es","plural-forms":"nplurals=2; plural=(n != 1);"},"CVC":[""],"Card holder":["T\u00edtular de la tarjeta"],"Card number":["N\u00famero de tarjeta"],"Invalid card number":["N\u00famero de tarjeta no v\u00e1lido"],"Card (Visa\/Mastercard)":["Tarjeta (Visa\/Mastercard)"],"Full name":["Nombre completo"],"You must enter the holder name":["Debes introducir el nombre del titular."],"Expiration date":["Fecha de expiraci\u00f3n"],"MM\/YY":["MM\/AA"],"Invalid date":[""],"Invalid CVC":[""],"Holder name is required":[""],"Neopayment Standard Gateway":[""]}}}
     1{"translation-revision-date":"2026-04-10T22:00:54+00:00","generator":"WP-CLI\/2.12.0","source":"build\/neopayment-standard.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"es","plural-forms":"nplurals=2; plural=(n != 1);"},"CVC":["CVC"],"Card holder":["T\u00edtular de la tarjeta"],"Card number":["N\u00famero de tarjeta"],"Invalid card number":["N\u00famero de tarjeta no v\u00e1lido"],"Card (Visa\/Mastercard)":["Tarjeta (Visa\/Mastercard)"],"Full name":["Nombre completo"],"You must enter the holder name":["Debes introducir el nombre del titular."],"Expiration date":["Fecha de expiraci\u00f3n"],"MM\/YY":["MM\/AA"],"Invalid date":["Fecha no v\u00e1lida"],"Invalid CVC":["CVC no v\u00e1lido"],"Holder name is required":["El nombre del titular es obligatorio"],"Neopayment Standard Gateway":["Pasarela est\u00e1ndar Neopayment"]}}}
  • neopayment/trunk/i18n/neopayment-es_ES-fcefad2ef835a8c55a07246ba112b97e.json

    r3583684 r3642474  
    1 {"translation-revision-date":"2026-04-10T22:00:54+00:00","generator":"WP-CLI\/2.12.0","source":"assets\/js\/blocks\/neopayment-standard.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"es","plural-forms":"nplurals=2; plural=(n != 1);"},"Invalid card number":["N\u00famero de tarjeta no v\u00e1lido"],"Card (Visa\/Mastercard)":["Tarjeta (Visa\/Mastercard)"],"Invalid date":[""],"Invalid CVC":[""],"Holder name is required":[""],"Neopayment Standard Gateway":[""]}}}
     1{"translation-revision-date":"2026-04-10T22:00:54+00:00","generator":"WP-CLI\/2.12.0","source":"assets\/js\/blocks\/neopayment-standard.js","domain":"messages","locale_data":{"messages":{"":{"domain":"messages","lang":"es","plural-forms":"nplurals=2; plural=(n != 1);"},"Invalid card number":["N\u00famero de tarjeta no v\u00e1lido"],"Card (Visa\/Mastercard)":["Tarjeta (Visa\/Mastercard)"],"Invalid date":["Fecha no v\u00e1lida"],"Invalid CVC":["CVC no v\u00e1lido"],"Holder name is required":["El nombre del titular es obligatorio"],"Neopayment Standard Gateway":["Pasarela est\u00e1ndar Neopayment"]}}}
  • neopayment/trunk/includes/blocks/class-neopayment-standard-blocks.php

    r3583684 r3642474  
    4343                return array(
    4444                        'neopayment-standard-blocks-js',
    45                         'neopayment-3ds-popup',
     45                        'neopayment-3ds-popup-blocks',
    4646                );
     47        }
     48
     49        /**
     50         * Styles for the blocks payment method UI.
     51         *
     52         * @return array
     53         */
     54        public function get_payment_method_style_handles() {
     55                return array( 'neopayment-card-fields-style' );
    4756        }
    4857
  • neopayment/trunk/includes/class-neopayment-blocks-support.php

    r3583684 r3642474  
    3838                add_action( 'init', array( __CLASS__, 'register_scripts' ) );
    3939                add_action( 'init', array( __CLASS__, 'register_styles' ) );
     40                add_action( 'wp_enqueue_scripts', array( __CLASS__, 'maybe_enqueue_checkout_styles' ), 20 );
    4041        }
    4142
    … …  
    7475                                'wp-i18n',
    7576                        ),
    76                         $standard_asset['version'] ?? NEOPAYMENT_Constants::NEOPAYMENT_PLUGIN_VERSION,
     77                        $standard_asset['version'] ?? \NEOPAYMENT_Constants::NEOPAYMENT_PLUGIN_VERSION,
    7778                        true
    7879                );
    … …  
    8485                );
    8586
     87                $popup_ver = file_exists( NEOPAYMENT_PATH . 'assets/js/neopayment-3ds-popup.js' )
     88                        ? (string) filemtime( NEOPAYMENT_PATH . 'assets/js/neopayment-3ds-popup.js' )
     89                        : \NEOPAYMENT_Constants::NEOPAYMENT_PLUGIN_VERSION;
     90
    8691                wp_register_script(
    87                         'neopayment-3ds-popup',
     92                        'neopayment-sweetalert',
     93                        NEOPAYMENT_URL . 'assets/js/sweetAlert/sweetalert.min.js',
     94                        array(),
     95                        '2.1.2',
     96                        true
     97                );
     98
     99                // Blocks-only handle
     100                wp_register_script(
     101                        'neopayment-3ds-popup-blocks',
    88102                        NEOPAYMENT_URL . 'assets/js/neopayment-3ds-popup.js',
    89                         array( 'jquery', 'neopayment-standard-blocks-js' ),
    90                         file_exists( NEOPAYMENT_PATH . 'assets/js/neopayment-3ds-popup.js' ) ? filemtime( NEOPAYMENT_PATH . 'assets/js/neopayment-3ds-popup.js' ) : NEOPAYMENT_Constants::NEOPAYMENT_PLUGIN_VERSION,
     103                        array( 'jquery', 'neopayment-sweetalert', 'neopayment-standard-blocks-js' ),
     104                        $popup_ver,
    91105                        true
    92106                );
    … …  
    116130                                'wp-i18n',
    117131                        ),
    118                         $telered_asset['version'] ?? NEOPAYMENT_Constants::NEOPAYMENT_PLUGIN_VERSION,
     132                        $telered_asset['version'] ?? \NEOPAYMENT_Constants::NEOPAYMENT_PLUGIN_VERSION,
    119133                        true
    120134                );
    … …  
    133147         */
    134148        public static function register_styles() {
    135                 wp_enqueue_style(
     149                wp_register_style(
    136150                        'neopayment-card-fields-style',
    137151                        NEOPAYMENT_URL . 'assets/css/neopayment-card-fields.css',
    138152                        array(),
    139                         '1.0.0'
     153                        \NEOPAYMENT_Constants::NEOPAYMENT_PLUGIN_VERSION
    140154                );
    141155        }
     156
     157        /**
     158         * Enqueues checkout styles for classic flows when Blocks did not load them.
     159         *
     160         * @return void
     161         */
     162        public static function maybe_enqueue_checkout_styles() {
     163                if ( wp_style_is( 'neopayment-card-fields-style', 'enqueued' ) ) {
     164                        return;
     165                }
     166
     167                $is_order_pay = function_exists( 'is_wc_endpoint_url' ) && is_wc_endpoint_url( 'order-pay' );
     168                $is_checkout  = function_exists( 'is_checkout' ) && is_checkout();
     169                if ( ! $is_checkout && ! $is_order_pay ) {
     170                        return;
     171                }
     172
     173                wp_enqueue_style( 'neopayment-card-fields-style' );
     174        }
    142175}
  • neopayment/trunk/package-lock.json

    r3583684 r3642474  
    99      "version": "2.0.0",
    1010      "devDependencies": {
    11         "@babel/core": "^7.27.4",
     11        "@babel/core": "^7.29.6",
    1212        "@babel/preset-env": "^7.29.5",
    1313        "@babel/preset-react": "^7.27.1",
    … …  
    1818      }
    1919    },
    20     "node_modules/@ampproject/remapping": {
    21       "version": "2.3.0",
    22       "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz",
    23       "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==",
    24       "dev": true,
    25       "license": "Apache-2.0",
    26       "dependencies": {
    27         "@jridgewell/gen-mapping": "^0.3.5",
    28         "@jridgewell/trace-mapping": "^0.3.24"
    29       },
    30       "engines": {
    31         "node": ">=6.0.0"
    32       }
    33     },
    3420    "node_modules/@babel/code-frame": {
    35       "version": "7.29.0",
    36       "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz",
    37       "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==",
    38       "dev": true,
    39       "license": "MIT",
    40       "dependencies": {
    41         "@babel/helper-validator-identifier": "^7.28.5",
     21      "version": "7.29.7",
     22      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz",
     23      "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==",
     24      "dev": true,
     25      "license": "MIT",
     26      "dependencies": {
     27        "@babel/helper-validator-identifier": "^7.29.7",
    4228        "js-tokens": "^4.0.0",
    4329        "picocolors": "^1.1.1"
    … …  
    4834    },
    4935    "node_modules/@babel/compat-data": {
    50       "version": "7.29.3",
    51       "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.3.tgz",
    52       "integrity": "sha512-LIVqM46zQWZhj17qA8wb4nW/ixr2y1Nw+r1etiAWgRM6U1IqP+LNhL1yg440jYZR72jCWcWbLWzIosH+uP1fqg==",
     36      "version": "7.29.7",
     37      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz",
     38      "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==",
    5339      "dev": true,
    5440      "license": "MIT",
    … …  
    5844    },
    5945    "node_modules/@babel/core": {
    60       "version": "7.27.4",
    61       "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.27.4.tgz",
    62       "integrity": "sha512-bXYxrXFubeYdvB0NhD/NBB3Qi6aZeV20GOWVI47t2dkecCEoneR4NPVcb7abpXDEvejgrUfFtG6vG/zxAKmg+g==",
    63       "dev": true,
    64       "license": "MIT",
    65       "dependencies": {
    66         "@ampproject/remapping": "^2.2.0",
    67         "@babel/code-frame": "^7.27.1",
    68         "@babel/generator": "^7.27.3",
    69         "@babel/helper-compilation-targets": "^7.27.2",
    70         "@babel/helper-module-transforms": "^7.27.3",
    71         "@babel/helpers": "^7.27.4",
    72         "@babel/parser": "^7.27.4",
    73         "@babel/template": "^7.27.2",
    74         "@babel/traverse": "^7.27.4",
    75         "@babel/types": "^7.27.3",
     46      "version": "7.29.7",
     47      "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz",
     48      "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==",
     49      "dev": true,
     50      "license": "MIT",
     51      "dependencies": {
     52        "@babel/code-frame": "^7.29.7",
     53        "@babel/generator": "^7.29.7",
     54        "@babel/helper-compilation-targets": "^7.29.7",
     55        "@babel/helper-module-transforms": "^7.29.7",
     56        "@babel/helpers": "^7.29.7",
     57        "@babel/parser": "^7.29.7",
     58        "@babel/template": "^7.29.7",
     59        "@babel/traverse": "^7.29.7",
     60        "@babel/types": "^7.29.7",
     61        "@jridgewell/remapping": "^2.3.5",
    7662        "convert-source-map": "^2.0.0",
    7763        "debug": "^4.1.0",
    … …  
    8975    },
    9076    "node_modules/@babel/generator": {
    91       "version": "7.29.1",
    92       "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz",
    93       "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==",
    94       "dev": true,
    95       "license": "MIT",
    96       "dependencies": {
    97         "@babel/parser": "^7.29.0",
    98         "@babel/types": "^7.29.0",
     77      "version": "7.29.8",
     78      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.8.tgz",
     79      "integrity": "sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==",
     80      "dev": true,
     81      "license": "MIT",
     82      "dependencies": {
     83        "@babel/parser": "^7.29.8",
     84        "@babel/types": "^7.29.8",
    9985        "@jridgewell/gen-mapping": "^0.3.12",
    10086        "@jridgewell/trace-mapping": "^0.3.28",
    … …  
    119105    },
    120106    "node_modules/@babel/helper-compilation-targets": {
    121       "version": "7.28.6",
    122       "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz",
    123       "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==",
    124       "dev": true,
    125       "license": "MIT",
    126       "dependencies": {
    127         "@babel/compat-data": "^7.28.6",
    128         "@babel/helper-validator-option": "^7.27.1",
     107      "version": "7.29.7",
     108      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz",
     109      "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==",
     110      "dev": true,
     111      "license": "MIT",
     112      "dependencies": {
     113        "@babel/compat-data": "^7.29.7",
     114        "@babel/helper-validator-option": "^7.29.7",
    129115        "browserslist": "^4.24.0",
    130116        "lru-cache": "^5.1.1",
    … …  
    193179    },
    194180    "node_modules/@babel/helper-globals": {
    195       "version": "7.28.0",
    196       "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz",
    197       "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==",
     181      "version": "7.29.7",
     182      "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz",
     183      "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==",
    198184      "dev": true,
    199185      "license": "MIT",
    … …  
    217203    },
    218204    "node_modules/@babel/helper-module-imports": {
    219       "version": "7.28.6",
    220       "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz",
    221       "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==",
    222       "dev": true,
    223       "license": "MIT",
    224       "dependencies": {
    225         "@babel/traverse": "^7.28.6",
    226         "@babel/types": "^7.28.6"
     205      "version": "7.29.7",
     206      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz",
     207      "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==",
     208      "dev": true,
     209      "license": "MIT",
     210      "dependencies": {
     211        "@babel/traverse": "^7.29.7",
     212        "@babel/types": "^7.29.7"
    227213      },
    228214      "engines": {
    … …  
    231217    },
    232218    "node_modules/@babel/helper-module-transforms": {
    233       "version": "7.28.6",
    234       "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz",
    235       "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==",
    236       "dev": true,
    237       "license": "MIT",
    238       "dependencies": {
    239         "@babel/helper-module-imports": "^7.28.6",
    240         "@babel/helper-validator-identifier": "^7.28.5",
    241         "@babel/traverse": "^7.28.6"
     219      "version": "7.29.7",
     220      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz",
     221      "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==",
     222      "dev": true,
     223      "license": "MIT",
     224      "dependencies": {
     225        "@babel/helper-module-imports": "^7.29.7",
     226        "@babel/helper-validator-identifier": "^7.29.7",
     227        "@babel/traverse": "^7.29.7"
    242228      },
    243229      "engines": {
    … …  
    322308    },
    323309    "node_modules/@babel/helper-string-parser": {
    324       "version": "7.27.1",
    325       "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
    326       "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==",
     310      "version": "7.29.7",
     311      "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz",
     312      "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==",
    327313      "dev": true,
    328314      "license": "MIT",
    … …  
    332318    },
    333319    "node_modules/@babel/helper-validator-identifier": {
    334       "version": "7.28.5",
    335       "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz",
    336       "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==",
     320      "version": "7.29.7",
     321      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz",
     322      "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==",
    337323      "dev": true,
    338324      "license": "MIT",
    … …  
    342328    },
    343329    "node_modules/@babel/helper-validator-option": {
    344       "version": "7.27.1",
    345       "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz",
    346       "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==",
     330      "version": "7.29.7",
     331      "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz",
     332      "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==",
    347333      "dev": true,
    348334      "license": "MIT",
    … …  
    367353    },
    368354    "node_modules/@babel/helpers": {
    369       "version": "7.27.6",
    370       "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.27.6.tgz",
    371       "integrity": "sha512-muE8Tt8M22638HU31A3CgfSUciwz1fhATfoVai05aPXGor//CdWDCbnlY1yvBPo07njuVOCNGCSp/GTt12lIug==",
    372       "dev": true,
    373       "license": "MIT",
    374       "dependencies": {
    375         "@babel/template": "^7.27.2",
    376         "@babel/types": "^7.27.6"
     355      "version": "7.29.7",
     356      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz",
     357      "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==",
     358      "dev": true,
     359      "license": "MIT",
     360      "dependencies": {
     361        "@babel/template": "^7.29.7",
     362        "@babel/types": "^7.29.7"
    377363      },
    378364      "engines": {
    … …  
    381367    },
    382368    "node_modules/@babel/parser": {
    383       "version": "7.29.3",
    384       "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.3.tgz",
    385       "integrity": "sha512-b3ctpQwp+PROvU/cttc4OYl4MzfJUWy6FZg+PMXfzmt/+39iHVF0sDfqay8TQM3JA2EUOyKcFZt75jWriQijsA==",
    386       "dev": true,
    387       "license": "MIT",
    388       "dependencies": {
    389         "@babel/types": "^7.29.0"
     369      "version": "7.29.8",
     370      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.8.tgz",
     371      "integrity": "sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==",
     372      "dev": true,
     373      "license": "MIT",
     374      "dependencies": {
     375        "@babel/types": "^7.29.8"
    390376      },
    391377      "bin": {
    … …  
    16231609    },
    16241610    "node_modules/@babel/template": {
    1625       "version": "7.28.6",
    1626       "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz",
    1627       "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==",
    1628       "dev": true,
    1629       "license": "MIT",
    1630       "dependencies": {
    1631         "@babel/code-frame": "^7.28.6",
    1632         "@babel/parser": "^7.28.6",
    1633         "@babel/types": "^7.28.6"
     1611      "version": "7.29.7",
     1612      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz",
     1613      "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==",
     1614      "dev": true,
     1615      "license": "MIT",
     1616      "dependencies": {
     1617        "@babel/code-frame": "^7.29.7",
     1618        "@babel/parser": "^7.29.7",
     1619        "@babel/types": "^7.29.7"
    16341620      },
    16351621      "engines": {
    … …  
    16381624    },
    16391625    "node_modules/@babel/traverse": {
    1640       "version": "7.29.0",
    1641       "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz",
    1642       "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==",
    1643       "dev": true,
    1644       "license": "MIT",
    1645       "dependencies": {
    1646         "@babel/code-frame": "^7.29.0",
    1647         "@babel/generator": "^7.29.0",
    1648         "@babel/helper-globals": "^7.28.0",
    1649         "@babel/parser": "^7.29.0",
    1650         "@babel/template": "^7.28.6",
    1651         "@babel/types": "^7.29.0",
     1626      "version": "7.29.8",
     1627      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.8.tgz",
     1628      "integrity": "sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==",
     1629      "dev": true,
     1630      "license": "MIT",
     1631      "dependencies": {
     1632        "@babel/code-frame": "^7.29.7",
     1633        "@babel/generator": "^7.29.8",
     1634        "@babel/helper-globals": "^7.29.7",
     1635        "@babel/parser": "^7.29.8",
     1636        "@babel/template": "^7.29.7",
     1637        "@babel/types": "^7.29.8",
    16521638        "debug": "^4.3.1"
    16531639      },
    … …  
    16571643    },
    16581644    "node_modules/@babel/types": {
    1659       "version": "7.29.0",
    1660       "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz",
    1661       "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==",
    1662       "dev": true,
    1663       "license": "MIT",
    1664       "dependencies": {
    1665         "@babel/helper-string-parser": "^7.27.1",
    1666         "@babel/helper-validator-identifier": "^7.28.5"
     1645      "version": "7.29.8",
     1646      "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.8.tgz",
     1647      "integrity": "sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==",
     1648      "dev": true,
     1649      "license": "MIT",
     1650      "dependencies": {
     1651        "@babel/helper-string-parser": "^7.29.7",
     1652        "@babel/helper-validator-identifier": "^7.29.7"
    16671653      },
    16681654      "engines": {
    … …  
    16881674      "dependencies": {
    16891675        "@jridgewell/sourcemap-codec": "^1.5.0",
     1676        "@jridgewell/trace-mapping": "^0.3.24"
     1677      }
     1678    },
     1679    "node_modules/@jridgewell/remapping": {
     1680      "version": "2.3.5",
     1681      "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz",
     1682      "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==",
     1683      "dev": true,
     1684      "license": "MIT",
     1685      "dependencies": {
     1686        "@jridgewell/gen-mapping": "^0.3.5",
    16901687        "@jridgewell/trace-mapping": "^0.3.24"
    16911688      }
    … …  
    25312528    },
    25322529    "node_modules/fast-uri": {
    2533       "version": "3.1.2",
    2534       "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.2.tgz",
    2535       "integrity": "sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==",
     2530      "version": "4.1.2",
     2531      "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-4.1.2.tgz",
     2532      "integrity": "sha512-TyGmBcbDTZXcb2cj5MV89DrF42DKvb3y5DDUNh95iO+IMeAzMkVSxK1PZRrRIpc9yg8U2GhGdbofNa0LS/a4Bw==",
    25362533      "dev": true,
    25372534      "funding": [
  • neopayment/trunk/package.json

    r3583684 r3642474  
    88  },
    99  "overrides": {
    10     "fast-uri": ">=3.1.1",
     10    "fast-uri": ">=3.1.5",
    1111    "@babel/plugin-transform-modules-systemjs": ">=7.29.4"
    1212  },
    1313  "devDependencies": {
    14     "@babel/core": "^7.27.4",
     14    "@babel/core": "^7.29.6",
    1515    "@babel/preset-env": "^7.29.5",
    1616    "@babel/preset-react": "^7.27.1",
  • neopayment/trunk/readme.txt

    r3583684 r3642474  
    44442. Activate the plugin through the \'Plugins\' screen in WordPress.
    45453. Go to **WooCommerce > Settings > Payments** and enable the \"Neopayment\".
    46 4. Configure your Neopayment credentials and settings.
     464. Enable the **Neopayment** payment method.
     475. Configure your Neopayment credentials and settings.
     486. Save the changes and perform a test transaction before using the plugin in production.
     49
    4750
    4851== Frequently Asked Questions ==
    … …  
    6063Yes. You must be an approved merchant with Neopayment to use this plugin.
    6164
     65== Screenshots ==
     66
     671. Neopayment payment method configuration in WooCommerce.
     682. Neopayment payment option displayed at checkout.
     69
    6270== Changelog ==
     71
     722026.06.23 - version 3.0.5
     73* Fix workflows
     74
     752026.06.23 - version 3.0.4
     76* Added GitHub workflows
     77
     782026.05.12 - version 3.0.2
     79* Added support for pay_for_order flows and 3DS challenge handling
     80* Fix OAuth token management for prod and test mode
     81* Fix 3DS on order-pay mode
     82* Updated payment gateway scripts and dependencies
     83
     842026.05.06 - version 3.0.1
     85* Introduced modal-based flow for 3D Secure replacing popup
     86* Improved 3DS processing feedback and error handling
     87* Fix plugin check errors based on WordPress feedback
     88* Fix scripts enqueued on cart pages
     89
     902026.04.13 - version 3.0.0
     91* Renamed plugin to Neopayment
     92
    63932025.09.22 - version 2.5.2
    6494* Changed prefix
Note: See TracChangeset for help on using the changeset viewer.