Payment Link QR Codes on Snapkit (PayPal.me, Stripe Checkout URLs in the URL Tab)
Snapkit has no Payment or PayPal tab. Encode a PayPal.me, Stripe Payment Link, or other hosted checkout HTTPS URL in the URL tab: URL shapes, static vs dynamic when prices change, iPhone vs Android, and mistakes that charge the wrong account.
Snapkit’s homepage has URL, Text, WiFi, Contact, SMS, Email, and Phone. There is no Payment tab, no PayPal tab, and no Stripe builder. A “scan to pay / donate / settle this invoice” QR is a URL QR. You paste a finished https:// payment or checkout address (PayPal.Me, a Stripe Payment Link, or another hosted checkout URL your dashboard already copied), download the PNG, and the camera opens that HTTPS link. The payment processor does the rest.
This page is the payment-link URL construction and the Snapkit wiring. It is not a rewrite of Bitcoin wallet codes (bitcoin: / ethereum: URI schemes, not fiat checkout pages), URL vs Text (tab choice, not destination strings), WhatsApp wa.me, calendar templates, or Google Maps location. Those never teach paypal.me/{handle}, buy.stripe.com, or why an expired Payment Link still makes a scannable PNG. It is the checkout counterpart to that URL-tab destination series.
What the QR actually encodes
A payment-link code on this product is a website URL. The printed modules are not a Snapkit merchant account, a card vault, an invoice object, or a fee Snapkit collected. They are the same kind of URL payload as any other URL-tab code.
On scan, the camera treats it like any other https:// link. If the destination is PayPal.Me or a Stripe Payment Link, the OS usually hands that host to the PayPal / Stripe app (when installed and when Universal Links / App Links claim the host) or to the browser. The person still chooses a payment method and taps Pay. That is the same honesty as Snapkit’s SMS tab: the QR starts a checkout, not a completed charge.
Snapkit does not process the payment, confirm the amount, or show you who paid. There is no Snapkit checkout fee and no payment analytics on a static PNG. We only encode the string you pasted.
A bitcoin: address is a different job. That construction lives on Bitcoin wallet QR codes. Do not print a wallet URI and label it “card / PayPal.”
Test the live URL in a browser before you print. A deactivated Stripe Payment Link still makes a scannable PNG.
Exact URL formats
Snapkit’s URL field encodes whatever you typed. There is no silent https:// prefix and no PayPal or Stripe formatter. Paste the finished URL, including the scheme. Formats vary by processor and by dashboard. Prefer the Copy link your processor already built over a slug you typed from memory.
PayPal.Me (paypal.me / www.paypal.me)
PayPal’s documented PayPal.Me help: share paypal.me/{YourName}. Anyone can open it, type an amount, and send. You do not have to expose your email. Copy the handle from PayPal.Me or Account settings — do not invent one.
Open amount (what you want on a tip jar):
https://paypal.me/ExampleCafe
https://www.paypal.me/ExampleCafe is the same product. Include https://.
Suggested amount. PayPal documents a path suffix. paypal.me/ExampleCafe/25 requests 25.00 in that account’s default currency.
https://paypal.me/ExampleCafe/25
Suggested amount plus currency code. PayPal’s own example shape is {amount}{CURRENCY} with no extra slash (their help uses …/25AUD). Some corridors cannot send every currency. Confirm the sender can pay in the code you printed.
https://paypal.me/ExampleCafe/25USD
Handles are alphanumeric, no dashes or spaces, max 20 characters, and cannot be renamed once created. A printed paypal.me/OldBrand does not follow a rebrand. Hide the link in PayPal if you must stop new sends — the PNG will still decode that URL.
Other PayPal HTTPS pages (Donate buttons with hosted_button_id=, invoice emails, checkout.paypal.com) are also URL-tab jobs if you copied a full https:// address. Do not reconstruct query keys from memory. Copy from the dashboard, open the URL logged out, then paste.
Stripe Payment Links (buy.stripe.com and siblings)
Stripe Payment Links are hosted Checkout pages. The Dashboard Copy control (Payment links) emits the public URL. Stripe’s API url field is the same string.
Common live / test hosts:
https://buy.stripe.com/…
https://buy.stripe.com/test_…
test_ in the path is Stripe’s documented test-mode prefix. Do not print a test link on a counter. A test Payment Link still scans; the charge never hits a real card.
Stripe also documents other hostnames from Payment Link submit_type: donate.stripe.com (donate), book.stripe.com (book). Subscribe / pay still use buy.stripe.com. A custom domain you configured in Stripe (pay.example.com/…) is valid if that is the URL the Dashboard copied. Do not invent the token after the slash.
Optional query keys Stripe documents on Payment Links (prefilled_email, prefilled_promo_code, client_reference_id, UTM pairs) are already encoded when you copy from the Dashboard parameter dialog. Extra tracking on a long custom-domain path densifies the QR. Snapkit warns near 1,000 characters and blocks download past about 1,200.
Stripe Checkout Session URLs (checkout.stripe.com/c/pay/… and similar) are usually one-time and expire. Do not print a Session URL you opened in a browser tab. Payment Links are the reusable product.
Deactivate a Payment Link in Stripe and the PNG still scans — the page then says the link is no longer active. That is a processor setting, not a Snapkit bug.
Generic hosted checkout HTTPS
Square Payment Links, Shopify checkout / draft-order links, SumUp, and similar hosted pages are the same Snapkit job: URL tab, exact https:// string. Hosts and path shapes change. There is no universal {vendor}.me/{sku} we can invent here.
| You type in the URL tab | What the PNG holds | What you wanted |
|---|---|---|
Copied https://paypal.me/ExampleCafe | That exact string | Open-amount PayPal.Me |
https://paypal.me/ExampleCafe/25 | That exact string | PayPal suggested 25 in default currency |
https://paypal.me/ExampleCafe/25USD | That exact string | PayPal suggested 25 USD (if the corridor allows it) |
Copied https://buy.stripe.com/… | That exact string | Stripe Payment Link checkout |
Copied https://donate.stripe.com/… or https://book.stripe.com/… | That exact string | Stripe donate / book host |
Copied https://pay.example.com/… (your Stripe custom domain) | That exact string | Same Payment Link, branded host |
Copied Square / Shopify / other hosted https://… | That exact string | That processor’s checkout |
paypal.me/ExampleCafe (no scheme) | Bare host | Often shown as text; one brand may guess a site |
paypal:// or stripe:// | Custom scheme | Many cameras ignore it; no web fallback |
bitcoin:bc1q… in URL or Text | Wallet URI | Crypto app, not fiat checkout — Bitcoin guide |
| Payment URL pasted into Text | Characters | Words on screen, maybe a chip |
Build query values with a real encoder if you add them by hand. Do not leave raw spaces, &, or # in a suffix you typed. A copied Dashboard link is already encoded; do not “clean” it.
How to copy the link (then paste into Snapkit)
PayPal.Me. Sign in at PayPal.Me or open Account settings → PayPal.Me profile → copy the https://paypal.me/… link. Add /25 or /25USD only if you want that suggestion on every scan. Open the URL in a private window. Confirm the display name and the currency before you leave the desk.
Stripe Payment Link. Dashboard → Payment links → the link → Copy. Confirm it is a live buy.stripe.com (or donate / book / custom-domain) URL, not buy.stripe.com/test_…. Open it logged out. Confirm the product title, amount, and currency.
Other processors. Share / Copy from that dashboard. If the clipboard dropped https://, type it back.
Then, on snapkit.store:
- Choose URL. Not Text. Not Email. Not Phone.
- Paste into Website URL. Keep
https://. - Leave Make this QR Code Dynamic (Editable) unchecked unless you have a reason to retarget (next section).
- Download PNG. Do not screenshot the 256 px preview.
The generator does not rewrite payment URLs and does not talk to PayPal or Stripe.
URL tab vs Text vs a Bitcoin URI
Four things look like “put the payment in the code.” Only one is the Snapkit path for fiat checkout.
| Job | Snapkit tab | Encoded payload | Opens | Dynamic toggle? |
|---|---|---|---|---|
| Fiat pay / donate / invoice page | URL | https://paypal.me/…, https://buy.stripe.com/…, or another hosted checkout HTTPS URL | Browser or payment app checkout | Yes — URL only |
| Show the link as words | Text | Exact characters | On-screen text | No |
| Crypto wallet receive | URL or Text with a wallet URI / address | bitcoin:… or a raw address | Wallet app (if it claims the scheme) | URL only, and the hop is still Snapkit → URI |
| Email the bookkeeper | mailto: | Mail draft | No |
Putting https://paypal.me/… in Text does not create a Payment tab Snapkit does not have. Some cameras notice a URL inside the paragraph and offer a chip. Treat that as a bonus. URL vs Text is the tab choice; this page is the destination string.
Putting a wallet address in Text is the Bitcoin job. A customer who expected Apple Pay / card checkout will not open a crypto wallet from that PNG.
Dynamic is not a fourth payment format. It is a short-link wrapper around the same HTTPS destination. The homepage checkbox exists only on URL. Static generation stays in the browser. Dynamic encodes https://snapkit.store/r/…, then a 302. Details: static vs dynamic and how Snapkit generates codes.
Static vs Dynamic when prices change
| Static PNG | Dynamic /r/ | |
|---|---|---|
| What the modules hold | The payment HTTPS URL itself | Snapkit short link |
Stable donate handle (paypal.me/ExampleCafe) | Short; pattern stays loose | Also short |
| Long Stripe URL + UTM / prefills | Pattern densifies; print larger | Short /r/ stays loose |
| Change the price or campaign after print | Reprint, or change the processor link if that product allows it | Retarget the Snapkit destination |
| Works if Snapkit is unreachable | Yes | No — scan never leaves /r/ |
| Free trial expired | n/a | Lands on /expired |
| First URL the camera opens | paypal.me, buy.stripe.com, or your checkout host | snapkit.store |
| App handoff into PayPal / Stripe | More reliable when the first host is already theirs | Extra hop; more browsers in the middle |
| Scan counts | No (this product does not invent pixel analytics on static files) | Yes, on a paid dynamic plan |
| Payment confirmation / fees | Processor only | Still processor only |
Static is the default for a tip jar, a printed donate poster, or a Payment Link whose amount will not move. The PNG is the checkout URL. If Snapkit is down, the sticker still works.
Dynamic is the honest choice when you rotate seasonal prices, swap a sold-out SKU, or replace an invoice URL without reprinting the table tent — and you have tested the /r/ hop on both phone brands. The print then depends on Snapkit being reachable and the dashboard still pointing at a live checkout URL.
Do not share one Dynamic short link across “pay the invoice” and “see the menu.” Retargeting the dashboard to a lunch special is how a counter sticker stops taking money.
A Stripe Payment Link you edit in Stripe (price, product, active flag) can change what the same buy.stripe.com/… URL shows. That is processor-side, not Snapkit Dynamic. Static Snapkit + an edited-in-place Payment Link is enough when only the Stripe page changes and the public URL stays the same. Use Snapkit Dynamic when the string must change (new host, new slug, different processor).
After the scan: iPhone vs Android
The PNG holds a URL. The OS decides what happens next. Camera apps are not identical. PayPal documents that senders do not need the PayPal app — the HTTPS page works in a browser. Stripe Payment Links are hosted Checkout in a browser; the Stripe app may claim buy.stripe.com when installed.
| Situation | Typical result | Do not assume |
|---|---|---|
https://paypal.me/…, iPhone Camera, PayPal installed | Preview of the link, then the PayPal app or Safari | That Camera will skip Safari every time |
| PayPal.Me, iPhone, no PayPal app | Safari loads PayPal.Me; sender can still pay | That checkout is impossible without the app |
| PayPal.Me, Android Camera / Lens | Preview, then Chrome or the PayPal app | Every OEM uses the same chrome |
https://buy.stripe.com/…, iPhone | Safari (or Stripe app) hosted Checkout | Apple Pay fires with no Checkout page |
| Stripe Payment Link, Android | Chrome / OEM browser Checkout | Google Pay skips the Stripe page |
| Custom Stripe domain | Browser on your host; app handoff may not fire | The same Universal Link as buy.stripe.com |
| Dynamic URL, destination is checkout | Browser to Snapkit, 302, then the same as above | Handoff as clean as a first-party PayPal/Stripe URL |
| Airplane / dead data | Camera may lock; checkout still needs a network | Offline pay the way a Text QR would |
paypal:// or stripe:// in the QR | Many cameras show nothing useful | A Magical app-only fallback |
Universal Links / App Links fire on an https://paypal.me/… or https://buy.stripe.com/… navigation when that app is installed. They do not fire on a custom scheme most cameras will not open. They do not fire on a raw card number in Text.
Test the downloaded PNG on one iPhone and one Android. Confirm the merchant name, amount, and currency. Confirm Pay is still yours to tap. Then complete a real small payment (or Stripe test mode on a test PNG you will not print) and check the processor dashboard. A preview that “looks right” is not a settlement.
Print and placement (counter, poster, invoice)
Do not reprint the size or print math here. A paypal.me/Handle URL is a short HTTPS payload, so the pattern stays loose if you download the ~1024 px PNG instead of screenshotting the 256 px preview (test the file).
| Placement | What matters for checkout | Skip |
|---|---|---|
| Counter tip jar / donate box | Arm’s-length scan; label “PayPal” or “Card checkout”; amount in ink if the URL has no suffix | Tiny icon-sized marks next to the terminal |
| Table tent / check presenter | Quiet zone on busy art; one processor per code | One Dynamic /r/ reused for Wi‑Fi and pay |
| Flyer / poster | Size for the real reading distance; print the human-readable amount and currency | Light yellow modules “to look like PayPal” |
| Invoice / statement PDF | Static link to this invoice or Payment Link; test expire dates | A Checkout Session URL that dies in 24 hours |
| Window sticker | Contrast through glass; matte if laminate glare kills lock | Encoding a paragraph of UTM on a custom-domain Stripe URL |
Print the human-readable amount and “Pay with PayPal / card” beside the mark. If the camera never locks, that is size, contrast, or crop — start at QR code won’t scan, not at the PayPal handle.
Customization (colors, logo, styles) may be entitlement-gated on the homepage. Do not invent extra payment badges in the generator. Contrast still beats branding; light modules on a bright till receipt fail for the same reasons as in the color guide.
Mistakes that never take payment
| What you did | What the scan does | Fix |
|---|---|---|
| Personal PayPal.Me on a shop sticker (or the wrong Stripe account) | Money lands in the other account | Copy the link from the business dashboard; open it logged out |
…/25 when the account default currency is not what the sign says | Suggested amount in the wrong currency | Add the ISO suffix PayPal documents (25USD) or drop the amount and write it in ink |
Payment URL without https:// | Locks, then text or a one-brand open | Type the full scheme in the URL tab |
Truncated buy.stripe.com/… token | 404 / “link isn’t active” | Copy again; open it once before paste |
Printed buy.stripe.com/test_… | Test Checkout; no live charge | Copy the live Payment Link |
Stripe Checkout Session URL (checkout.stripe.com/c/pay/…) | Works once, then expires | Payment Link, not a Session |
| Deactivated / expired Payment Link or hidden PayPal.Me | Scan works; page refuses the pay | Reactivate or copy a new live URL; reprint static, or retarget Dynamic |
https://paypal.me/… pasted into Text | Words; maybe a chip | URL tab |
paypal:// or stripe:// | Many cameras show nothing useful | https:// checkout URLs |
bitcoin:… labeled “scan to pay” | Wallet app, or text | Bitcoin guide vs this page |
| Long URL + UTM past ~1,000 / 1,200 chars | Amber warning, then download blocked | Short Dashboard link, or Dynamic /r/ |
| Printed before a real $1 / test charge | Preview looked fine; amount or account was wrong | Pay it yourself; check the processor |
| Dynamic URL, destination is checkout | PNG encodes /r/…, then a 302 | Works only while the redirect is live and still points at checkout |
| Dynamic, free trial expired | Scan hits /expired | Paid plan, or a static payment PNG |
| Dynamic, you later retarget to a menu | Counter sticker opens lunch | Do not share that short link across jobs |
| Screenshot of the 256 px preview | Soft modules after print | Download PNG (~1024 px) |
Dynamic on a payment destination is the subtle one. The print encodes https://snapkit.store/r/…, not paypal.me. The phone must reach Snapkit, get a 302, then land on checkout. That extra hop is why you can retarget a sold-out SKU without reprinting. It is also why an expired trial, a typo in the dashboard, or Snapkit being unreachable means no pay. iOS/Android app-handoff is more reliable when the first URL the camera opens is already PayPal or Stripe. For a sticker you will not reprint, static https://paypal.me/… or the copied Payment Link is the correct default.
Build list (this product)
- Open snapkit.store. Choose URL. Not Text. Not Email. There is no Payment tab.
- In PayPal.Me, Stripe Payment links, or your other processor, Copy the
https://checkout URL. Confirm live vs test. Confirm the account, amount, and currency in a private window. - Paste the finished URL into Website URL. Include
https://. - Leave Dynamic unchecked unless you must rotate destinations after print, and you have tested the
/r/hop on both phone brands. - Download PNG. Do not screenshot the 256 px box.
- Scan the file on an iPhone and an Android. Confirm the merchant name. Complete a small real payment (or a Stripe test charge on a test PNG you will not print). Check the processor dashboard.
- Print the mark with a quiet zone and the amount / “Pay with …” label beside it. A dead camera lock is size, contrast, or crop — start at QR code won’t scan, not at the handle.
The generator’s job is the PNG. PayPal’s or Stripe’s job (or your other hosted checkout) is the charge. The URL tab is the only Snapkit control that connects the two.
Ready to create your QR code?
Try Snapkit's free QR code generator - no signup required.
Generate QR Code