W3C

Web Payments Working Group

29 April 2021

Attendees

Present
Adrian Hope-Bailie (Coil), Anne Pouillard (Worldline), Arno van der Merwe (Entersekt), Bastien Latge (EMVCo), Clinton Allen (American Express), David Benoit, Erhard Brand (Entersekt), Fawad Nisar (Discover), Gavin Shenker (Visa), Gerhard Oosthuizen (Entersekt), Ian Jacobs (W3C), Jean-Luc Di Manno (FIME), Jean-Michel Girard (Worldline), John Fontana (Yubico), Mathieu Hofman, Nick Telford-Reed, Stephen McGruer (Google), Tom Bellenger (Visa), Vincent Kuntz (ISO 20022 RA)
Chair
Nick
Scribe
Ian, nicktr

Meeting minutes

Proposed changes to reduce scope of Payment Request API v1

<Ian> Pull request 955

ian: we have a pull request that would substantially change payment request v1.0
… we had several things to wrap up before advancing on the Rec-track:
… 1) privacy issue raised about oversharing address info
… 2) issues from i18n
… we are actively working through the latter
… and on the former, we are proposing removing the "check out" features of payment request
… we don't think this affects the Webkit implementation
… and on the chrome implementation, we believe that the checkout features are not much used
… This pull request (955) would push browser-stored address data communication into the payment method specific implementations
… which would only leave a handful of strings left in payment request which would require things like "lang" and "dir"
… We think it's a good idea as it makes the payment request specification much slimmer
...In practise, if there is consensus, we would merge the pull request, clear up the test suite (because we would be removing features), go back through Candidate Recommendation for the slimmer spec, then after a small pause, go through proposed recommendation
… with the hope that we would be done by the summer and then we can focus on SPC

Gerhard: Generally favour in removing of address from the payment request spec
… removing PII is a good idea
… I wanted to ask if this affected "Basic Card"?

ian: one of the features we wanted to maintain in PR API is the ability to make dynamic total updates; the API retains that ability through an instrument selection update event. We also think that "incremental data retrieval" that was part of the original issue from Sam Weiler is supported by the retry() capability combined with a payment app redispatching the instrument update event. However, a payment method would have to support this behavior, and Basic Card does not currently do so. Therefore we are also proposing to "Deprecate" Basic Card as a specification. In addition, Chrome has announced they are deprecating their built-in support for Basic Card.

Gerhard: so we're saying Basic Card would be removed? No default implementation?

ian: yes, that is correct. There wouldn't be a W3C recommendation for basic card

smcgruer_[EST]: We see almost no usage of basic card and it's our intention to deprecate

<Ian> nicktr: I think that a slimmer API will be a better API.

<Ian> ...will help with implementations (and maintenance)

<Ian> ...smaller attack surface

ian: we need to merge the pull request and finish the i18n changes
… we are also looking at removing modifiers
… because that would further simplify the API. But we need to hear more about the extent of their usage.

smcgruer_[EST]: we aren't sure how well used the modifiers are
… and we're asking the people we know to have implemented

Action: Stephen to report back with some info on modifier usage (heuristics ok!)

ian: modifiers would be a separate edit if we proceeded

<Ian> PROPOSED: Merge pull request 955

<nicktr> +1

<smcgruer_[EST]> +1

<Gerhard> +1

<AdrianHB> +100!

<Ian> [No objections heard]

<Ian> SO RESOLVED

Action: Ian to work with editors to merge PR 955 and resolve remaining open I18N issue

<nicktr> AdrianHB: I assume we will wait for a pull request on modifiers?

<AdrianHB> Ian: also data from browsers on usage

Action: Ian to work with Editors on a pull request to remove modifier; pursuant to Stephen's action to get data about modifier usage

hasEnrolledInstrument proposal

[Presentation by Mathieu Hofman]

Mathieu: I'd like to introduce an idea for changing enumeration of payment methods in a more privacy-preserving way. Please note I am now an Invited Expert, but worked on this idea while at Stripe.
… the idea is motivated by the experience people have had implementing PR API
… in PR API, the browser is the interop layer between merchant and user (+ instrument)
… goals for this API include low friction and also strong privacy
… the API should not leak information about who the user is, what sites they visit, etc.
… there are a few invariants and assumptions:

1) origin security policy

2) risk assessment based on data collection

3) Browsers limiting 3rd party access to cookies to prevent tracking

There are a couple of privacy considerations:

- merchant or 3p should not learn about the customer unless the customer is performing a payment action

- payment handler should not learn about which merchants the customer visit, unless the customer performs a payment action with an instrument managed by the handlers

Threats are fingerprinting and 3p tracking

[Assumptions for customer]

* may have different types of payment instruments saved with merchant or in payment app or not saved anywhere

* customer may not want to save instruments in the browser (e.g., guest checkout at friend's house)

[Assumptions for merchant]

* merchant wants to support some of the customer's instruments

* Wants to increase conversion...by offering options user likes, reducing friction, and keeping user in the experience controlled (and potentially optimized) by the merchant
… so merchant wants to show supported payment methods without requiring a user action.
… in practice this means showing buttons for payment methods the user has that are ready to pay
… merchants may want to avoid onboarding during a transaction

[Handler implementation constraints]
… need to decide which if any instruments are available to when requested
… you likely have your own proprietary logic that needs to be run at transaction time and would not be offloaded to the browser

[Example of merchant integration]

- show a list of branded card wallet buttons

- only display a button for which user has a card ready to pay

- merchant's processor integrates with 2-3 payment methods.

[Current situation]

hasEnrolledInstrument() has a quota to prevent fingerprinting
… as a result, this requires merchants to choose between unbranded buttons or allowing instrument onboarding in all wallets
… with multiple methods behind a single click, the browser has to implement a selector ('the sheet')

[PROPOSAL PART I]

- introduce enumeratePayments
… similar input data, but returns a list of opaque identifiers representing "AVAILABLE" payment methods
… the merchant learns HOW MANY payment methods satisfy the constraints expressed by their input.
… the browser generates unique ids. The payment handler helps inform that information by answering "yes" or "no"

[PROPOSAL PART II]
… Display. The merchant needs to display usable UI
… the merchant can display "wallet buttons" the reference the opaque identifiers returned by the browser.
… and there's some generic information to inform the presentation of the button
… through this flow, the merchant does not know which payment handler the user has selected.
… once the handler has been selected, the user has expressed consent and information can begin to be shared.

WebComponent provides DOM encapsulation
… some additional requirements:

a) No intrinsic size (from a CSS perspective) to shield information
… the browser needs to render these buttons on behalf of the merchant.
… reviewing how this proposal addresses privacy concerns:

a) drive by website has limited info about user
… only how many compatible wallets are available
… BUT a malicious payment handler could extract information about a website.

[PROPOSAL PART III]
… replace service worker implementation of payment handler with a Worklet (CanIUse info on Worklets)
… grant PH only read-only access to storage
… no network access or other communication channels
… can only answer browser's invocation
… after customer makes selection, payment handler has access to normal APIs

… supported in edge, firefox, chrome, opera, android, opera mobile, etc
… but not fully supported in webkit

[Open Questions]

* how does modal window communicate with browser? Keep SW for this only?

* How do we standardized payment method presentation details? (Manifest? Worklet APIs?)

* Are payment details needed at enumeration time?
… (don't know)

* Merchant verification. There are handlers that don't want their buttons to be visible if the merchant is not allowed to. So how do you say "this origin is not allowed to use this wallet" without leaking information about the user?

[Payment Instrument Enumeration]
… I just talked about payment methods, but could we expand this concept to INSTRUMENT enumeration?
… e.g., to allow the display of card on file?
… but raises questions about de-duplication

<Zakim> nicktr, you wanted to ask about merchants displaying unsupported payment methods

nicktr: One use case you raised is "merchant only wants to display pay buttons for things that are supported"
… with this proposal, the browser displays in its own interface..but I don't think this solves for the merchant showing buttons not supported by PR API.

mathieu: Let's say there are two wallets integrated with PR API, and another not integrated.
… the enumeration would return 2 opaque APIs and the page would include 2 enumeration buttons. And before or after that, they would display the non-PR API button

nicktr: How does the merchant de-dup them?

mathieu: I would suppose the merchant would only enumerate wallets they want to support through PR API.

nicktr: Edge case is "supported through PR API but the user doesn't have support for them in browser"

AdrianHB: The payment method could have an option "we support enrollment flows"
… then it's up to the merchant to decide whether to accept the user enrolling during the transaction

nicktr: Would wallets always want to be shown?

AdrianHB: I hear from some wallet providers that in practice they would not always want to be shown for enrollment; don't want risk of bad UX

mathieu: handlers can also lie today about whether they have enrolled instruments

AdrianHB: There is some precedence here about how hardware is made discoverable ... e.g., webrtc needs to know what hardware you have.
… they get an opaque enumeration not a concrete list of devices.

mathieu: This proposal is based on the WebRTC work

<Zakim> smcgruer_[EST], you wanted to ask a naive question about specificity of method types

smcgruer_[EST]: How many buttons would a merchant typically want to show? and how specific are the method types?
… are we really hiding information?

mathieu: In the future when there are more wallets than just two, it becomes more important

smcgruer_[EST]: I think this is a good direction for this proposal

<nicktr> ian: can you say more about the display of the buttons? They are presumably not in the DOM and the merchant is not learning about them?

mathieu: It's similar to how some wallets tell you to display their buttons
… WebComponents shields the details...the merchant cannot probe the details, but can still learn about the display (e.g., size, color) and so some work has to be done to shield displayed information
… iframe could be a mechanism to shield information.

IJ: Do WebComponents do the right thing already today?

mathieu: Shadow DOM does the shielding work
… this was used by video player to render controls
… shadow root is what you're talking about

Ian: Next steps?

Mathieu: I won't have many more chances to champion this. I've presented this to a few people; Google has been evaluating the proposal.
… I have a document with some additional details.

Action: Mathieu to share document on this proposal publicly or let us know that's not possible

Next meeting

13 May

Summary of action items

  1. Stephen to report back with some info on modifier usage (heuristics ok!)
  2. Ian to work with editors to merge PR 955 and resolve remaining open I18N issue
  3. Ian to work with Editors on a pull request to remove modifier; pursuant to Stephen's action
  4. Mathieu to share document on this proposal publicly or let us know that's not possible
Minutes manually created (not a transcript), formatted by scribe.perl version 131 (Sat Apr 24 15:23:43 2021 UTC).