PHPackages                             slowbeardigger/xmr-pay-laravel - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Payment Processing](/categories/payments)
4. /
5. slowbeardigger/xmr-pay-laravel

ActiveLibrary[Payment Processing](/categories/payments)

slowbeardigger/xmr-pay-laravel
==============================

Accept Monero in Laravel. Non-custodial, view-key only, no monero-wallet-rpc, no server. A thin adapter over slowbeardigger/xmr-pay.

v0.1.1(3w ago)01MITPHPPHP &gt;=8.0

Since Jun 23Pushed 3w agoCompare

[ Source](https://github.com/SlowBearDigger/xmr-pay-laravel)[ Packagist](https://packagist.org/packages/slowbeardigger/xmr-pay-laravel)[ Docs](https://github.com/SlowBearDigger/xmr-pay-laravel)[ RSS](/packages/slowbeardigger-xmr-pay-laravel/feed)WikiDiscussions main Synced 2w ago

READMEChangelog (2)Dependencies (4)Versions (3)Used By (0)

xmr-pay for Laravel
===================

[](#xmr-pay-for-laravel)

Accept Monero in a Laravel app. The money goes straight to your wallet. There is no company in the middle, no account to open, no fee paid to anyone, and nobody can freeze, see, or hold your funds but you.

This is a thin adapter over the [xmr-pay engine](https://github.com/SlowBearDigger/xmr-pay): a config file, a service, and a facade. The engine does the work in pure PHP, holding only your *view* key, against a Monero node you choose. No `monero-wallet-rpc`, no daemon on your box, no backend service.

[![packagist](https://camo.githubusercontent.com/3f3db4d30e0864cb0310420ec6f6a2b9911ebacd45d9214c86102e0920771222/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f736c6f77626561726469676765722f786d722d7061792d6c61726176656c3f636f6c6f723d626c7565)](https://packagist.org/packages/slowbeardigger/xmr-pay-laravel)[![license: MIT](https://camo.githubusercontent.com/b8cadaa967891081f8f165695470689986c028821dd8a040132f6e661795dc0d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d626c7565)](LICENSE)

Install
-------

[](#install)

```
composer require slowbeardigger/xmr-pay-laravel
php artisan vendor:publish --tag=xmr-pay-config

```

Then set your wallet in `.env`. The view key and any node password are sensitive. Stagenet coins are free test XMR:

```
XMRPAY_ADDRESS=4...your primary address...
XMRPAY_VIEW_KEY=...your private view key...
XMRPAY_NETWORK=stagenet
XMRPAY_NODES=http://node.monerodevs.org:38089
XMRPAY_MIN_CONFIRMATIONS=10

```

For authenticated nodes, use structured JSON instead of putting credentials in the URL. JSON takes precedence over the legacy `XMRPAY_NODES` list:

```
XMRPAY_NODES_JSON='[{"url":"https://node.example:18081","auth":"digest","username":"merchant","password":"replace-me","allow_insecure_http":false}]'

```

Supported authentication modes are `none`, `basic`, and `digest`. Authenticated plain HTTP is blocked unless that node sets `allow_insecure_http` to `true`; use the opt-in only for a trusted private network. Keep the JSON in `.env`, never in version control.

Laravel resolves these values into `bootstrap/cache/config.php` after `php artisan config:cache`. Protect that file with the same server permissions as `.env` and clear/rebuild the cache when node credentials change.

Use it
------

[](#use-it)

Give each order a unique receiving subaddress, show the buyer a QR, and check the chain when you poll or run a job. The facade resolves the configured service.

```
use XmrPay\Laravel\Facades\XmrPay;

// when an order is created — derive its own subaddress from your address + view key
$index   = $order->id;                                  // any unique integer per order
$address = XmrPay::subaddressFor($index);
$uri     = XmrPay::paymentUri($address, '0.25', "Order #{$order->id}");

// store the index and the current height on the order, then render $uri as a QR
$order->update(['xmr_index' => $index, 'xmr_from' => XmrPay::tipHeight()]);

// later — in a scheduled command, a queued job, or a poll route — ask if it is paid
$r = XmrPay::checkOrder($order->xmr_index, '0.25', $order->xmr_from);
if (! empty($r['paid'])) {
    $order->markPaid();   // funds are already in your wallet
}
```

`checkOrder()` sums every confirmed payment to the order's subaddress, so a partial payment or a top-up settles once the total adds up. The scan is bounded; for a long-open order, call it again from the returned `scanned_to` + 1 on the next poll.

If you would rather have the buyer paste a transaction id ("I've paid"), verify a single one:

```
$r = XmrPay::verifyPayment($txid, $address);
// $r['found'], $r['commitment_ok'], $r['confirmations'], $r['amount_atomic']
```

The truths (please read before taking real money)
-------------------------------------------------

[](#the-truths-please-read-before-taking-real-money)

> **Monero is irreversible and the sender is hidden, so there are no automatic refunds.** If you need to refund someone you send them XMR back by hand. **You are trusting the node you point it at.** A public node is fine for tips; for real revenue run your own, or list two nodes so a lagging one can only delay a payment, never confirm it early. **Few confirmations is fast but reversible.** Raise `XMRPAY_MIN_CONFIRMATIONS` for higher-value orders. That is your risk dial. **The browser is never trusted.** Release goods only after `checkOrder()`/`verifyPayment()`confirmed a real payment on-chain.

How it works
------------

[](#how-it-works)

Nothing always-on is required. `checkOrder()` reads public chain data from the node and does the Monero math in PHP with your view key: it derives the order subaddress, detects the output, verifies the RingCT amount commitment, and counts confirmations. The same engine powers [xmr-pay for WooCommerce](https://github.com/SlowBearDigger/xmr-pay-woocommerce); the verification is cross-checked against the reference Monero library on real stagenet payments.

Status
------

[](#status)

New. The engine underneath is the same one the WooCommerce plugin runs in production, and this adapter is verified end to end against real stagenet payments. It has not yet seen wide Laravel production use. Test on stagenet first.

###  Health Score

34

—

LowBetter than 74% of packages

Maintenance95

Actively maintained with recent releases

Popularity1

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity30

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~21 days

Total

2

Last Release

23d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/c40780b079864c2a0ef2d3dee8e1a49d9514047f30a178902720cf41b9caec1a?d=identicon)[SlowBearDigger](/maintainers/SlowBearDigger)

---

Top Contributors

[![SlowBearDigger](https://avatars.githubusercontent.com/u/240974587?v=4)](https://github.com/SlowBearDigger "SlowBearDigger (1 commits)")

---

Tags

laravelpaymentscheckoutcryptocurrencyMoneronon-custodialXMR

### Embed Badge

![Health badge](/badges/slowbeardigger-xmr-pay-laravel/health.svg)

```
[![Health](https://phpackages.com/badges/slowbeardigger-xmr-pay-laravel/health.svg)](https://phpackages.com/packages/slowbeardigger-xmr-pay-laravel)
```

###  Alternatives

[sebdesign/laravel-viva-payments

A Laravel package for integrating the Viva Payments gateway

4952.7k](/packages/sebdesign-laravel-viva-payments)[linkxtr/laravel-qrcode

A clean, modern, and easy-to-use QR code generator for Laravel

3827.1k](/packages/linkxtr-laravel-qrcode)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
