跳转到内容

支付

发布于

PWA 收款用的是与任何网页相同的三层:浏览器的 Payment Request API、接入它的钱包(Safari 中的 Apple Pay,Chromium 等浏览器中的 Google Pay),以及支付服务商的 JavaScript SDK,后者在不支持时回退到托管表单。哪一层可用取决于引擎及其版本,与页面是否已安装无关。

结账面板归浏览器所有。你的代码描述接受的支付方式与总额,引擎决定能展示哪些钱包;服务商 SDK 位于其上,在该面板与自己的表单之间做选择。

new PaymentRequest(methods, details) 后调用 show() 即打开浏览器面板。兼容性数据(BCD api.PaymentRequest)记录:桌面 Chrome 60、Android 版 Chrome 53、Edge 15、macOS 与 iOS 上的 Safari 11.1、跟随 Android 版 Chrome 的 Samsung Internet,以及 Android WebView 136。Firefox 55 含有实现,但默认关闭在 dom.payments.request.enabled 与 dom.payments.request.supportedRegions 国家列表之后,所以 Firefox 用户看不到面板。该 API 仅限安全上下文,跨源 <iframe> 只有带 allowpaymentrequest 属性才能使用。

  • 图例
  • 支持
  • 部分支持
  • 需开启标志
  • 不支持
  • 未知
浏览器 / 平台支持版本置信度来源备注
Chrome (Android)支持61中来源—
Chrome (Desktop)支持61中来源—
Edge (Desktop)支持79中来源—
Safari (iOS)支持11.1中来源1
Safari (macOS)支持11.1中来源2
Firefox (Desktop)不支持—中来源3
Samsung Internet支持7.0中来源—
  1. 以 Apple Pay 作为支付方式。
  2. 由 Apple Pay 支撑。
  3. 实现曾发布后又被禁用;默认不可用。

生态与商业政策

主体类型场景状态赞助备注
Apple Paypayment_sdkSafari / iOS支持否在 Safari 中通过 Payment Request 可用;需要完成商户域名验证。
Stripepayment_sdkCross-browser支持否Stripe 把 Payment Request 封装为 Payment Request Button / Payment Element。
Google Play billingstore_policyGoogle Play TWA不支持否依据 Play 政策,分发数字商品的 TWA 必须使用 Play Billing,而不是 Payment Request。

源数据: /compatibility/payment-request.json · 全球使用占比: 90 % (StatCounter 2026-05)

来源: 规范 · MDN · 最近核验 2026-06-24 · 置信度: 中 (由来源计算)

检测分两步,因为浏览器可能暴露构造函数却不支持你的任何一种方式:

async function startCheckout(methods, details) {
if (!('PaymentRequest' in window)) return openProviderForm();
const request = new PaymentRequest(methods, details);
if (!(await request.canMakePayment())) return openProviderForm();
try {
const response = await request.show();
await response.complete('success');
} catch (err) {
if (err.name === 'AbortError') return; // 用户关闭了面板
return openProviderForm();
}
}

在 Safari 中,Payment Request 背后唯一的方式是 Apple Pay;面板与 Apple Pay JS 打开的是同一个。Apple 的规划页面写明:任何地区的商户都能接受 Apple Pay,「as long as their payment service provider supports Apple Pay」;「in China mainland, Apple Pay on the web is supported in Safari on iOS only」;平台通过 Apple Pay Web Merchant Registration API 注册商户网站。在 SFSafariViewController 中展示的网页可以像在 Safari 中一样使用 Apple Pay;WKWebView 不行,Apple 要求这类应用把请求移到原生代码中。

Google 的设置指南列出 Google Pay API for web 可运行的浏览器:「Google Chrome, Mozilla Firefox, Apple Safari, Microsoft Edge, Opera, or UCWeb UC Browser」,并要求「an HTTPS webpage with a TLS domain-validated certificate」。该 API 为所选方式返回一个支付令牌,由你的后端转交给处理商。Google 把 Firefox 与 Safari 列入支持名单,尽管这两者的 Payment Request 并不呈现 Google Pay。

服务商 SDK 是普通 JavaScript,在 PWA 中与在标签页中一样加载。Stripe 曾用 Payment Request Button 封装 PaymentRequest 来展示 Apple Pay、Google Pay 或 Link,该组件在 Stripe 文档中已标记为弃用,由 Express Checkout Element 取代。已安装的 PWA 额外带来的问题是导航:基于重定向的 3-D Secure 或银行流程一旦离开 manifest 的 scope,就会在浏览器的超出 scope 界面下运行(Microsoft 记录了从 Store 安装的 Edge PWA 会显示 URL 与标题栏),因此发布独立窗口应用时,优先选择在弹窗或内嵌框架中完成验证的服务商。

层 可用范围 前提
Payment Request API Chrome 60 / Android 53、Edge 15、Safari 11.1、Samsung Internet、WebView 136 安全上下文;show() 需要瞬时用户激活
Apple Pay Safari(macOS、iOS);SFSafariViewController 商户注册;支持 Apple Pay 的 PSP
Google Pay Chrome、Firefox、Safari、Edge、Opera、UC 浏览器 带 TLS 域名验证证书的 HTTPS
服务商 SDK SDK 支持的任何引擎 服务商账户;为不支持的钱包准备回退表单

← 返回生态总览。