-
Notifications
You must be signed in to change notification settings - Fork 0
Changelog
D edited this page Aug 2, 2026
·
1 revision
- Fixed post-payment flow: after the CLINK receipt arrives, the order-received page now shows an immediate "Payment confirmed" screen and reliably redirects to the order summary
-
mark_paidnow retries transiently when the invoice record isn't ready yet (receipt arriving before invoice confirmation completes), preventing the payment page from getting stuck on a fresh QR code - If server bookkeeping still can't complete, the confirmation screen stays visible with a "Payment received" note instead of reloading into a pending-invoice loop
- Security fix: Added strict BOLT11 invoice validation — checksum, network, amount, and expiry are now verified against the order before payment is confirmed
- Security fix: Order-key ownership is now enforced on all AJAX handlers, closing a guest-order payment bypass (guests must present the matching order key)
-
Security fix:
save_ndebitno longer accepts a client-supplied subscription ID; subscriptions are resolved server-side from the verified order - Added Network setting (mainnet / testnet / regtest) to the gateway configuration
- Invoice amounts must match the order total (within 1 sat) and invoices expiring in under 60 seconds are rejected
- Security fix: Replaced generic nonces with per-order nonces for all AJAX handlers to prevent an unauthenticated order payment bypass
- Added order status verification to
mark_paidhandler (must be pending or on-hold) - Added invoice existence check to
mark_paidhandler (invoice must be generated first) - Added ownership checks to
confirm_paymentandsave_ndebithandlers for logged-in users - All AJAX actions (confirm, check, mark_paid, save_ndebit) now use order-bound nonces
- Stripped remote gist.github.com URL from the built JavaScript bundle (WordPress.org review compliance)
- Fixed contributors list to match the plugin owner's WordPress.org username
- Added a Third Party Services section documenting Nostr relays, CoinGecko, and ShockWallet.app
- "Payment:" row on the View Subscription page shows "Auto-Renewal" (ndebit saved) or an "Activate Auto-Renewal" link pointing to the parent order's order-received page for ndebit setup
- Subscription "Payment:" row now shows "Via Auto-Renewal" or "Via Manual Renewal" based on ndebit status
- Added "Activate Auto-Renewal" action link on My Account subscription items for subscriptions without ndebit
- Added "Get your nDebit string" link pointing to my.shockwallet.app/lapps at checkout and on My Account
- QR codes now generated client-side with the bundled qrcode-generator library (no remote API dependency)
- Fixed "Setup Auto-Renewal" title on the order-received page
- Added ndebit auto-renewal for subscriptions — customers authorize recurring payments via CLINK
- Auto-renewal is active by default after the first subscription payment
- Customers can disable auto-renewal from My Account > Subscriptions
- Added BTC / sats / ₿ (bip-0177) currency display option — overrides all frontend prices
- Price display runs at PHP_INT_MAX priority to avoid conflicts with other plugins
- Added a client-side price conversion fallback for compatibility with Custom Price for WooCommerce Pro and similar plugins
- Compatibility improvements for third-party subscription plugins
- Removed the redundant Store Currency setting (uses the WooCommerce default)
- External links in the description now open in new tabs with rel="noopener noreferrer"
- Fixed blocks checkout description rendering (HTML no longer escaped)
- Fixed blocks checkout icon (was passing HTML instead of a URL)
- Added loading="lazy" to the gateway icon
- Updated repo and author URLs
- Fixed blocks checkout support with a dedicated JS bundle
- Fixed WPCS violations from audit
- Added SCRIPT_DEBUG conditional for the .min suffix
- Added subscriptions support
- Improved error handling and logging
- Better mobile QR code layout
- Fixed classic checkout redirect flow
- Added i18n support
- Initial release