This specification defines a way to leverage 3DS2 in conjunction with [[payment-request]].
The working group maintains a list of all bug reports that the group has not yet addressed. Pull requests with proposed specification text for outstanding issues are strongly encouraged.
EMV 3-D Secure is a messaging protocol developed by EMVCo to enable users to authenticate themselves with their card issuer when making card-not-present (CNP) e-commerce purchases. It is designed to prevent unauthorized CNP transactions and to protect the payment ecosystem from CNP-related fraud.
There are several reasons a merchant may wish to support 3DS 2.x (3DS2), including (but not limited to):
This specification defines a way to leverage 3DS2 in conjunction with [[payment-request]]. At a high level, it works as follows:
See how to use this specification within a payment method specification below.
The following example illustrates how the Tokenized Card Payment Specification [[tokenized-card]] could be enhanced to include support for the current specification.
const methodData = [{ supportedMethods: ["tokenized-card"], data: { supportedNetworks: ['mastercard', 'visa', 'amex', 'discover', 'jcb', 'unionpay'], supportedTypes: ['credit','debit'], keyProviderURL: 'https://pspKeyProvider.example/tokenizedCardPublicKey', payeeChallengeInd: mandated // Not yet shown: payeeData or whatever form it takes } }]; const details = { ...total, etc.... }; new PaymentRequest(methodData, details);
The value required
for payeeChallengeInd means that
the payee requires that for this payment method, a payment
handler must support 3DS2.
{ displayLast4: "***6789", displayExpiryMonth: "02", displayExpiryYear: "22", displayNetwork: "mastercard", encryptedDetails: "QWxobHZ4bU4yWkt1QUFFU05GWjRHb0FCRkE9PQ==", eci: "242", // for 3DS2 av: "...28 character authentication value ...", // for 3DS2 transStatus: "Y" // for 3DS2 }
This section describes payment method specific data that is supplied as
part of the data
argument to the PaymentRequest
constructor.
dictionary ThreeDSRequest{ ThreeDSChallengeInd payeeChallengeInd; };
The ThreeDSRequest
dictionary contains the following
members:
01
for the
threeDSRequestorChallengeInd in the 3DS2 specification.
Need to specify required merchant/payee data and the form this should take (in terms of a dictionary).
In the 3DS2 specification, the threeDSRequestorChallengeInd
field enables the 3DS Requestor to express a preference
regarding the challenge flow for a transaction. In the Web
payments ecosystem, different parties may play the role of 3DS
Requestor, including the payee and the payment handler. In
this, specification the ThreeDSChallengeInd
refers
specifically to the preference of the payee, whether or not the payee
is the 3DS Requestor. The values are defined to align with
those of the 3DS2 specification, but refer specifically to payee
preferences. Payment handler behavior will potentially depend on a
number of factors: the payee preferences defined below, but also user
preferences and other considerations as well.
enum ThreeDSChallengeInd { "requested", "mandated", "none" };
03
for the threeDSRequestorChallengeInd in the
3DS2 specification.
04
for the
threeDSRequestorChallengeInd in the 3DS2 specification.
02
for the
threeDSRequestorChallengeInd in the 3DS2 specification.
From issue 8: Payment handlers will need shipping address, contact information, order number, merchant id, acquirer id, merchant name.
From issue 8: The payee may wish to adjust payeeChallengeInd depending on the shipping address. Thus, for example, when onshippingaddresschange fires, the payee may wish to use updateWith() to update the payeeChallengeInd.
dictionary ThreeDSResponse { DOMString av; DOMString eci; DOMString transStatus; DOMString transStatusReason; required DOMString dsTransID; };
The Working Group is discussing privacy implications related to payment handler data gathering.
This specification relies on several other underlying specifications.