支付能力探测 Demo
落地页用户进入后,CTA 点击前能查到的全部 Apple Pay / 钱包 / Stripe 能力。 每张卡 = 一个业务问题 + 直接答案 + 为什么是这个答案。Q4 用 Stripe 推断有没有卡(merchant id 由 Stripe 托管,开发者拿不到)。
publishableKey: 加载中…
Q1. 浏览器是否暴露了 Apple Pay JS API?
探测中…
探测中…
技术细节 (API + 原始返回)
API: 'ApplePaySession' in window
Q2. 落地页能否渲染出 Apple Pay 按钮?
探测中…
探测中…
技术细节 (API + 原始返回)
API: stripe.paymentRequest({...}).canMakePayment()
Q3. 设备能不能调起 Apple Pay? (硬件 + Wallet App)
探测中…
探测中…
技术细节 (API + 原始返回)
API: ApplePaySession.canMakePayments() — 不看卡
Q4. Wallet 里是否至少有一张"可用"的卡? (通过 Stripe 推断)
探测中…
探测中…
技术细节 (API + 原始返回)
Q5. 当前域名注册在哪个 Apple merchant id 下?
探测中…
探测中…
技术细节 (API + 原始返回)
API: window.location.origin (Stripe 托管 merchant id)
Q6. 浏览器原生 PaymentRequest API 能不能拉起 basic-card?
探测中…
探测中…
技术细节 (API + 原始返回)
API: new PaymentRequest(...).canMakePayment()
对照实验:Apple 官方 Apple Pay demo
Q2 显示 false 不一定是我们的事。最快的排查办法 = 用同一台设备打开 Apple 官方 demo,那是 Apple 自己 host 的 Apple Pay 演示页,merchant id / 域名注册 / .well-known 全是 Apple 官方 保证可用的。两种结果:
● 官方 demo 也看不到按钮 / 也提示"卡需要验证" → 是这台手机自己的卡/区域/网络问题,不是我们 demo / 域名 / 后端注册的问题。去 设置 → 钱包与 Apple Pay 看卡状态。
● 官方 demo 正常但本页 Q2 还 false → 才是我们这边的问题(域名没注册 / .well-known 缺 / 账户不匹配等)。
↗ 打开 Apple 官方 demohttps://applepaydemo.apple.com
钱包按钮真渲染 (Stripe ExpressCheckoutElement)
Stripe.js 还在加载…
端到端完整链路演示 — 与 landing apple-pay-trial-button 完全一致
点"创建 SetupIntent" → 调后端 /checkout/probe-setup-intent 拿 clientSecret + 订阅元数据 → 钱包入口用 stripe.paymentRequest({applePay.recurringPaymentRequest}) 渲染 Apple Pay 按钮(payload 含 试用天数 / 周期 / 续费金额 / managementURL),与 landing 1:1 复现 → 授权 → confirmCardSetup → 拿 pmId → 调 /payment-method/{pmId} 回查 brand / last4 / exp / walletType。
⚠️ 与上方"钱包按钮真渲染探测"区别(避免混淆)
页面上方的 "钱包按钮真渲染探测" 区用 ExpressCheckoutElement(mode:'setup'),**没有**传 amount / recurringPaymentRequest / managementURL,Apple Pay 看到的是"裸卡保存" → 同一张卡可能被 Apple 内部安全策略拒,显示"尝试不同的付款卡"。
本区(下方)是 真实落地业务用的链路:用 stripe.paymentRequest 传完整订阅意图,Apple 知道"试用 + 周期 + 续费金额",卡支持订阅扣款的就能通过。
落地页 Apple Pay 能成功而上方探测区失败 = payload 完整度差异,不是卡的问题。本区与 landing 用同一份 payload,验证 demo 域名/账户 etc. 全 OK 时,卡必然能通过。