PAYATHON 2026

如何以编程方式添加浏览器支付方式?

支付老李

结论

普通网页无法通过 JavaScript 或 Payment Request API,将银行卡等支付信息添加到 Chrome 的 Autofill > Payment methods 中。

这类信息属于浏览器管理的敏感用户数据。用户必须通过浏览器界面或由浏览器控制的支付流程创建、保存和修改支付方式,网页不能绕过授权直接写入。

Payment Request API 能做什么

Payment Request API 用于发起支付请求,并声明商户接受的支付方式。收到请求后,浏览器会显示支付界面,由用户选择已有的支付方式或填写相关信息。

它没有下面这样的接口:

// 不存在此类标准 API
browser.paymentMethods.add({
  cardNumber: "4111111111111111",
  expiryMonth: "12",
  expiryYear: "2030"
});

这一限制可以防止网站在用户不知情的情况下写入、篡改或收集银行卡信息,也能避免未经验证的数据进入浏览器配置。

正确的实现方式

商户页面应创建 PaymentRequest,支付界面则由浏览器展示:

const methodData = [
  {
    supportedMethods: "basic-card"
  }
];

const details = {
  total: {
    label: "订单总额",
    amount: {
      currency: "CNY",
      value: "99.00"
    }
  }
};

const request = new PaymentRequest(methodData, details);

async function startPayment() {
  try {
    const response = await request.show();

    // 将支付信息安全地提交给支付服务端或支付服务商处理
    const paymentSucceeded = await processPayment(response);

    await response.complete(
      paymentSucceeded ? "success" : "fail"
    );
  } catch (error) {
    console.error("支付未完成:", error);
  }
}

业务系统需要自行实现 processPayment()。在生产环境中,通常应由合规的支付服务商处理支付凭据,不要自行保存完整的银行卡数据。

basic-card 是否可用取决于具体浏览器,不能默认所有浏览器都支持。上线前应参考目标浏览器和支付服务商的文档,选择合适的 supportedMethods。

调用前还可以检查当前环境是否具备发起支付请求的基本条件:

if (!window.PaymentRequest) {
  console.log("当前浏览器不支持 Payment Request API");
} else {
  startPayment();
}

用户如何保存支付方式

如果浏览器支持保存银行卡,用户在浏览器控制的支付界面中填写卡片信息后,可能会看到保存提示。浏览器是否提供该选项、最终是否保存,会受到浏览器版本、用户设置、登录或同步状态及相关安全策略的影响。网站既不能强制开启保存功能,也不能代替用户确认。

正常流程如下:

  1. 网站通过 Payment Request API 发起支付。
  2. 用户在浏览器界面中选择或填写支付方式。
  3. 浏览器决定是否提供保存选项。
  4. 网站获取本次支付响应并完成交易处理。

Payment Handler API 不是写入银行卡的接口

如果希望让 Web 支付应用成为可选的支付处理程序,可以了解 Payment Handler API。支持该标准的浏览器可以用它注册 Web 支付应用,但这不等于向 Chrome 自动填充设置中添加银行卡。

Payment Handler API 的浏览器支持范围同样有限,使用前需要针对目标平台验证兼容性。

自动化测试场景

如果需求来自端到端测试,不要让测试代码修改真实用户的浏览器支付数据。可以采用以下方式:

  • 使用支付服务商提供的测试环境和测试卡号。
  • 为测试创建独立、临时的浏览器配置目录。
  • 模拟支付服务端返回结果。
  • 在应用层封装支付接口,并在自动化测试中替换为测试实现。
  • 只在受控测试环境中使用浏览器自动化能力,不操作个人浏览器配置。

即使浏览器内部配置文件或未公开的调试接口暂时可以修改,它们也不是稳定的 Web API,可能随版本发生变化,还存在数据损坏和安全风险,不适合成为正式功能的依赖。

网页可以请求用户付款,但不能替用户管理浏览器中保存的支付方式。

备注:内容仅供参考。