{"id":13,"date":"2026-08-19T16:20:03","date_gmt":"2026-08-19T16:20:03","guid":{"rendered":"https:\/\/blockset.wp.philiprehberger.com\/?page_id=13"},"modified":"2026-08-19T16:20:09","modified_gmt":"2026-08-19T16:20:09","slug":"test-card-helper","status":"publish","type":"page","link":"https:\/\/blockset.wp.philiprehberger.com\/?page_id=13","title":{"rendered":"Test card helper"},"content":{"rendered":"\n<main class=\"wp-block-group has-global-padding is-layout-constrained wp-container-core-group-is-layout-606407ee wp-block-group-is-layout-constrained\" style=\"padding-top:var(--wp--preset--spacing--70);padding-right:var(--wp--preset--spacing--50);padding-bottom:var(--wp--preset--spacing--80);padding-left:var(--wp--preset--spacing--50)\">\n\n<p class=\"has-text-color has-small-font-size wp-block-paragraph\" style=\"color:var(--wp--preset--color--accent-dark);font-family:var(--wp--preset--font-family--mono);font-weight:700;letter-spacing:0.12em;text-transform:uppercase\">SFP-BLOCKS\/TEST-CARD-HELPER<\/p>\n\n\n\n<h1 class=\"wp-block-heading\" style=\"font-family:var(--wp--preset--font-family--serif);font-weight:500;letter-spacing:-0.02em;margin-top:var(--wp--preset--spacing--30);margin-bottom:var(--wp--preset--spacing--30)\">Test card helper<\/h1>\n\n\n\n<p class=\"has-text-color has-large-font-size wp-block-paragraph\" style=\"color:var(--wp--preset--color--muted);line-height:1.55\">A small dev-helper block that exposes Stripe&rsquo;s sandbox test card numbers (success, decline, 3DS, etc.) on the shop&rsquo;s checkout page. Visible only when a query string flags it on, so it doesn&rsquo;t leak into production rendering.<\/p>\n\n\n<h2 class=\"wp-block-heading\" style=\"font-family:var(--wp--preset--font-family--serif);font-size:clamp(1.119rem, 1.119rem + ((1vw - 0.2rem) * 1.147), 1.75rem);font-weight:500;letter-spacing:-0.015em;margin-top:var(--wp--preset--spacing--70);margin-bottom:var(--wp--preset--spacing--40)\">Live<\/h2>\n\n<aside class=\"sfp-test-card-helper wp-block-sfp-blocks-test-card-helper\">\n\t<div class=\"sfp-test-card-helper__eyebrow\">DEMO STORE<\/div>\n\t<h3 class=\"sfp-test-card-helper__heading\">Test card numbers<\/h3>\n\t<p class=\"sfp-test-card-helper__intro\">\n\t\tPayments are in Stripe test mode. Use any of these card numbers with any future expiry, any CVC, any ZIP.\t<\/p>\n\n\t<ul class=\"sfp-test-card-helper__list\">\n\t\t\t\t\t<li class=\"sfp-test-card-helper__card sfp-test-card-helper__card--success\">\n\t\t\t\t<div class=\"sfp-test-card-helper__card-label\">Succeeds<\/div>\n\t\t\t\t<div class=\"sfp-test-card-helper__card-row\">\n\t\t\t\t\t<code class=\"sfp-test-card-helper__card-number\">4242 4242 4242 4242<\/code>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclass=\"sfp-test-card-helper__copy\"\n\t\t\t\t\t\tdata-clipboard=\"4242424242424242\"\n\t\t\t\t\t\taria-label=\"Copy 4242 4242 4242 4242\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<span class=\"sfp-test-card-helper__copy-label\">Copy<\/span>\n\t\t\t\t\t<\/button>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"sfp-test-card-helper__card-outcome\">Order completes<\/div>\n\t\t\t<\/li>\n\t\t\t\t\t<li class=\"sfp-test-card-helper__card sfp-test-card-helper__card--danger\">\n\t\t\t\t<div class=\"sfp-test-card-helper__card-label\">Declines<\/div>\n\t\t\t\t<div class=\"sfp-test-card-helper__card-row\">\n\t\t\t\t\t<code class=\"sfp-test-card-helper__card-number\">4000 0000 0000 0002<\/code>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclass=\"sfp-test-card-helper__copy\"\n\t\t\t\t\t\tdata-clipboard=\"4000000000000002\"\n\t\t\t\t\t\taria-label=\"Copy 4000 0000 0000 0002\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<span class=\"sfp-test-card-helper__copy-label\">Copy<\/span>\n\t\t\t\t\t<\/button>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"sfp-test-card-helper__card-outcome\">Card declined<\/div>\n\t\t\t<\/li>\n\t\t\t\t\t<li class=\"sfp-test-card-helper__card sfp-test-card-helper__card--info\">\n\t\t\t\t<div class=\"sfp-test-card-helper__card-label\">3DS required<\/div>\n\t\t\t\t<div class=\"sfp-test-card-helper__card-row\">\n\t\t\t\t\t<code class=\"sfp-test-card-helper__card-number\">4000 0025 0000 3155<\/code>\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tclass=\"sfp-test-card-helper__copy\"\n\t\t\t\t\t\tdata-clipboard=\"4000002500003155\"\n\t\t\t\t\t\taria-label=\"Copy 4000 0025 0000 3155\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<span class=\"sfp-test-card-helper__copy-label\">Copy<\/span>\n\t\t\t\t\t<\/button>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"sfp-test-card-helper__card-outcome\">Authentication prompt<\/div>\n\t\t\t<\/li>\n\t\t\t<\/ul>\n\n\t<p class=\"sfp-test-card-helper__footnote\">\n\t\tSee the <a href=\"https:\/\/docs.stripe.com\/testing#cards\" target=\"_blank\" rel=\"noopener\">full Stripe test card guide<\/a> for more scenarios.\t<\/p>\n<\/aside>\n\n\n<h2 class=\"wp-block-heading\" style=\"font-family:var(--wp--preset--font-family--serif);font-size:clamp(1.119rem, 1.119rem + ((1vw - 0.2rem) * 1.147), 1.75rem);font-weight:500;letter-spacing:-0.015em;margin-top:var(--wp--preset--spacing--70);margin-bottom:var(--wp--preset--spacing--40)\">Attributes<\/h2>\n\n\n<figure class=\"wp-block-table is-style-stripes blockset-attrs has-text-color\" style=\"font-size:0.875rem\"><table><thead><tr><th>Attribute<\/th><th>Type<\/th><th>Default<\/th><th>Description<\/th><\/tr><\/thead><tbody>\n<tr><td><code>cards<\/code><\/td><td>array<\/td><td><code>preset list<\/code><\/td><td>Card test cases shown when active. Each {label, number, behavior}<\/td><\/tr>\n<tr><td><code>visibilityParam<\/code><\/td><td>string<\/td><td><code>\"test-cards\"<\/code><\/td><td>Query-string flag to enable rendering<\/td><\/tr>\n<\/tbody><\/table><\/figure>\n\n\n<h2 class=\"wp-block-heading\" style=\"font-family:var(--wp--preset--font-family--serif);font-size:clamp(1.119rem, 1.119rem + ((1vw - 0.2rem) * 1.147), 1.75rem);font-weight:500;letter-spacing:-0.015em;margin-top:var(--wp--preset--spacing--70);margin-bottom:var(--wp--preset--spacing--40)\">Example markup<\/h2>\n\n<figure class=\"sfp-code-snippet sfp-code-snippet--html wp-block-sfp-blocks-code-snippet\">\n\t<header class=\"sfp-code-snippet__header\">\n\t\t<span class=\"sfp-code-snippet__lang\">html<\/span>\n\t\t\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tclass=\"sfp-code-snippet__copy\"\n\t\t\t\tdata-sfp-copy-target=\"sfp-code-1\"\n\t\t\t\taria-label=\"Copy code to clipboard\"\n\t\t\t>\n\t\t\t\t<span class=\"sfp-code-snippet__copy-label\">Copy<\/span>\n\t\t\t<\/button>\n\t\t\t<\/header>\n\t<pre class=\"sfp-code-snippet__pre\"><code id=\"sfp-code-1\" class=\"sfp-code-snippet__code language-html\">&lt;!-- wp:sfp-blocks\/test-card-helper \/--&gt;<\/code><\/pre>\n\t\t\t<figcaption class=\"sfp-code-snippet__caption\">Paste this in any block-editor view (or in a theme template) to drop the block in.<\/figcaption>\n\t<\/figure>\n\n\n<div class=\"wp-block-group has-white-background-color has-background has-border-color is-layout-flow wp-block-group-is-layout-flow\" style=\"border-color:var(--wp--preset--color--border);border-width:1px;border-radius:6px;margin-top:var(--wp--preset--spacing--60);padding-top:var(--wp--preset--spacing--50);padding-right:var(--wp--preset--spacing--50);padding-bottom:var(--wp--preset--spacing--50);padding-left:var(--wp--preset--spacing--50)\">\n\n<p class=\"has-text-color has-small-font-size wp-block-paragraph\" style=\"color:var(--wp--preset--color--accent-dark);font-family:var(--wp--preset--font-family--mono);font-weight:700;letter-spacing:0.1em;text-transform:uppercase\">SOURCE<\/p>\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/philiprehberger\/wp-portfolio-platform\/tree\/main\/plugins\/sfp-blocks\/src\/test-card-helper\">plugins\/sfp-blocks\/src\/test-card-helper\/ on GitHub \u2192<\/a><\/p>\n\n<\/div>\n\n<\/main>\n\n","protected":false},"excerpt":{"rendered":"<p>Inline Stripe sandbox test cards for the demo checkout flow.<\/p>\n","protected":false},"author":0,"featured_media":0,"parent":7,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-13","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/blockset.wp.philiprehberger.com\/index.php?rest_route=\/wp\/v2\/pages\/13","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blockset.wp.philiprehberger.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/blockset.wp.philiprehberger.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"replies":[{"embeddable":true,"href":"https:\/\/blockset.wp.philiprehberger.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=13"}],"version-history":[{"count":1,"href":"https:\/\/blockset.wp.philiprehberger.com\/index.php?rest_route=\/wp\/v2\/pages\/13\/revisions"}],"predecessor-version":[{"id":20,"href":"https:\/\/blockset.wp.philiprehberger.com\/index.php?rest_route=\/wp\/v2\/pages\/13\/revisions\/20"}],"up":[{"embeddable":true,"href":"https:\/\/blockset.wp.philiprehberger.com\/index.php?rest_route=\/wp\/v2\/pages\/7"}],"wp:attachment":[{"href":"https:\/\/blockset.wp.philiprehberger.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=13"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}