Changeset 3757857
- Timestamp:
- 10/21/2026 07:26:01 AM (3 weeks ago)
- Location:
- wallet-up/trunk
- Files:
-
- 10 edited
-
readme.txt (modified) (2 diffs)
-
src/API/WebhookHandler.php (modified) (2 diffs)
-
src/Core/Admin/AdminManager.php (modified) (1 diff)
-
src/Core/Admin/CheckoutHandoff.php (modified) (1 diff)
-
src/Core/Admin/NonprofitOffer.php (modified) (1 diff)
-
src/Core/Admin/Notices/PremiumActivationNotice.php (modified) (4 diffs)
-
src/Core/Admin/Notices/ProInstallModal.php (modified) (2 diffs)
-
src/WooCommerce/Express/ApplePayDomain.php (modified) (2 diffs)
-
wallet-up-start.php (modified) (2 diffs)
-
wallet-up.php (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
wallet-up/trunk/readme.txt
r3757748 r3757857 5 5 Tested up to: 7.1 6 6 Requires PHP: 8.1 7 Stable tag: 6.3. 57 Stable tag: 6.3.6 8 8 License: GPLv3 9 9 License URI: https://www.gnu.org/licenses/gpl-3.0.html … … 205 205 206 206 == Changelog == 207 = 6.3.6 - October 21, 2026 = 208 * Improved (Pro): Orders are marked paid from Stripe only for live payments that cover the order total while your store takes live payments. 209 * Improved (Pro): Store pages stay fast while Apple Pay setup runs in the background. 210 * Improved: The Plugins screen labels the free and Pro editions correctly, whichever one is installed. 211 * Improved: The licence activation reminder appears only when your account holds a licence that is not active on this site, and names Pro correctly in every edition. 212 207 213 = 6.3.5 - October 20, 2026 = 208 214 * Improved (Pro): The card payment form at WooCommerce checkout shows the test card notice only while Stripe is in test mode. -
wallet-up/trunk/src/API/WebhookHandler.php
r3757748 r3757857 481 481 } 482 482 483 if (!$isTestMode && empty($event->livemode)) { 484 $this->errorHandler->log('Stripe webhook ignored: a test-mode event (' . $event->type . ') reached a store that takes live payments'); 485 $this->updateWebhookStatus($webhookId, 'completed', 200, microtime(true) - $startTime, 'Test-mode event ignored on a live store'); 486 return new WP_REST_Response(['success' => true, 'ignored' => 'test_mode_event'], 200); 487 } 488 483 489 $eventType = $event->type; 484 490 $object = $event->data->object; … … 606 612 if ($orderKey && $order->get_order_key() !== $orderKey) { 607 613 $this->errorHandler->log("Stripe webhook: order key mismatch for order {$orderId}"); 614 return; 615 } 616 617 $paidMinor = (int) ($paymentIntent->amount_received ?? $paymentIntent->amount ?? 0); 618 $dueMinor = \WalletUpPro\Core\Payments\PaymentGatewayHandler::toMinorUnits((float) $order->get_total(), (string) $order->get_currency()); 619 $sameCurrency = strtolower((string) ($paymentIntent->currency ?? '')) === strtolower((string) $order->get_currency()); 620 if (!$order->is_paid() && (!$sameCurrency || $paidMinor < $dueMinor)) { 621 $this->errorHandler->log("Stripe webhook: PaymentIntent {$paymentIntent->id} does not cover order {$orderId}; order left unpaid"); 622 /* translators: %s: Stripe PaymentIntent ID */ 623 $order->add_order_note(sprintf(esc_html__('Stripe reported a payment (PaymentIntent: %s) that does not match this order total, so the order was not marked as paid.', 'walletup'), $paymentIntent->id)); 624 $order->save(); 608 625 return; 609 626 } -
wallet-up/trunk/src/Core/Admin/AdminManager.php
r3737515 r3757857 822 822 $name = \WalletUpPro\Core\Config\PaymentMethodsConfig::getMethodName($methodId); 823 823 throw new Exception(esc_html(sprintf( 824 __('%s requires Wallet Up. The free version supports Cash App, PayPal, and Venmo.', 'walletup'), 825 $name 824 /* translators: 1: payment method name, 2: Pro product name */ 825 __('%1$s requires %2$s. The free version supports Cash App, PayPal, and Venmo.', 'walletup'), 826 $name, 827 WALLET_UP_PRO_PRODUCT_NAME 826 828 ))); 827 829 } -
wallet-up/trunk/src/Core/Admin/CheckoutHandoff.php
r3755663 r3757857 161 161 switch ($kind) { 162 162 case self::ACTION_OWNED: 163 return __('Wallet Up is already licensed on this site, so no second purchase was started. You can change your plan or add sites here.', 'walletup'); 163 /* translators: %s: Pro product name */ 164 return sprintf(__('%s is already licensed on this site, so no second purchase was started. You can change your plan or add sites here.', 'walletup'), WALLET_UP_PRO_PRODUCT_NAME); 164 165 case 'connect': 165 166 return __('Choose an option below to continue. Your checkout opens right after.', 'walletup'); -
wallet-up/trunk/src/Core/Admin/NonprofitOffer.php
r3752420 r3757857 416 416 } 417 417 if (self::otherLicence()) { 418 wp_send_json_error(['message' => __('This site already uses a Wallet Up licence. Reply to your approval email and we will move it to your lifetime licence and stop the old plan, so you are not charged again.', 'walletup'), 'activation' => 'existing'], 409);418 wp_send_json_error(['message' => /* translators: %s: Pro product name */ sprintf(__('This site already uses a %s licence. Reply to your approval email and we will move it to your lifetime licence and stop the old plan, so you are not charged again.', 'walletup'), WALLET_UP_PRO_PRODUCT_NAME), 'activation' => 'existing'], 409); 419 419 } 420 420 if (self::premiumCode()) { -
wallet-up/trunk/src/Core/Admin/Notices/PremiumActivationNotice.php
r3749800 r3757857 40 40 $page = isset( $_GET['page'] ) ? sanitize_text_field( wp_unslash( $_GET['page'] ) ) : ''; 41 41 return strpos( $page, 'wallet-up' ) === 0; 42 } 43 44 public static function unusedLicenceOnAccount( $fs ): bool { 45 if ( ! is_object( $fs ) || ! method_exists( $fs, 'is_registered' ) || ! $fs->is_registered() ) { 46 return false; 47 } 48 if ( ! method_exists( $fs, 'has_any_license' ) || ! $fs->has_any_license( false ) ) { 49 return false; 50 } 51 return ! ( method_exists( $fs, 'has_active_valid_license' ) && $fs->has_active_valid_license() ); 42 52 } 43 53 … … 126 136 <div class="notice notice-warning is-dismissible"> 127 137 <p style="font-size:14px;line-height:1.6;margin:8px 0 4px;"> 128 <strong><?php esc_html_e( 'Thanks for upgrading to Wallet Up!', 'walletup'); ?></strong>138 <strong><?php /* translators: %s: Pro product name */ echo esc_html( sprintf( __( 'Thanks for upgrading to %s!', 'walletup' ), WALLET_UP_PRO_PRODUCT_NAME ) ); ?></strong> 129 139 <?php esc_html_e( 'Your purchase is confirmed. One step is left before the Pro features unlock: download the Pro version and install it from Plugins, Add New, Upload. Your license and all your settings carry over automatically.', 'walletup' ); ?> 130 140 </p> … … 146 156 } 147 157 158 if ( ! self::unusedLicenceOnAccount( $fs ) ) { 159 return; 160 } 161 148 162 $activateUrl = ( is_object( $fs ) && method_exists( $fs, 'get_activation_url' ) ) ? $fs->get_activation_url() : self::SELF_SERVE_URL; 149 163 $dismissUrl = wp_nonce_url( add_query_arg( 'walletup_dismiss_activate_help', '1' ), 'walletup_dismiss_activate_help' ); … … 151 165 <div class="notice notice-info" style="border-left-color:#7c3aed;"> 152 166 <p style="font-size:14px;line-height:1.6;margin:8px 0 4px;"> 153 <strong><?php esc_html_e( 'Already purchased Wallet Up?', 'walletup'); ?></strong>154 <?php esc_html_e( ' If you bought Pro but still see the free version, your license just needs to be activated on this site. Activate it and get your Pro download in one place — no re-purchase needed.', 'walletup' ); ?>167 <strong><?php /* translators: %s: Pro product name */ echo esc_html( sprintf( __( 'Your %s licence is ready for this site.', 'walletup' ), WALLET_UP_PRO_PRODUCT_NAME ) ); ?></strong> 168 <?php esc_html_e( 'Your account has a licence that is not active here yet. Activate it to unlock Pro and get the Pro download. There is nothing more to pay.', 'walletup' ); ?> 155 169 </p> 156 170 <p style="margin:8px 0 12px;"> -
wallet-up/trunk/src/Core/Admin/Notices/ProInstallModal.php
r3679695 r3757857 86 86 87 87 <p id="wup-pro-modal-body"> 88 <?php esc_html_e( 'This site is still running the free version. Download Wallet Up and install it over this one to unlock your Pro features. Your licence, settings and payment methods all carry across.', 'walletup'); ?>88 <?php /* translators: %s: Pro product name */ echo esc_html( sprintf( __( 'This site is still running the free version. Download %s and install it over this one to unlock your Pro features. Your licence, settings and payment methods all carry across.', 'walletup' ), WALLET_UP_PRO_PRODUCT_NAME ) ); ?> 89 89 </p> 90 90 … … 98 98 <?php if ( $downloadUrl ) : ?> 99 99 <a class="wup-pro-modal__cta" href="<?php echo esc_url( $downloadUrl ); ?>" autofocus> 100 <?php esc_html_e( 'Download Wallet Up', 'walletup'); ?>100 <?php /* translators: %s: Pro product name */ echo esc_html( sprintf( __( 'Download %s', 'walletup' ), WALLET_UP_PRO_PRODUCT_NAME ) ); ?> 101 101 </a> 102 102 <?php endif; ?> -
wallet-up/trunk/src/WooCommerce/Express/ApplePayDomain.php
r3757748 r3757857 61 61 return; 62 62 } 63 $connect = class_exists('\\WalletUpPro\\Core\\Payments\\StripeConnect') 64 && \WalletUpPro\Core\Payments\StripeConnect::isActive(); 65 $signature = self::registrationSignature($domain, $connect); 66 if ($signature === '' || get_option(self::REGISTERED_OPT) === $signature || get_transient(self::RETRY_PAUSE)) { 63 if (get_transient(self::RETRY_PAUSE)) { 64 return; 65 } 66 $status = self::connectStatus(is_admin() && !wp_doing_ajax()); 67 $connect = !empty($status['connected']) && !empty($status['charges_enabled']) && !empty($status['account_id']); 68 $signature = self::registrationSignature($domain, $connect, $status); 69 if ($signature === '' || get_option(self::REGISTERED_OPT) === $signature) { 67 70 return; 68 71 } … … 100 103 } 101 104 102 public static function registrationSignature(string $domain, bool $connect): string 105 private static function connectStatus(bool $mayFetch): array 106 { 107 if (!class_exists('\\WalletUpPro\\Core\\Payments\\StripeConnect')) { 108 return []; 109 } 110 return $mayFetch 111 ? \WalletUpPro\Core\Payments\StripeConnect::getStatus() 112 : \WalletUpPro\Core\Payments\StripeConnect::getCachedStatus(); 113 } 114 115 public static function registrationSignature(string $domain, bool $connect, array $status = []): string 103 116 { 104 117 if ($connect) { 105 $status = \WalletUpPro\Core\Payments\StripeConnect::getStatus();106 118 $account = (string) ($status['account_id'] ?? ''); 107 119 return $account === '' ? '' : implode('|', [$domain, $account, \WalletUpPro\Core\Payments\StripeConnect::mode()]); -
wallet-up/trunk/wallet-up-start.php
r3757748 r3757857 28 28 private function __construct() { 29 29 $this->ensurePluginFunctionsLoaded(); 30 if ( self::FREE_PLUGIN_BASENAME === plugin_basename( WALLET_UP_PRO_FILE ) ) { 31 return; 32 } 30 33 $this->deactivateFreeVersion(); 31 34 add_filter( … … 136 139 } 137 140 // which has the Plugin Name header — WooCommerce FeaturesUtil requires this 138 define( 'WALLET_UP_PRO_VERSION', '6.3.5' ); 141 define( 'WALLET_UP_PRO_VERSION', '6.3.6' ); 142 define( 'WALLET_UP_PRO_PRODUCT_NAME', 'Wallet Up Pro' ); 139 143 define( 'WALLET_UP_IS_PRO_BUILD', false ); 140 144 define( 'WALLET_UP_PRO_FILE', dirname( __FILE__ ) . '/wallet-up.php' ); -
wallet-up/trunk/wallet-up.php
r3757748 r3757857 5 5 * Plugin URI: https://walletup.app/ 6 6 * Author: WalletUp.app 7 * Version: 6.3. 57 * Version: 6.3.6 8 8 * Requires at least: 5.8 9 9 * Tested up to: 7.1
Note:
See TracChangeset
for help on using the changeset viewer.