Solana Pay
Solana Pay là một framework thanh toán mã nguồn mở, cho phép các giao dịch tức thì với phí gần như bằng không trên Solana.
Đã được hàng triệu doanh nghiệp tin tưởng thông qua tích hợp Shopify, nó chuyển đổi nền thương mại bằng cách loại bỏ hoàn toàn các trung gian thanh toán truyền thống.
Các chức năng chính
Solana Pay được đặc trưng bởi:
- Thanh toán trực tiếp: Các khoản thanh toán đi thẳng từ ví khách hàng đến ví thương nhân bằng SOL hoặc bất kỳ SPL token nào. Không có ngân hàng, bộ phận xử lý hoặc trung gian nào nhận phần trăm.
- Xác nhận ngay lập tức: Các khoản tiền đến ngay lập tức khi được xác nhận nhờ vào việc xử lý giao dịch dưới một giây của Solana.
- Tương thích toàn cầu: Một triển khai hoạt động với mọi ví và ứng dụng Solana.
Mọi thứ được thông qua bởi hai loại yêu cầu cơ bản:
Yêu cầu Transfer (Các thanh toán đơn giản)
Các URL phi tương tác đối với các giao dịch đã được định nghĩa từ trước. Mọi thứ đều được mã hóa trên URL.
solana:mvines9iiHiQTysrwkJjGf2gb9Ex9jXJX8ns3qwf2kN?amount=0.01&spl-token=EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v
Yêu cầu Giao dịch (Các thanh toán động)
Các URL tương tác được tạo thành từ các giao dịch phức tạp ở phía máy chủ.
Ví điện tử thực hiện một yêu cầu HTTP đến máy chủ của bạn, máy chủ sẽ trả về một giao dịch tùy chỉnh được xây dựng với dữ liệu thời gian thực.
Các lựa chọn tích hợp
Solana Pay đi kèm với:
- QR Codes: Thanh toán ngay lập tức tại chỗ
- Shareable Links: Hoạt động trên bất kỳ nền tảng nào
- Embedded Buttons: Trải nghiệm thanh toán liền mạch
- Custom Flows: Giao dịch nhiều bên, truy cập có điều kiện, ký một phần
Vì sao nó quan trọng
Solana Pay thay thế toàn bộ quy trình thanh toán truyền thống bằng các URL đơn giản. Thay vì tích hợp với nhiều ví và xử lý các luồng giao dịch phức tạp, bạn tạo ra các liên kết được chuẩn hóa hoạt động ở mọi nơi một cách tự động.
Luồng thanh toán truyền thống: Khách hàng → Ngân hàng → Bộ phận xử lý thanh toán → Ngân hàng của bạn → Bạn (ngày hôm sau, trừ phí)
Luồng Solana Pay: Khách hàng → Bạn (ngay lập tức, phí gần như bằng không)
Tham chiếu
Các tham chiếu là một trong những phần quan trọng nhất của quy trình thanh toán bằng Solana Pay. Vì backend của bạn không gửi giao dịch đến mạng mà chỉ trả về phản hồi giao dịch mà ví ký, nên không có chữ ký giao dịch nào để giúp xác định xem thanh toán đã được thực hiện hay chưa.
Một reference
là một khóa công khai duy nhất được đính kèm như một tài khoản không ký, không thay đổi trong các giao dịch. Nó không ảnh hưởng đến hành vi giao dịch nhưng phục vụ như một định danh theo dõi.
Dưới đây là quy trình:
Cách nó hoạt động:
- Tạo một tham chiếu duy nhất (publickey) cho mỗi yêu cầu thanh toán
- Đính kèm nó trong các URL yêu cầu giao dịch của bạn dưới dạng tham số
- Thêm nó vào các instruction giao dịch của bạn như một tài khoản không ký
- Theo dõi giao dịch bằng cách sử dụng tham chiếu
Bạn có thể sử dụng phương thức RPC getSignaturesForAddress
của Solana hoặc hàm bổ trợ findReference
của thư viện @solana/pay
để xác định các giao dịch chứa tham chiếu của bạn như sau:
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]);
Tạo mã QR
Chuyển bất kỳ yêu cầu giao dịch nào thành mã QR có thể quét được bằng cách sử dụng thư viện @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"
);