| Crates.io | acceptxmr |
| lib.rs | acceptxmr |
| version | 0.14.0 |
| created_at | 2021-11-01 03:02:18.863011+00 |
| updated_at | 2024-07-04 21:13:14.117421+00 |
| description | Accept monero in your application. |
| homepage | |
| repository | https://github.com/busyboredom/acceptxmr |
| max_upload_size | |
| id | 474997 |
| size | 495,147 |
AcceptXMR: Accept Monero in Your ApplicationAcceptXMR is a library for building payment gateways.
For a batteries-included gateway, please see
AcceptXMR-Server.
To use AcceptXMR in your rust project, first add it to your Cargo.toml. For
example if you intend to use the Sqlite storage backend and need serde
support, you should add this to your Cargo.toml:
[dependencies]
acceptxmr = { version = "0.12", features = ["serde", "sqlite"] }
You can then create and run a PaymentGateway:
use acceptxmr::{PaymentGateway, storage::stores::Sqlite};
use std::time::Duration;
let private_view_key =
"ad2093a5705b9f33e6f0f0c1bc1f5f639c756cdfc168c8f2ac6127ccbdab3a03";
let primary_address =
"4613YiHLM6JMH4zejMB2zJY5TwQCxL8p65ufw8kBP5yxX9itmuGLqp1dS4tkVoTxjyH3aYhYNrtGHbQzJQP5bFus3KHVdmf";
let store = Sqlite::new("AcceptXMR_DB", "invoices")?;
let payment_gateway = PaymentGateway::builder(
private_view_key.to_string(),
primary_address.to_string(),
store
)
.daemon_url("https://node.example.com") // Specify a node.
.scan_interval(Duration::from_millis(500)) // Scan for updates every 500 ms.
.build()?;
payment_gateway.run()?;
Finally, you can create invoices and subscribe to them so you know when they get paid:
// Oh hey, a customer is checking out!
let invoice_id = payment_gateway.new_invoice(
100 * 10 ** 9, // We'll charge 100 millineros,
0, // require 0 confirmations,
10, // expire in 10 blocks,
"Large Cheese Pizza".to_string() // and get the order right.
).await?;
// We can now subscribe to updates to the pizza invoice.
let subscriber = payment_gateway.subscribe(invoice_id)?
.expect("invoice doesn't exist");
// Have we been paid yet?
let update = subscriber.recv().await.expect("channel closed");
if update.is_confirmed() {
// Great, ship the pizza and stop tracking the invoice.
println!("Invoice for \"{}\" paid", update.description());
payment_gateway.remove_invoice(invoice_id).await?;
}
For more detailed documentation, see docs.rs or the examples.