Skip to content

Proposal: Extending Payment Confirmation experience to include line items #313

Description

@vthub

Currently, Secure Payment Confirmation (SPC) is designed to streamline authentication during a payment transaction and to produce cryptographic evidence that the user has confirmed transaction details. The specification ensures that critical payment information, such as the payeeName, payeeOrigin, and total amount, is presented to the user and subsequently included in the CollectedClientData dictionary, which cannot be tampered with via JavaScript. This provides a strong foundation for confirming user consent to a payment.

To enhance dispute protection, particularly against "friendly fraud," and to more explicitly confirm the buyer's intent to purchase specific items, I would like to explore the inclusion of detailed order information. This would provide payment networks with incontrovertible cryptographic evidence that the buyer confirmed the specific products or services displayed to them, going beyond just the total amount. This aligns with the goal of SPC to reduce authentication friction yet decrease fraud during checkout by making the confirmed transaction details more comprehensive and transparent.

Use Cases

This enhancement would be particularly beneficial for:

  • One-click checkouts. In scenarios where user interaction is minimal, presenting a clear, cryptographically linked summary of the items being purchased directly within the SPC UX would provide a strong record of buyer intent, reducing ambiguity and potential for disputes.
  • Agentic checkouts. When product selection is performed on behalf of the buyer, the ability for the user to confirm a detailed list of items via SPC directly addresses the need for transparency and explicit consent for the entire order.

Proposed Modifications

To integrate order information, modifications would be required across the

  1. SecurePaymentConfirmationRequest dictionary (for the request),
  2. AuthenticationExtensionsPaymentInputs and CollectedClientAdditionalPaymentData dictionaries (for cryptographic linking), and
  3. Transaction confirmation UX (for display).

Payment Confirmation Request changes

A new optional member, such as lineItems, should be added to the SecurePaymentConfirmationRequest dictionary. This member would be a sequence of dictionaries, each representing a single product or service being purchased.

Payment Inputs and Payment Data changes

For the lineItems to be cryptographically linked to the authentication assertion, they must be included in the AuthenticationExtensionsPaymentInputs dictionary. This ensures that the order details are passed as part of the payment-specific data.

Consequently, lineItems would also need to be a member of the CollectedClientAdditionalPaymentData dictionary. This crucial step ensures that the order information is signed along with other transaction details and returned to the Relying Party for verification, providing the necessary cryptographic evidence of user intent.

Display in Transaction Confirmation UX

The user interface presented to the user for transaction confirmation currently includes the payeeName, payeeOrigin, total, instrument details, and payment entities logos. The lineItems must be prominently displayed within this user interface, providing the user with a clear, receipt-like summary of the items they are consenting to purchase.

While the specification intentionally does not require a User Agent to display a particular user interface to preserve implementation choice, similar to the non-normative UX guidelines for payeeName and payeeOrigin, recommendations could be developed for lineItems.

These guidelines would focus on:

  • Clarity and readability. Ensuring each line item is presented clearly, with itemName and quantity easily discernible.
  • Consistency across platforms. Providing guidance for displaying line items effectively on different screen sizes, such as mobile and desktop, while maintaining a consistent user experience.
  • Truncation strategies. Offering best practices for truncating long itemName or description strings to fit available screen space, without losing critical information, akin to how payeeName and payeeOrigin are handled.

Verification by Relying Party

When a Relying Party receives the PublicKeyCredential returned from a successful SPC invocation, it already performs a series of verification steps. This process would be extended to include the lineItems too.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions