English Deutsch

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.

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(1)
    try:
        # Sign and approve order
        client.HVE(order_id, 'CTV', data_digest)
        break
    except EbicsFunctionalError as err:
        if err.code != err.EBICS_ORDERID_UNKNOWN:
            raise
        # Order id not found yet. Try again...
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(1)
    try:
        # Sign and approve order
        client.HVE(order_id, CTV, data_digest)
        break
    except EbicsFunctionalError as err:
        if err.code != err.EBICS_ORDERID_UNKNOWN:
            raise
        # Order id not found yet. Try again...
else:
    raise Exception('Timeout signing CTV order. '
                    'Order id %s not found' % order_id)