Every time a customer pays with a credit card, the merchant loses 2.5–3.5% to payment processors. On a $100 purchase, that's $3.50 gone. For a business doing $500K/year in sales, credit card fees eat $12,500–$17,500 annually. That money goes to Visa, Mastercard, Stripe, and the issuing banks — not to the merchant, not to the customer.
Solana Pay eliminates nearly all of that. A USDC payment on Solana costs less than $0.01 in transaction fees, settles in under 400 milliseconds, and hits the merchant's wallet with no intermediary taking a cut. No chargebacks, no 2-day settlement windows, no merchant account applications.
This isn't theoretical. Merchants from coffee shops to e-commerce stores are using Solana Pay in production today. This guide covers everything you need to know — whether you're a merchant looking to reduce fees or a developer building payment integrations.
How Solana Pay Works
Solana Pay is an open-source payment protocol, not a company. It's a specification for encoding payment requests into URLs and QR codes that any Solana wallet can read. There's no signup, no approval process, no monthly fees. It's a standard that anyone can implement.
The protocol supports two modes:
Transfer Requests (Simple Payments)
The basic mode. A Transfer Request encodes a recipient wallet address, an amount, and an SPL token (usually USDC) into a URL. When scanned, the customer's wallet app constructs and signs the transfer transaction directly.
The URL format is straightforward:
solana:MERCHANT_WALLET?amount=25.00&spl-token=USDC_MINT&reference=UNIQUE_REF&label=StoreName&message=Order%20%23123
That's it. No API calls, no server-side processing. The customer's wallet reads the URL, shows the payment details, and sends the tokens directly to the merchant's wallet. The reference parameter is a randomly generated public key added to the transaction, which the merchant's system monitors to confirm payment.
Transaction Requests (Programmable Payments)
The advanced mode. Instead of encoding the full payment in the URL, a Transaction Request points to a server endpoint that dynamically generates the transaction. This enables:
- Dynamic pricing (convert USD to SOL at current rates)
- Loyalty points (mint NFTs or tokens as rewards in the same transaction)
- Conditional logic (apply discounts, check inventory)
- Multi-instruction transactions (payment + receipt NFT + loyalty token in one atomic transaction)
- Token swaps (customer pays in any token, merchant receives USDC via Jupiter aggregation)
When the customer scans the QR code, their wallet fetches the transaction from your server, displays it for approval, signs it, and submits it to the network. The merchant's server monitors for confirmation.
Why Merchants Should Care
The fee comparison alone makes the case:
| Payment Method | Fee per $100 Transaction | Settlement Time | Chargebacks |
|---|
| Visa/Mastercard | $2.50–$3.50 | 1–3 business days | Yes |
| Stripe | $2.90 + $0.30 | 2 business days | Yes |
| PayPal | $3.49 + $0.49 | Instant to PayPal balance | Yes |
| Square | $2.60 + $0.10 | 1–2 business days | Yes |
| Solana Pay (USDC) | ~$0.005 | ~400ms | No |
That's not a marginal improvement — it's an order-of-magnitude reduction in payment processing costs. For high-volume merchants, the savings are substantial.
No Chargebacks
This is underrated. Credit card chargebacks cost U.S. merchants over $40 billion annually. A customer can dispute a charge months after purchase, and the merchant bears the burden of proof. Chargeback fraud (friendly fraud) accounts for roughly 60–75% of all chargebacks.
Blockchain transactions are final. Once a USDC transfer confirms on Solana, it's irreversible. The merchant receives the funds, period. For businesses selling digital goods, services, or operating in high-chargeback industries, this alone justifies the switch.
Instant Settlement
Credit card settlements take 1–3 business days. That's cash you've earned sitting in limbo. On Solana, USDC arrives in your wallet within seconds. Better cash flow, better treasury management, no waiting.
Global by Default
No merchant account applications. No country restrictions (from the protocol side). A merchant in Lagos accepts USDC from a customer in Tokyo the same way they'd accept it from someone across the street. Same fees, same speed, same finality.
Shopify Integration
The most practical way for e-commerce merchants to adopt Solana Pay is through Shopify. Multiple apps bridge Solana Pay into the Shopify checkout flow.
Sphere provides a Shopify plugin that adds Solana Pay as a checkout option. Setup takes about 15 minutes:
- Install the Sphere Shopify app from the Shopify App Store
- Connect your Solana wallet (any wallet — Phantom is the most common)
- Configure accepted tokens (USDC, SOL, or both)
- Enable the payment method in your Shopify checkout settings
Customers see "Pay with Solana" at checkout alongside traditional payment options. They scan a QR code or connect their wallet (on mobile, deep links open the wallet app directly). Payment confirms in seconds, and the order is automatically marked as paid in Shopify.
Sphere also handles:
- Automatic currency conversion: Price items in USD, accept USDC
- Webhook notifications: Real-time payment confirmation to your backend
- Multi-token acceptance: Let customers pay in SOL, BONK, or other SPL tokens while you receive USDC
- Refund management: Issue refunds through the dashboard
Using Solana Pay Directly
If you want more control or are building a custom Shopify storefront, you can integrate the Solana Pay JavaScript SDK directly:
import { createQR, encodeURL, findReference, validateTransfer } from '@solana/pay';
import { Connection, PublicKey, Keypair } from '@solana/web3.js';
// Create a payment request
const recipient = new PublicKey('YOUR_MERCHANT_WALLET');
const amount = new BigNumber(25.00);
const reference = Keypair.generate().publicKey;
const label = 'Your Store';
const message = 'Order #1234';
const url = encodeURL({
recipient,
amount,
splToken: USDC_MINT,
reference,
label,
message,
});
// Generate QR code
const qr = createQR(url, 360, 'transparent');
qr.append(document.getElementById('qr-container'));
// Poll for payment confirmation
const connection = new Connection('YOUR_RPC_ENDPOINT');
const signatureInfo = await findReference(connection, reference, { finality: 'confirmed' });
await validateTransfer(connection, signatureInfo.signature, {
recipient,
amount,
splToken: USDC_MINT,
});
// Payment confirmed — fulfill the order
The findReference function polls the blockchain for a transaction containing the reference key. Once found, validateTransfer verifies the correct amount was sent to the correct recipient. The whole flow takes 5–10 seconds from scan to confirmed payment.
Point-of-Sale for Physical Stores
For brick-and-mortar merchants, the flow is similar but optimized for in-person transactions.
The Basic Setup
All you need is a tablet or phone displaying a QR code. The simplest approach:
- Generate a static QR code for your wallet address (works for fixed-price items)
- Or use a simple web app that generates dynamic QR codes per transaction
Dedicated POS Solutions
Several projects have built dedicated point-of-sale interfaces for Solana Pay:
- Sphere Terminal: A web-based POS terminal. Enter the amount, generate a QR code, customer scans and pays. Transaction history and daily totals built in.
- TipLink: TipLink takes a different approach — instead of QR codes, you create payment links that work on any device. Useful for invoicing and remote payments, but also works in-person. The key advantage: customers don't need a wallet app. TipLink creates a temporary custodial wallet, so even crypto newcomers can pay using just a link and a credit card to fund it.
Handling Price Volatility
If you accept USDC, there's no volatility concern — 1 USDC = $1 (within the typical stablecoin peg range). This is why most merchants default to USDC acceptance.
If you accept SOL directly, you'll want to either:
- Instant conversion: Use a Transaction Request that swaps SOL to USDC via Jupiter in the same transaction
- Off-ramp regularly: Convert SOL to fiat through an exchange on a daily/weekly schedule
- Hold: If you're bullish on SOL and can absorb the volatility
Most merchants go with option 1 or simply accept USDC only.