Verification of Payee (VoP)
First things first: For submissions without payee verification, the procedures remain unchanged - with one exception: If submitted orders contain only a single payment, payee verification is mandatory. This is currently handled differently by different credit institutions and must be clarified directly with the bank. However, most banks still continue to execute single payments as usual for the time being.
Since this obligation is a pointless regulation, everyone should file a complaint with their bank if it requires a payee verification for uploads of single transactions. In Germany you can refer to a statement from BaFin in this regard:
According to Article 5c(6) of the SEPA Regulation, payment service users who are not consumers must have the option of waiving the recipient verification requirement when submitting multiple credit transfer orders as a batch. In the case of submitting a file containing multiple credit transfer orders, offering such a waiver option is therefore mandatory for the payment service provider (provided that the payment service provider offers the submission of a bundle of multiple payment orders in the first place).
In cases of low payment volumes, payment service users may in some cases submit files containing only one transfer order to the payment service provider. In such cases, BaFin will not object from a supervisory perspective if a payment service provider offers the payer, who is not a consumer, a waiver of the recipient verification even for files containing only one transfer order that are submitted by means of remote data transmission. This tolerance applies until further notice. BaFin expressly reserves the right to review the implementation and supervisory tolerance if necessary.
(Translated with DeepL)
Although recipient checks are not mandatory for companies, it can be implemented as follows (particularly useful for verifying the account holder in the case of direct debits):
EBICS 2.5
Submission via order type CTV (or CIV for instant payments):
order_id = client.upload('CTV', data)Downloading detailed results of the payee verification:
data = client.download('VPZ')Approval of the order including all payments:
client.HVE(order_id)
Cancellation of the order including all payments:
client.HVS(order_id)
If your bank requires a payee verification for single uploaded transactions, you can implement the upload with direct approval as follows:
order_id = client.upload('CTV', data)
data_digest = client._data_digest
for i in range(5):
# Wait for verification of payee
time.sleep(2)
try:
# Sign and approve order
client.HVE(order_id, 'CTV', data_digest)
break
except EbicsFunctionalError as err:
if err.code == err.EBICS_ORDERID_UNKNOWN:
# Order id not found yet. Try again...
continue
raise
else:
raise Exception('Timeout signing CTV order. '
'Order id %s not found' % order_id)EBICS 3.0
Order submission:
CTV = BusinessTransactionFormat(
service='SCT',
msg_name='pain.001',
option='VOI',
)
order_id = client.BTU(CTV, data)Downloading detailed results of the payee verification:
VPZ = BusinessTransactionFormat(
service='REP',
msg_name='pain.002',
option='VOP',
format='ZIP',
)
data = client.BTD(VPZ)Approval of the order including all payments:
client.HVE(order_id)
Cancellation of the order including all payments:
client.HVS(order_id)
Upload of a single transaction with direct approval:
CTV = BusinessTransactionFormat(
service='SCT',
msg_name='pain.001',
option='VOI',
)
order_id = client.BTU(CTV, data)
data_digest = client._data_digest
for i in range(5):
# Wait for verification of payee
time.sleep(2)
try:
# Sign and approve order
client.HVE(order_id, CTV, data_digest)
break
except EbicsFunctionalError as err:
if err.code == err.EBICS_ORDERID_UNKNOWN:
# Order id not found yet. Try again...
continue
raise
else:
raise Exception('Timeout signing CTV order. '
'Order id %s not found' % order_id)