Solana Pay

Solana Pay ist ein Open-Source-Zahlungs-Framework, das sofortige Transaktionen mit nahezu null Gebühren auf Solana ermöglicht.
Bereits von Millionen von Unternehmen durch die Shopify-Integration vertraut, revolutioniert es den Handel, indem es traditionelle Zahlungsvermittler vollständig eliminiert.
Core Functionalities
Solana Pay zeichnet sich aus durch:
Direkte Abwicklung: Zahlungen gehen direkt von Kunden- zu Händler-Wallets in SOL oder jedem SPL-Token. Keine Banken, Prozessoren oder Vermittler, die Anteile nehmen.
Sofortige Finalität: Dank Solanas Abwicklung im Subsekundenbereich kommen Gelder sofort nach der Bestätigung an.
Universelle Kompatibilität: Eine Implementierung funktioniert mit jeder Solana-Wallet und Anwendung.
Alles durch zwei grundlegende Anforderungstypen:
Transfer-Anfragen (einfache Zahlungen)
Nicht-interaktive URLs für vorbestimmte Transaktionen. Alles in der URL kodiert.
solana:mvines9iiHiQTysrwkJjGf2gb9Ex9jXJX8ns3qwf2kN?amount=0.01&spl-token=EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1vTransaktionsanfragen (dynamische Zahlungen)
Interaktive URLs, die komplexe Transaktionen serverseitig zusammenstellen.
Die Wallet sendet eine HTTP-Anfrage an deinen Server, der eine benutzerdefinierte Transaktion mit Echtzeitdaten zurückgibt.
Integrationsoptionen
Solana Pay bietet:
QR-Codes: Sofortige Zahlungen vor Ort
Teilbare Links: Funktionieren auf jeder Plattform
Eingebettete Buttons: Nahtlose Checkout-Erlebnisse
Benutzerdefinierte Abläufe: Multi-Parteien-Transaktionen, bedingter Zugriff, teilweise Signierung
Why It Matters
Solana Pay ersetzt den gesamten traditionellen Zahlungs-Stack durch einfache URLs. Anstatt mit mehreren Wallets zu integrieren und komplexe Transaktionsabläufe zu handhaben, erstellst du standardisierte Links, die überall automatisch funktionieren.
Traditioneller Zahlungsablauf: Kunde → Bank → Zahlungsabwickler → Ihre Bank → Sie (Tage später, abzüglich Gebühren)
Solana Pay Ablauf: Kunde → Sie (sofort, nahezu gebührenfrei)
Reference
Referenzen sind einer der wichtigsten Bestandteile des Solana Pay-Stacks. Da Ihr Backend keine Transaktionen an das Netzwerk sendet, sondern nur Transaktionsantworten zurückgibt, die von Wallets signiert werden, gibt es keine Transaktionssignaturen, die helfen könnten festzustellen, ob die Zahlung durchgeführt wurde.
Eine reference ist ein einzigartiger Public Key, der als Nicht-Unterzeichner, nicht beschreibbares Konto in Transaktionen enthalten ist. Es beeinflusst das Transaktionsverhalten nicht, dient aber als Tracking-Identifikator.
Hier ist der Ablauf:
Generieren Sie eine eindeutige Referenz (Public Key) für jede Zahlungsanforderung
Fügen Sie sie in Ihren Transaktionsanfrage-URLs als Parameter ein
Fügen Sie sie zu Ihren Transaktionsanweisungen als Nicht-Unterzeichner-Konto hinzu
Verfolgen Sie die Transaktion mit der Referenz
Sie können Solanas getSignaturesForAddress RPC-Methode oder den findReference Helper der @solana/pay Bibliothek verwenden, um Transaktionen zu finden, die Ihre Referenz enthalten, wie hier:
useEffect(() => {
// Poll the network for transactions that include the reference address
const interval = setInterval(async () => {
try {
// Find transactions that include the reference address
const signatureInfo = await findReference(connection, reference, {
until: mostRecentNotifiedTransaction.current, // Only look for transactions after the most recent one we've found
finality: "confirmed",
});
// Update the most recent transaction with the transaction we just found
mostRecentNotifiedTransaction.current = signatureInfo.signature;
// Toast notification
displayToast(signatureInfo.signature);
} catch (e) {
if (e instanceof FindReferenceError) {
// No transaction found yet, ignore this error
return;
}
console.error("Unknown error", e);
}
}, 1000); // Check for new transactions every second
return () => {
clearInterval(interval);
};
}, [reference]);QR Code Generation
Wandeln Sie jede Transaktionsanfrage in einen scannbaren QR-Code um, indem Sie die @solana/pay Bibliothek verwenden:
import { createQR, encodeURL, TransactionRequestURLFields } from '@solana/pay';
const urlParams: TransactionRequestURLFields = {
link: new URL("https://yourapi.com/pay"),
};
const solanaUrl = encodeURL(urlParams);
const qr = createQR(
solanaUrl,
400,
"transparent"
);