PIS options
To get the PIS options, you have to call the following endpoint of your docker:
/ob/Pis/payments/options/connector_id
In those options, you will find multiple informations.
See PIS API section > Get PIS options > HTTP 200 response for details.
Checking if payment product is available
You can check if the payment product (domestic, SEPA, instant SEPA, cross border) and type (single, periodic or bulk) you want to use is available by checking the following structure like domesticTransfers.singlePayments.supported.
SpecificPaymentDate let you know if you can provide a date or not
{
"domesticTransfers": {
"singlePayments": {
"supported": false,
"cancelSupported": false,
"specificPaymentDate": 0
},
"periodicPayments": {
"supported": false,
"cancelSupported": false,
"specificPaymentDate": 0
},
"bulkPayments": {
"supported": false,
"cancelSupported": false,
"specificPaymentDate": 0
},
paymentInitiationRequestOptions
Each payment product has a paymentInitiationRequestOptions which is the heart of your request. From this structure, you will know what data is optional or required, the supported schemes (IBAN or BBAN)...
Country and currency
Country must be supplied as two letters string from the ISO 3166-1 alpha-2 list like "FR", "NL", "PT"...
Currency must be spplied as three letters string from the ISO 4217 list like "EUR", "SEK", "USD"...
Fields constrains
To prevent values to be rejected by the bank, you can use the fields for constraints definition in options on debtor name, creditor name and remittance information fields for each payment product. E.g.:
options.{payment_product}.PaymentInitiationRequestOptions.Debtor.NameConstrains.MinLength = 1;
options.{payment_product}.PaymentInitiationRequestOptions.Debtor.NameConstrains.MaxLength = 40;
options.{payment_product}.PaymentInitiationRequestOptions.Debtor.NameConstrains.Regex = "^[a-zA-Z0-9-/:().,? '+]{1,40}$";
options.{payment product}.PaymentInitiationRequestOptions.Debtor.NameConstrains.AcceptedChars = "a-zA-Z0-9-/:().,? '+";
options.{payment_product}.PaymentInitiationRequestOptions.Recipient.NameConstrains.MinLength = 1;
options.{payment_product}.PaymentInitiationRequestOptions.Recipient.NameConstrains.MaxLength = 40;
options.{payment_product}.PaymentInitiationRequestOptions.Recipient.NameConstrains.Regex = "^([a-zA-Z0-9?:'\\/\\()+, \\-\\.áâäàåãÄÅÁÂÀÃÇçêëèéÊËÈÉïîìíÍÎÏÌôöòõóÓÖÔÒÕûùúüÚÛÙÜñÑýÝÿ]{1,40})$";
options.{payment_product}.PaymentInitiationRequestOptions.Recipient.NameConstrains.AcceptedChars = "a-zA-Z0-9?:'\\/\\()+, \\-\\.áâäàåãÄÅÁÂÀÃÇçêëèéÊËÈÉïîìíÍÎÏÌôöòõóÓÖÔÒÕûùúüÚÛÙÜñÑýÝÿ";
options.{payment_product}.PaymentInitiationRequestOptions.RemittanceInformationUnstructuredConstrains.MinLength = 1;
options.{payment_product}.PaymentInitiationRequestOptions.RemittanceInformationUnstructuredConstrains.MaxLength = 140;
options.{payment_product}.PaymentInitiationRequestOptions.RemittanceInformationUnstructuredConstrains.Regex = "^([a-zA-Z0-9?:'\\/\\()+, \\-\\.áâäàåãÄÅÁÂÀÃÇçêëèéÊËÈÉïîìíÍÎÏÌôöòõóÓÖÔÒÕûùúüÚÛÙÜñÑýÝÿ]{1,140})$";
options.{payment_product}.PaymentInitiationRequestOptions.RemittanceInformationUnstructuredConstrains.AcceptedChars = "a-zA-Z0-9?:'\\/\\()+, \\-\\.áâäàåãÄÅÁÂÀÃÇçêëèéÊËÈÉïîìíÍÎÏÌôöòõóÓÖÔÒÕûùúüÚÛÙÜñÑýÝÿ";
MinLength, MaxLength and AcceptedChars could be used to display the constraints to the end-user. Keep in mind that the space character, if present, may not be so much visible in the displayed string.
We don't have constrains for all the connectors and, for the one we have, we don't have necessarily all the constrains. So be prepared to null valued fields.
additionalPropertiesRequested
see specific page
accountsList
Let you know if you can get the list of payment accounts without obtaining a consent for later use for balances and transactions.
This can be useful to let the user select the account instead of manually typing the IBAN. The PSU will have to login to the bank to get the list and, if allowed by the bank, we reuse this login for the payment you may do just after to prevent the PSU to login again. He will only have to validate the payment.
decoupledUpdate
For the connector using DECOUPLED result status, we have added an AIS and PIS option that allows you to know if you can, during the the time the user is completing this decoupled action, call the finalize to have a decoupled status update.
If the decoupled is still ongoing, we return a result status RETRY (8). You should then wait some hundreds milliseconds and try again.
if the decoupled is finished, you'll receive another result status that have to be processed as describe in the documentation.
Sadly, not all bank are supporting this decoupled status update. In this non-supported case, the only possibility is that you prompt the user to confirm the completion of the decoupled action with something like a button or a link.
The option field is "decoupledUpdate" in the payment product options, e.g.
{
...
"DomesticTransfers": {
"SinglePayments": {
"Supported": false,
"CancelSupported": false,
"SpecificPaymentDate": 0,
"PsuInformation": null,
"decoupleUpdate": 0
},
The values are:
- Unused (0) - The result status Decouple is not used.
- Auto (1) - You can call finalize in background to know if the decoupled is finished. A resultStatus of RETRY means that it's still ongoing, other statuses to be processed as described in the documentation.
- Manual (2) - You cannot call finalize in background to know if the decoupled is finished. You should prompt the PSU to indicate when he has finished. Then you can call the finalize.
Updated 3 months ago