支付处理概念

Payment Request API 使得在网站或应用中处理支付变得更加容易。在本文中,我们将探讨该 API 的工作原理及其各个组件的功能。

术语

在深入了解 API 的工作细节之前,有些事项需要您知晓。

收款方(或商户)

希望通过 Payment Request API 接收资金的网站或应用的所有者,可以是个人或组织。

付款方

使用网站或应用进行购买的个人或组织。付款方会根据支付方式的要求进行身份验证,然后授权支付。

支付方式

提交支付的工具,例如信用卡或在线支付服务。

支付方式提供商

提供使用特定支付方式提交支付所需技术的组织。例如,使用信用卡支付时,信用卡处理服务就是支付方式提供商。

支付处理程序

为了处理支付,需要与特定支付方式提供商进行交互的代码实现。

一些支付处理程序使用 商户验证,这是一个通过某种方式验证商户身份的过程,通常使用某种形式的加密响应,例如公钥。经过验证的商户才能与支付处理程序交互。

支付方式标识符

支付处理程序通过 支付方式标识符 进行标识,这些标识符是唯一标识支付处理程序的字符串。它们可以是标准化的支付处理程序标识符之一,也可以是由支付处理服务用来标识自身和处理支付的 URL。

标准化的支付方式标识符

标准化的支付方式标识符是指列在 支付方式注册表 中的那些。

secure-payment-confirmation

标识 Secure Payment Confirmation 方法。此方法的支付请求数据由 SecurePaymentConfirmationRequest 字典定义。有关更多信息,请参阅 使用 Secure Payment Confirmation

basic-card

此支付方式标识符旨在通过 Payment Request API 促进 Web 上的卡支付。Web Payments Working Group 已弃用此支付方式。

基于 URL 的支付方式标识符

这些可能因服务的具体情况而有很大差异,并且给定的处理服务可能会使用多个 URL,具体取决于其 API 版本、通信技术等。

https://apple.com/apple-pay

使用 Apple Pay 服务处理支付。目前,Apple Pay 仅得到 Safari 的支持。

https://google.com/pay

支付通过 Google Pay 处理。目前仅得到 Chrome 和基于 Chromium 的浏览器支持。

支付处理程序的职能

用户代理 可能提供对特定类型支付的内置支持。此外,在支持的浏览器中,可以使用 Payment Handler API 来建立对其他支付方式提供商的支持。无论哪种情况,支付处理程序都负责:

  1. 确保支付能够进行。 促成支付的条件因支付方式和用户的支付请求而异;例如,如果用户选择使用收款方不接受的信用卡支付,则无法进行支付。
  2. 如果支付处理程序支持商户验证,则响应用户代理发出的商户验证请求。 有关详细信息,请参阅 商户验证
  3. 验证用户提供的信息是否能产生有效交易。 这将导致创建并返回一个特定于支付方式的对象,其中包含处理交易所需的信息。

商户验证

一些支付处理程序使用 *商户验证*,这是一个通过某种方式验证商户身份的过程,通常使用某种形式的加密挑战。如果商户未能成功验证,则不允许使用该支付处理程序。

具体的验证技术取决于支付处理程序,而商户验证是完全可选的。最终,网站或应用仅负责获取商户的验证密钥并将其传递到事件的 complete() 方法中。

js
paymentRequest.onmerchantvalidation = (event) => {
  event.complete(fetchValidationData(event.validationURL));
};

在此示例中,fetchValidationData() 是一个函数,它从 validationURL 提供的地址加载特定于支付处理程序的标识信息。请注意,此函数必须通过商户服务器进行,因为客户端通常不会自行访问验证 URL。

通过将此数据(或解析为加载数据的 Promise)传递到 complete() 中,支付处理程序可以利用检索到的数据以及任何其他支持的算法和其他数据,来验证商户是否可以使用该支付处理程序。

因此,需要注意的是,除非用户代理本身实现了支付处理程序,否则 用户代理 永远不会发送 merchantvalidation 事件。例如,Safari 内置了对 Apple Pay 的支持,因此 Apple Pay 支付处理程序使用它来确保 Apple Pay 可用于向商户付款,通过向客户端发送 merchantvalidation 来指示客户端获取服务器的验证数据,并通过调用 complete() 将其传递给支付处理程序。

规范

规范
Payment Request API
支付方式标识符

另见