This specification is a Payment Method specification for use with the PaymentRequest API [PAYMENT-REQUEST-API]. With it, merchants and payers can exchange information required for credit transfers across a variety of payment systems.

The working group maintains a list of all bug reports that the group has not yet addressed.

Introduction

This specification is a Payment Method Specification used by the PaymentRequest API [[!PAYMENTREQUESTAPI]] to support payment by credit transfer.

Dependencies

This specification relies on several other underlying specifications.

Payment Request API
The term PaymentRequest constructor is defined by the PaymentRequest API specification [[!PAYMENTREQUESTAPI]].
Payment Method Identifiers
The term Payment Method Identifier is defined by the Payment Method Identifiers specification [[!METHODIDENTIFIERS]].
Web IDL
The IDL in this specification is defined by Web IDL [[!WEBIDL]].
CLDR
Country codes used in this specification are only used for filtering; country information is not part of the payment message. We thus align with the choice of Payment Request API, which is to use [[!CLDR]].

Payment Method Identifier

The payment method identifier string for the Basic Credit Transfer Payment method is credit-transfer.

Payment Method Specific Data for the PaymentRequest constructor

This section describes payment method specific data that is supplied as part of the data argument to the PaymentRequest constructor.

CreditTransferRequest

	  dictionary CreditTransferRequest {
	  sequence<DOMString> requiredResponseFields;
	  sequence<DOMString> supportedNetworks;
	  sequence<DOMString> supportedCountries;
	    
          required DOMString payeeIBAN;
	  DOMString payeeName;
	  DOMString payeeAddress;
	  required DOMString payeeBIC;
	  DOMString payeeIdentificationCode;

	  DOMString payeePaymentIdentificationHumanReadable;
          required DOMString payeePaymentIdentificationMachineReadable;

	  DOMString sellerName;
	  DOMString sellerIdentificationCode;
	    
	  required DOMString purposeCode;
	  DOMString categoryPurposeCode;
	    
	  DOMString preferredProcessingDate;
	  DOMString notificationURL;
	  };
	

The CreditTransferRequest dictionary contains the following fields:

requiredResponseFields
Contains the list of fields that the Payment App must attempt to return, if this requirements cannot be met, e.g., the payment instrument must fail as this is a push payment.
The above field is required, but this can result in failed payments after 'Authorise' clicked. Should we have a better modelling (e.g. using subclasses) to allow for a more fine-grained matching of apps to requests? Does the PMI specification need to support this?
supportedNetworks
The supportedNetworks field contains a sequence of identifiers for credit transfer networks that the merchant accepts. This field is optional. If a value is not provided then the merchant accepts credit transfers from any credit transfer network. Note: The Web Payments Working Group is still discussing whether and how to maintain a database of supported network identifiers.
supportedCountries
The supportedCountries field contains a sequence of [[!CLDR]] identifiers of countries from which the merchant accepts credit transfers. This field is optional. If a value is not provided then the merchant accepts credit transfers from any country.
payeeIBAN
This field indicates the account number of the payee (the merchant) that will be used for the credit transfer. This will typically be an IBAN number, or a domestic account number for those countries that do not use IBAN.
payeeBIC
The Bank code of the payee that should be used along the “payeeIBAN” in order to send the Credit Transfer.
payeeName
The name of the payee known to the bank that holds the account describe by “payeeIBAN”.
payeeAddress
The address of the payee known by the bank that holds the account describe by “payeeIBAN”.
payeeIdentificationCode
An identification code provided by the payee.
payeePaymentIdentificationHumanReadable
Human-readable remittance information explaining to the payer what is being paid for.
payeePaymentIdentificationMachineReadable
Remittance information used for automatic matching upon receipt of the credit transfer.
sellerName
The name of a person or company in relation to whom a Beneficiary receives a payment.
sellerIdentificationCode
A code related to “sellerName”.
purposeCode
The purpose of the credit transfer is the underlying reason for the credit transfer transaction, i.e. information on the nature of such transaction. Values are drawn from ISO20022 External Code Sets.
categoryPurposeCode
The category purpose of the credit transfer is information on the high level nature of transaction. Values are drawn from ISO20022 External Code Sets.
preferredProcessingDate
The merchant's preferred processing date. See also: SelectedProcessingDate in the CreditTransferResponse.
Date format?
notificationURL
An end point for payment status updates. This specification does not define how such endpoints will work.

How do we ensure that fields are not tampered with (e.g., malicious changes to the beneficiary)?. Similarly, it is important that the payeeName not be changed by the payer or the payment app in order to be sure that automatic controls at the payee’s bank will work.

Payment Method Response

The CreditTransferResponse dictionary contains the response from the PaymentRequest API when a user accepts payment with a Basic Credit Transfer payment method.

CreditTransferResponse

The CreditTransferResponse message means that a message has been submitted to the Payee's Bank, not that funds transfer has occurred. The merchant should wait for notification from its Bank that the payment has cleared.

 
	  dictionary CreditTransferResponse {
	  required	DOMString selectedProcessingDate;
	  required	DOMString payerPaymentIdentification;
	  required	DOMString payerBIC;
	  required	DOMString selectedNetwork;
	  DOMString  	payerIdentificationCode;
	  DOMString     payerName;
	  DOMString     buyerIdentificationCode;
	  DOMString     buyerName;
	  };
	

The CreditTransferResponse dictionary contains the following fields:

selectedProcessingDate
The date for commencing the execution of the payment request. This date may be different from that requested by the Payee, either because of a business rule (e.g., non business day, or a preference from the payee to defer payment
payerPaymentIdentification
A unique identifier for a given payer each Credit Transfer Transaction presented to the payer Bank. This number will be transmitted in the entire process of the handling of the credit transfer transactions from acceptance until the finality of the transaction. It must be returned in any exception handling process-step by any party involved. The payer cannot request for any other referencing information to be returned to him, in order to identify a credit transfer. The payer must define the internal structure of this reference; it can only be expected to be meaningful to the payer.
payerBIC
The BIC code of the bank which send the Credit Transfer
selectedNetwork
The network used by the originator to send the credit transfer
payerIdentificationCode
A code supplied by the payer.
payerName
The name of the payer.
buyerIdentificationCode
The buyer reference. The buyer may be a 3rd party to the payer, if the payer is paying on behalf of another party.
buyerName
The buyer name. The buyer may be a 3rd party to the payer. If the payer is paying on behalf of another party.
The above four fields return information about the payer and buyer, are there any privacy implications for these?

Appendix: Mappings

This table maps field names used in this specification to relevant fields in other schemes or standards.

CreditTransferRequest Fields

SEPA
supportedNetworksAT-40: Identification code of the Scheme
payeeIBANAT-20: The IBAN of the account of the Beneficiary.
payeeBICAT-23: the BIC code of the beneficiary. Note: Even if the BIC could be derived from the IBAN in most of SEPA country, it may be not the case in others, so this field is important. The merchant should know the BIC of his account. This field could be also used with another format of “bank identification code” for countries not using BIC.
payeeNameAT-21: The name of the Beneficiary
payeeAddressAT-22: The address of the Beneficiary
payeeIdentificationCodeAT-24: The Beneficiary identification code
payeePaymentIdentificationHumanReadableAT-05: The Remittance Information sent by the Originator to the Beneficiary in the Credit Transfer Instruction only if the payeePaymentIdentificationMachineReadable is not provided.
payeePaymentIdentificationMachineReadableAT-05: The Remittance Information sent by the Originator to the Beneficiary in the Credit Transfer Instruction.
sellerNameAT-28: The name of the Beneficiary Reference Party
sellerIdentificationCodeAT-29: The identification code of the Beneficiary Reference Party
purposeCodeAT-44: The purpose of the credit transfer
categoryPurposeCodeAT-45: The category purpose of the credit transfer
preferredProcessingDate...
notificationURL...

CreditTransferResponse Fields

SEPA
selectedProcessingDateAT-07: The Requested Execution Date of the instruction
payerPaymentIdentificationAT-41: The Originator’s reference of the Credit Transfer Transaction (End to End Identification in ISO20022 definition)
payerBICAT-06: The BIC of the Originator
selectedNetworkAT-40: Identification code of the Scheme
payerIdentificationCodeAT-10: The Originator identification code
payerNameAT-02: The Name of the Originator
buyerIdentificationCodeAT-09: The identification code of the Originator Reference Party
buyerNameAT-08: Name of the Originator Reference Party of the Originator Reference Party

Sources

Appendix: Design Considerations

The following are design considerations for this specification.

Appendix: Credit Transfer Flow Illustration

This diagram illustrates the credit transfer flow, using a SEPA credit transfer as an example.

Acknowledgments

Laurent Castillo (Gemalto), Kris Ketels (Swift), Vincent Kuntz (Swift), Frédéric Meignien (Canton Consulting).