{"id":248462,"date":"2025-12-19T08:33:31","date_gmt":"2025-12-19T08:33:31","guid":{"rendered":"https:\/\/de.wordpress.org\/plugins\/ledger-direct\/"},"modified":"2026-09-22T09:26:03","modified_gmt":"2026-09-22T09:26:03","slug":"ledger-direct","status":"publish","type":"plugin","link":"https:\/\/os.wordpress.org\/plugins\/ledger-direct\/","author":21144425,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.2.0","stable_tag":"1.2.0","tested":"7.1.2","requires":"6.7","requires_php":"8.2","requires_plugins":null,"header_name":"Ledger Direct","header_author":"Alexander Busse | Hardcastle Technologies","header_description":"A XRP Ledger integration.","assets_banners_color":"","last_updated":"2026-09-22 09:26:03","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/ledger-direct\/ledger-direct-woocommerce","header_author_uri":"https:\/\/www.ledger-direct.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":447,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","changelog"],"tags":{"0.10.1":{"tag":"0.10.1","author":"ledgerdirect","date":"2025-12-19 08:56:01","revision":3423482},"0.11.0":{"tag":"0.11.0","author":"ledgerdirect","date":"2026-09-07 09:12:55","revision":3684523},"1.0.0":{"tag":"1.0.0","author":"ledgerdirect","date":"2026-09-07 10:08:34","revision":3684631},"1.1.0":{"tag":"1.1.0","author":"ledgerdirect","date":"2026-09-07 12:08:08","revision":3684823},"1.1.1":{"tag":"1.1.1","author":"ledgerdirect","date":"2026-09-22 08:04:11","revision":3706820},"1.2.0":{"tag":"1.2.0","author":"ledgerdirect","date":"2026-09-22 09:26:03","revision":3706970}},"upgrade_notice":[],"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.10.1","0.11.0","1.0.0","1.1.0","1.1.1","1.2.0"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[252490,209195,286,164158,252489],"plugin_category":[45],"plugin_contributors":[252492,252491],"plugin_business_model":[],"class_list":["post-248462","plugin","type-plugin","status-publish","hentry","plugin_tags-rlusd","plugin_tags-usdc","plugin_tags-woocommerce","plugin_tags-xrp","plugin_tags-xrpl","plugin_category-ecommerce","plugin_contributors-alexanderbuzz","plugin_contributors-ledgerdirect","plugin_committers-ledgerdirect"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/ledger-direct.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p>LedgerDirect is a WordPress plugin that allows you to accept direct payments in XRP, USDC, and RLUSD on the XRP Ledger. It provides a seamless integration with WooCommerce, enabling merchants to receive payments directly in their XRP Ledger accounts without the need for intermediaries.<\/p>\n\n<h3>Features<\/h3>\n\n<ul>\n<li>Accept payments in XRP, USDC and RLUSD.<\/li>\n<li>Receive payments directly to your wallet without any intermediaries.<\/li>\n<\/ul>\n\n<h4>How do I know if my XRP account is setup correctly?<\/h4>\n\n<p>The best way is to configure the plugin to use the testnet and make a test payment.<\/p>\n\n<h3>Test Payments<\/h3>\n\n<p>To test the plugin, you can configure it to use the XRP Ledger Testnet. This allows you to simulate transactions without using real funds. Follow these steps:\n1. Go to the plugin settings in WooCommerce.\n2. Enable the Testnet mode.\n3. Use a XRP Ledger test account to make test payments.\n5. You can create test account from https:\/\/xrpl.org\/xrp-testnet-faucet.html for XRP or https:\/\/tryrlusd.com\/ for RLUSD.<\/p>\n\n<h3>External services<\/h3>\n\n<p>LedgerDirect uses public APIs from Coinbase, Coingecko, Binance, and Kraken to retrieve current cryptocurrency exchange rates. These rates are needed to correctly calculate and display payments.<\/p>\n\n<p>No personal or payment data is sent to these services. Only requests for current rates are made when a payment is processed or displayed.<\/p>\n\n<p>For more information about each service, see:\n- Coinbase API: <a href=\"https:\/\/www.coinbase.com\/legal\/user_agreement\">Terms of Service<\/a>, <a href=\"https:\/\/www.coinbase.com\/legal\/privacy\">Privacy Policy<\/a>\n- Coingecko API: <a href=\"https:\/\/www.coingecko.com\/en\/terms\">Terms of Service<\/a>, <a href=\"https:\/\/www.coingecko.com\/en\/privacy\">Privacy Policy<\/a>\n- Binance API: <a href=\"https:\/\/www.binance.com\/en\/terms\">Terms of Use<\/a>, <a href=\"https:\/\/www.binance.com\/en\/privacy\">Privacy Policy<\/a>\n- Kraken API: <a href=\"https:\/\/www.kraken.com\/legal\">Terms of Service<\/a>, <a href=\"https:\/\/www.kraken.com\/privacy\">Privacy Policy<\/a><\/p>\n\n<h3>Source Code of minified assets<\/h3>\n\n<p>LedgerDirect uses minified assets for the WooCommerce blocks checkout. The source for includes\/assets\/js\/frontend\/blocks.asset.js is available at https:\/\/github.com\/ledger-direct\/ledger-direct-woocommerce\/blob\/main\/resources\/js\/frontend\/index.js.<\/p>\n\n<p>LedgerDirect uses minified assets from third party libraries. The source for the QR code library (jquery-qrcode.min.js) is available at https:\/\/github.com\/jeromeetienne\/jquery-qrcode.<\/p>\n\n<!--section=installation-->\n<h4>Minimum Requirements<\/h4>\n\n<ul>\n<li>PHP version 8.2 or greater<\/li>\n<li>WordPress 6.7 or greater<\/li>\n<li>WooCommerce 8.6.1 or greater<\/li>\n<\/ul>\n\n<h4>Automatic installation<\/h4>\n\n<ol>\n<li>Search for LedgerDirect plugin in the plugin section of your admin panel.<\/li>\n<li>Activate the plugin.<\/li>\n<li>Go to WooCommerce -&gt; Settings -&gt; Payments and enable the LedgerDirect gateway to manage the plugin settings.<\/li>\n<li>Configure the plugin settings, including your XRP Ledger account details and the currencies you want to<\/li>\n<\/ol>\n\n<h4>Manual installation<\/h4>\n\n<ol>\n<li>Clone the repo from https:\/\/github.com\/ledger-direct\/ledger-direct-woocommerce into the 'plugins' directory.<\/li>\n<li>Run 'composer install --no-dev --no-scripts --optimize-autoloader' to install the composer dependencies.<\/li>\n<li>Activate the plugin.<\/li>\n<li>Go to WooCommerce -&gt; Settings -&gt; Payments and enable the LedgerDirect gateway to manage the plugin settings.<\/li>\n<li>Configure the plugin settings, including your XRP Ledger account details and the currencies you want to accept.<\/li>\n<\/ol>\n\n<!--section=changelog-->\n<h4>1.2.0<\/h4>\n\n<ul>\n<li>The payment page now follows the payment on its own: it polls every 8 seconds and shows one of five states - waiting (with a countdown for the quote), partial payment, payment in the wrong token, expired quote, and paid - and leaves for the order confirmation as soon as the order is paid or closed. No more reloading.<\/li>\n<li>New status endpoint <code>\/wp-json\/ledger-direct\/v1\/payment-status\/&lt;order key&gt;<\/code>, the same payload as every other LedgerDirect plugin. Access is by the order key, as on the \"Order received\" page, so guest orders work without a login.<\/li>\n<li>The ledger is synced at most once per five seconds per receiving account, however many customers are waiting; the background job is unaffected.<\/li>\n<li>An expired quote is no longer replaced silently on reload; the page says so and offers an updated amount on request.<\/li>\n<li>Whether a payment is in the wrong token is decided by the shared library, the same rule as on every other platform.<\/li>\n<\/ul>\n\n<h4>1.1.1<\/h4>\n\n<ul>\n<li>Fix: an order that received a partial payment could never be completed. The first payment was recorded and the plugin stopped looking, so a customer who then sent the remaining amount was never marked as paid, neither on the payment page nor by the background job. Payments in the quoted asset now add up, and the order is matched until it settles.<\/li>\n<li>Fix: a payment in the right stablecoin from another issuer no longer blocks a later payment from the correct issuer.<\/li>\n<li>Core 0.7: the shared library is now required at ^0.7.<\/li>\n<li>Release build: a developer document that had been copied into the bundled library was shipped with 1.1.0; it is removed, and the build now refuses to ship such files.<\/li>\n<\/ul>\n\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Core 0.4: the sync cursor is now kept per receiving account and network. A mainnet transaction can no longer stall the testnet sync, and a testnet reset no longer requires cleaning the database - the plugin resyncs on its own.<\/li>\n<li>Core 0.3: when several transactions carry the same destination tag, the newest one in the quoted asset is used. A stray payment in another asset no longer blocks settlement of the real one.<\/li>\n<li>Database schema version 3: <code>network<\/code> column on the transactions table, backfilled from the CTID; migrates automatically on the first request after the update.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>The plugin is now an adapter over the shared <code>hardcastle\/ledger-direct-core<\/code> library, so prices, exchange rates, destination tags, transaction sync and the settlement decision are identical across all LedgerDirect plugins.<\/li>\n<li>Fix: XRP payments were only accepted when the delivered amount was at or below the requested amount. Overpayment now settles, and a shortfall of up to 0.15 % is tolerated, as in every other LedgerDirect plugin.<\/li>\n<li>Fix: stablecoin payments were compared as raw arrays; a payment from another issuer is now always rejected and an overpayment accepted.<\/li>\n<li>Fix: the RLUSD and USDC switches were wired to the wrong asset depending on the network.<\/li>\n<li>Fix: the quote expiry setting was ignored (every quote lasted 15 hours). Quotes now expire as configured and are refreshed in place on the payment page, keeping the same destination tag.<\/li>\n<li>New: orders are settled in the background every five minutes via Action Scheduler, so a customer who closes the payment page still gets their order marked paid.<\/li>\n<li>New: the payment page shows how much of the requested amount has arrived and what is still missing.<\/li>\n<li>New: exchange rates are cached briefly (60 s) so a checkout render no longer waits for three price oracles.<\/li>\n<li>Database schema version 2: numeric ledger index, per-account destination-tag counter; migrates automatically on the first request after the update.<\/li>\n<li>Requires PHP 8.2.<\/li>\n<\/ul>\n\n<h4>0.11.0<\/h4>\n\n<ul>\n<li>Fix: the destination-tag table existed under three different names across install.php and XrplTxService, so reserved destination tags were silently never persisted on fresh installs. Unified to <code>ledger_direct_xrpl_destination_tag<\/code>, with an automatic upgrade routine for existing installs.<\/li>\n<li>Fix: add a unique constraint on the transactions table's <code>hash<\/code> column to enforce deduplication at the database level.<\/li>\n<li>Fix: KrakenOracle only ever returned a price for the XRP\/USD pair (it read a hardcoded response key); it now reads any pair generically.<\/li>\n<li>Fix: price oracle failures are now logged instead of silently discarded, to make pricing issues diagnosable.<\/li>\n<li>Fix: the \"change payment method\" AJAX action always failed due to a typo reading the wrong POST field.<\/li>\n<li>Add: order pricing metadata now includes <code>base_asset<\/code> and <code>quote_currency<\/code> fields alongside the existing <code>pairing<\/code>\/<code>exchange_rate<\/code>\/<code>amount_requested<\/code>.<\/li>\n<li>Remove: the unused, always-returns-zero RippleOracle.<\/li>\n<li>Internal: added automated tests, a CI pipeline (lint, coding standards, static analysis, PHPUnit, WordPress Plugin Check), and a WordPress.org SVN release workflow.<\/li>\n<\/ul>","raw_excerpt":"Accept XRP, EUR, USD directly on the XRP Ledger, using LedgerDirect!","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/os.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/248462","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/os.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/os.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/os.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=248462"}],"author":[{"embeddable":true,"href":"https:\/\/os.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/ledgerdirect"}],"wp:attachment":[{"href":"https:\/\/os.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=248462"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/os.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=248462"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/os.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=248462"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/os.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=248462"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/os.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=248462"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/os.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=248462"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}