Solana Pay
Solana Pay — це платіжна система з відкритим кодом, яка забезпечує миттєві транзакції з майже нульовою комісією на Solana.
Вже довірена мільйонами підприємств через інтеграцію з Shopify, вона трансформує комерцію, повністю усуваючи традиційних платіжних посередників.
Основні функціональні можливості
Solana Pay характеризується:
- Прямими розрахунками: Платежі йдуть безпосередньо з гаманця клієнта до гаманця продавця в SOL або будь-якому токені SPL. Без банків, процесорів чи посередників, які беруть комісію.
- Миттєвою фінальністю: Кошти надходять одразу після підтвердження завдяки розрахункам Solana, що тривають менше секунди.
- Універсальною сумісністю: Одна реалізація працює з кожним гаманцем та додатком Solana.
Все через два основні типи запитів:
Запити на переказ (прості платежі)
Неінтерактивні URL-адреси для заздалегідь визначених транзакцій. Все закодовано в URL.
solana:mvines9iiHiQTysrwkJjGf2gb9Ex9jXJX8ns3qwf2kN?amount=0.01&spl-token=EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v
Запити на транзакції (динамічні платежі)
Інтерактивні URL-адреси, які формують складні транзакції на стороні сервера.
Гаманець робить HTTP-запит до вашого сервера, який повертає спеціальну транзакцію, створену з даними в реальному часі.
Варіанти інтеграції
Solana Pay пропонує:
- QR-коди: Миттєві платежі при особистій присутності
- Посилання для поширення: Працюють на будь-якій платформі
- Вбудовані кнопки: Безперебійний досвід оформлення замовлення
- Індивідуальні потоки: Транзакції за участю кількох сторін, умовний доступ, часткове підписання
Чому це важливо
Solana Pay замінює весь традиційний стек платежів простими URL-адресами. Замість інтеграції з кількома гаманцями та обробки складних потоків транзакцій ви створюєте стандартизовані посилання, які автоматично працюють скрізь.
Традиційний процес оплати: Клієнт → Банк → Платіжний процесор → Ваш банк → Ви (через кілька днів, мінус комісії)
Процес оплати Solana Pay: Клієнт → Ви (миттєво, майже нульові комісії)
Reference
Посилання (References) є однією з найважливіших частин стеку Solana Pay. Оскільки ваш бекенд не надсилає транзакції в мережу, а лише повертає відповіді транзакцій, які підписують гаманці, немає підписів транзакцій, які допомогли б визначити, чи пройшов платіж.
reference
— це унікальний публічний ключ, включений як несигнатурний, незаписуваний обліковий запис у транзакціях. Він не впливає на поведінку транзакції, але служить ідентифікатором для відстеження.
Ось як це працює:
- Згенеруйте унікальне посилання (публічний ключ) для кожного запиту на оплату
- Включіть його в URL-адреси запитів транзакцій як параметр
- Додайте його до інструкцій транзакції як несигнатурний обліковий запис
- Відстежуйте транзакцію за допомогою посилання
Ви можете використовувати RPC-метод getSignaturesForAddress
Solana або допоміжну функцію findReference
бібліотеки @solana/pay
для пошуку транзакцій, що містять ваше посилання, ось так:
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
Перетворіть будь-який запит транзакції на QR-код для сканування за допомогою бібліотеки @solana/pay
:
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"
);