Interac eTransfer Deposit

Pay.Per´s Interac deposit is an online banking payment method from Canada.

Payper’s API integration makes it easy to accept Interac e-Transfer payments from any Canadian with a bank account. Canadian bank account holders authorize payments directly from their bank account.

With Interac e-Transfer the merchant´s customers receive an email allowing them to send the payment through the Interac network by logging into their bank account and authorizing the transfer.

The merchant will send an initiatePaymentRequest to PXP and in the response a URL will be shared, to which the customer should be redirected to complete the payment with their banking credentials.

The following method IDs are covered in this section:

IDNameCredit/Debit State
343Interac eTransfer DepositDepositedByProvider (29)

Payment method interaction type: Redirection to External Payment Provider (see Interaction Types).

ProviderID: 204

After initiating the payment with Pay.per, the customer is redirected to a online banking selection page.

The customer is not redirected back from the online banking page to the merchant.

Redirect Integration

Not supported at this moment.

Backend2BackendIntegration

The merchant needs to ensure to include an user in the initiatepaymentRequest with the following data:

User.dataDescription
eMail (required)The customer´s eMail address.
phone (required)The customer´s phone number. Please use this format: "+14034881071"
FirstName (required)The customer´s first name.
LastName (required)The customer´s last name
Address.Street (required)The customer´s street address.
Address.City (required)The customer´s city.
Address.State (required)The customer´s state in ISO format, e.g. "Alberta"
Address.Country (required)The customer´s country.
Address.postal_code (required)The customer´s zip code, either 5-digit zip code for US customer (e.g. "12345") or 6-character alphanumeric postal code (e.g. "A1A 1A1") for Canadian customers

The following data needs to be passed as well:

key (value type, account type, required)Value
IP-Address (required)The user´s IP address.

Example initiatePaymentRequest:

<?xml version="1.0" encoding="utf-8"?>
<initiatePaymentRequest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                        xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                        xmlns="http://www.cqrpayments.com/PaymentProcessing">
    <merchantID>TestMerchant</merchantID>
    <shopID>TestShop</shopID>
    <merchantTransactionID>10000051</merchantTransactionID>
    <paymentMethodID>343</paymentMethodID>
    <amount currencyCode="CAD">1.00</amount>
    <userID>userID01</userID>
    <userData>
        <username>username01</username>
        <firstname>John</firstname>
        <lastname>Doe</lastname>
        <currencyCode>CAD</currencyCode>
        <languageCode xsi:nil="true"/>
        <email>[email protected]</email>
        <address>
            <street>Teststreet 1</street>
            <houseName xsi:nil="true"/>
            <houseNumber xsi:nil="true"/>
            <houseNumberExtension xsi:nil="true"/>
            <postalCode>T1A 0N1</postalCode>
            <city>Hamilton</city>
            <state>ON</state>
            <countryCode2>CA</countryCode2>
            <telephoneNumber>+14034881071</telephoneNumber>
        </address>
        <gender>Male</gender>
        <identificationNumberType xsi:nil="true"/>
        <drivingLicenseNumber xsi:nil="true"/>
        <drivingLicenseIssuingState xsi:nil="true"/>
    </userData>
    <userIP>127.0.0.1</userIP>
    <userSessionID>08b980b9-b5be-4d0a-9e1b-a6541d6ac9ce</userSessionID>
    <creationTypeID>1</creationTypeID>
</initiatePaymentRequest>

📘

User Details

Please make sure to provide all required fields on the user passed in the initiatePayment request.

Example initiatePaymentResponse:

<initiatePaymentResponse xmlns="http://www.cqrpayments.com/PaymentProcessing"
                         xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <payment xsi:type="paymentWithPaymentAccount">
        <merchantID>TestMerchant</merchantID>
        <shopID>TestShop</shopID>
        <paymentMethod>
            <key>343</key>
            <value>Interac eTransfer Deposit</value>
        </paymentMethod>
        <merchantTransactionID>Payper_ProviderTesting022</merchantTransactionID>
        <paymentID>80ebe398-1f16-48ab-87ba-615f3a77a7af</paymentID>
        <userID>44ede06a-23e1-419a-b77e-e2e62a</userID>
        <paymentProvider>
            <key>204</key>
            <value>Payper</value>
        </paymentProvider>
        <amount currencyCode="CAD">122.00</amount>
        <creationType>
            <key>1</key>
            <value>User</value>
        </creationType>
        <userIP>127.0.0.1</userIP>
        <state>
            <id>d8d36b9d-aa1b-4559-a27d-48342984128d</id>
            <definition>
                <key>30</key>
                <value>RedirectURLCreated</value>
            </definition>
            <createdOn>2022-09-12T07:50:26.1825878Z</createdOn>
            <paymentStateDetails>
                <detail xsi:type="keyStringValuePair">
                    <key>RedirectionUrl</key>
                    <value>https://sandbox.interac.payper.ca/eTransfer/30676363970241809555534955836</value>
                </detail>
                <detail xsi:type="keyStringValuePair">
                    <key>PaymentStateReasonID</key>
                    <value>1</value>
                </detail>
            </paymentStateDetails>
        </state>
        <isExecuted>false</isExecuted>
        <baseAmount currencyCode="EUR">88.11</baseAmount>
        <paymentDetails>
            <detail xsi:type="keyStringValuePair">
                <key>ProviderTransactionID</key>
                <value>30676363970241809555534955836</value>
            </detail>
            <detail xsi:type="keyStringValuePair">
                <key>ProviderExternalID</key>
                <value>678</value>
            </detail>
        </paymentDetails>
    </payment>
</initiatePaymentResponse>

Possible payment states in initiatePaymentResponse:

Payment StateDescription
RedirectURLCreated (30)OK state; Redirect user to the URL

The merchant system should retrieve the redirect URL from the key RedirectionUrl
InitiateErrorReportedByProvider (4)Error state; Technical error during payment initialization. Final state.
InitiateRequestProviderCommunicationErrorOccured (325)Technical communication error state. Final state.
InitiateRefusedByProvider (550)Generic provider decline
ValidationFailed (225)Error state returned if submitted data is incorrect.

Incorrect field information will be returned in ProviderErrorResponseCode and ProviderErrorResponseMessage.

After redirection of the customer to Payper, a notification is being sent from Payper to PXP Financial.

Transition from redirect to final (success) state could take from a few seconds up to 24 hours.

These states below are intermediate states. They can be notified at the merchant´s wish.

Payment StateDescription
PendingOnCustomerThe Interac system is waiting for the customer to complete the transaction
PendingOnProviderPayPer is waiting for Interac to confirm funds to Payper´s account. This state only appears if there is a block with the bank and this doesn´t happen for every transaction.

These states below are final states:

Payment StateDescription
DepositedByProvider (29)The payment was reported as successful by the provider.
RefusedByProvider (100)The payment has been declined.
Expired (102)The payment request has expired. Interac eTransfer payment will expire 24 hours from midnight UTC the following day.
Aborted (524)The payment has been cancelled by the merchant or by PayPer on behalf of the merchant.

📘

Expiry

An Interac eTransfer payment will expire 24 hours from midnight UTC the following day.

For example, if an Interac eTransfer transaction is created at September 16th at 21:00 UTC, it will expire 24 hours from September 17th 00:00UTC so on September 18th at 00:00 UTC

When enabled by PayPer, it will be possible to receive another update in state PaymentDetailsUpdated with the details BankName and PayerName.

PaymentDetailDescription
BankNameThe name of the bank from which the deposit was credited.
PayerNameThe name of the payer from which bank account the deposit was credited.

❗️

BankName and PayerName

Please note, depending on the data delivered by Payper, either BankName or PayerName or both might be empty.

📘

PaymentDetailUpdate

The payment state ID for PaymentDetailsUpdated is 633.

handlePaymentStateChangedNotification with BankName and PayerName:

<handlePaymentStateChangedNotificationRequest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.cqrpayments.com/PaymentProcessing">
    <payment xsi:type="paymentWithPaymentAccount">
        <merchantID>xxxx</merchantID>
        <shopID>xxxx</shopID>
        <paymentMethod>
            <key>343</key>
            <value>Interac eTransfer Deposit</value>
        </paymentMethod>
        <merchantTransactionID>a635736d-9e66-42cf-a673-89c7bd4b3850</merchantTransactionID>
        <paymentID>94d238e4-ef75-4a22-af91-f1c178620bd8</paymentID>
        <userID>ba2f25b9-4c4e-451b-82c8-4fdf2d</userID>
        <paymentProvider>
            <key>204</key>
            <value>Payper</value>
        </paymentProvider>
        <amount currencyCode="CAD">123.0100</amount>
        <creationType>
            <key>1</key>
            <value>User</value>
        </creationType>
        <userIP>127.0.0.1</userIP>
        <state>
            <id>e92fca2e-a195-44ed-8d01-b52de6efd479</id>
            <definition>
                <key>633</key>
                <value>PaymentDetailsUpdated</value>
            </definition>
            <createdOn>2022-09-23T08:03:38.943</createdOn>
            <paymentStateDetails>
                <detail xsi:type="keyIntValuePair">
                    <key>PaymentStateReasonID</key>
                    <value>1</value>
                </detail>
            </paymentStateDetails>
        </state>
        <isExecuted>false</isExecuted>
        <baseAmount currencyCode="EUR">88.8400</baseAmount>
        <paymentDetails>
            <detail xsi:type="keyStringValuePair">
                <key>ProviderExternalID</key>
                <value>6981</value>
            </detail>
            <detail xsi:type="keyStringValuePair">
                <key>ProviderTransactionID</key>
                <value>5659879136449473</value>
            </detail>
            <detail xsi:type="keyStringValuePair">
                <key>BankName</key>
                <value>Bank of Canada</value>
            </detail>
            <detail xsi:type="keyStringValuePair">
                <key>PayerName</key>
                <value>Tasty Sort</value>
            </detail>
        </paymentDetails>
    </payment>
</handlePaymentStateChangedNotificationRequest>

handlePaymentStateChangedNotification with only PayerName:

<handlePaymentStateChangedNotificationRequest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.cqrpayments.com/PaymentProcessing">
    <payment xsi:type="paymentWithPaymentAccount">
        <merchantID>XXXXXX</merchantID>
        <shopID>XXXXX</shopID>
        <paymentMethod>
            <key>343</key>
            <value>Interac eTransfer Deposit</value>
        </paymentMethod>
        <merchantTransactionID>c79f8d59-3456-44fc-8eb6-f89898964426</merchantTransactionID>
        <paymentID>e97e12bd-db85-4f3e-a5f7-7c460d823408</paymentID>
        <userID>26c2bb10-d3ad-438f-b173-186559</userID>
        <paymentProvider>
            <key>204</key>
            <value>Payper</value>
        </paymentProvider>
        <amount currencyCode="CAD">124.0100</amount>
        <creationType>
            <key>1</key>
            <value>User</value>
        </creationType>
        <userIP>127.0.0.1</userIP>
        <state>
            <id>44f398ea-b518-4bde-a42e-66907005ace0</id>
            <definition>
                <key>633</key>
                <value>PaymentDetailsUpdated</value>
            </definition>
            <createdOn>2022-09-23T08:03:47.083</createdOn>
            <paymentStateDetails>
                <detail xsi:type="keyIntValuePair">
                    <key>PaymentStateReasonID</key>
                    <value>1</value>
                </detail>
            </paymentStateDetails>
        </state>
        <isExecuted>false</isExecuted>
        <baseAmount currencyCode="EUR">89.5600</baseAmount>
        <paymentDetails>
            <detail xsi:type="keyStringValuePair">
                <key>ProviderExternalID</key>
                <value>6982</value>
            </detail>
            <detail xsi:type="keyStringValuePair">
                <key>ProviderTransactionID</key>
                <value>3252635514511482</value>
            </detail>
            <detail xsi:type="keyStringValuePair">
                <key>PayerName</key>
                <value>Tasty Sort</value>
            </detail>
        </paymentDetails>
    </payment>
</handlePaymentStateChangedNotificationRequest>

Notifications

The standard notification mechanism is used for notifying the merchant in the background (asynchronously) about payment state changes. For more information see PaymentStateChangedNotification.

Example handlePaymentStateChangedNotificationRequest:

<?xml version="1.0" encoding="utf-8"?>
<handlePaymentStateChangedNotificationRequest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.cqrpayments.com/PaymentProcessing">
<payment xsi:type="paymentWithPaymentAccount">
<merchantID>B2BTestMerchant</merchantID>
<shopID>PayperMockShop</shopID>
<paymentMethod>
<key>343</key>
<value>Interac eTransfer Deposit</value>
</paymentMethod>
<merchantTransactionID>b3caacef-6d69-4a0a-a433-b5671d5f0327</merchantTransactionID>
<paymentID>f8d28ad0-b76d-4f2a-8f01-2df51489b741</paymentID>
<userID>9ee34ebb-2908-4bcb-bb47-901847</userID>
<paymentProvider>
<key>204</key>
<value>Payper</value>
</paymentProvider>
<amount currencyCode="CAD">110.0100</amount>
<creationType>
<key>1</key>
<value>User</value>
</creationType>
<userIP>127.0.0.1</userIP>
<state>
<id>ab8aced8-7ec0-489f-af3b-dd6bb2aeac68</id>
<definition>
<key>29</key>
<value>DepositedByProvider</value>
</definition>
<createdOn>2022-09-12T07:35:56.413</createdOn>
<paymentStateDetails xsi:nil="true" />
</state>
<isExecuted>true</isExecuted>
<baseAmount currencyCode="EUR">79.4500</baseAmount>
<paymentDetails>
<detail xsi:type="keyStringValuePair">
<key>ProviderExternalID</key>
<value>614</value>
</detail>
<detail xsi:type="keyStringValuePair">
<key>ProviderTransactionID</key>
<value>6c759780-5ca0-4377-a8f2-6ac7e6950622</value>
</detail>
</paymentDetails>
</payment>
</handlePaymentStateChangedNotificationRequest>

Provider Testing

During provider testing, the following amounts will return the following statuses:

AmountDescription
xx.00 (xx is between 0 and 2899)Results in a payment in DepositedByProvider ("approved" on provider side)
xx.13 (xx is between 0 and 2899)Results in a payment in RefusedByProvider state ("declined" on provider side)
xx.66 (xx is between 0 and 2899)Results in a payment in Aborted state ("canceled" on provider side)
88.88Results in a payment in InitiateErrorReportedByProvider state ("declined" on provider side)
xx.99 (xx is between 0 and 2899)Results in a payment in Expired state ("expired" on provider side)
Amounts between 2900 and 3000 CADThis will result in state InitiateErrorReportedByProvider ("declined" on provider side)
Amounts above 3000 CADThis will result in state ValidationFailed ("pl_error" on provider side)
Requests with incorrect data, eg. an invalid zip code (postal code).This will result in ValidationFailed state ("invalid" on provider side)

Out of band transaction

The payment method will also include support for out of band transactions.

In the event that a customer who has previously transacted via Interac e-Transfer performs additional deposits directly through a stored payee in their online banking, without processing through a merchant's system, Payper will automatically identify these payment and a new transaction will be created in the system and will be notified to PXP.

PXP will create new transactions and notify those to the merchant.

Alternatively Payper can automatically refund these payments and return the funds to the sender.

handlePaymentStateChangedNotification for an out of band transaction. Such a transaction will automatically include the details BankName and PayerName:

<?xml version="1.0" encoding="utf-8"?>
<handlePaymentStateChangedNotificationRequest xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.cqrpayments.com/PaymentProcessing">
    <payment xsi:type="paymentWithPaymentAccount">
        <merchantID>TestMerchant</merchantID>
        <shopID>TestShop</shopID>
        <paymentMethod>
            <key>343</key>
            <value>Interac eTransfer Deposit</value>
        </paymentMethod>
        <merchantTransactionID>de51b580-314a-4d6b-8dd4-dcbee3d6bf2f</merchantTransactionID>
        <paymentID>39491938-ae90-402a-bf13-fb487ccb091f</paymentID>
        <userID>5ab0e8a6-3313-4675-89ff-6fdfe9</userID>
        <paymentProvider>
            <key>204</key>
            <value>Payper</value>
        </paymentProvider>
        <amount currencyCode="CAD">220.1000</amount>
        <shopFee currencyCode="CAD">0.0000</shopFee>
        <creationType>
            <key>6</key>
            <value>Provider</value>
        </creationType>
        <userIP>127.0.0.1</userIP>
        <state>
            <id>485b81f7-4b8a-4423-a84f-cac5310bd888</id>
            <definition>
                <key>29</key>
                <value>DepositedByProvider</value>
            </definition>
            <createdOn>2022-09-22T14:32:38.937</createdOn>
            <paymentStateDetails xsi:nil="true" />
        </state>
        <isExecuted>true</isExecuted>
        <baseAmount currencyCode="EUR">158.9500</baseAmount>
        <paymentDetails>
            <detail xsi:type="keyDecimalValuePair">
                <key>BaseShopFeeAmount</key>
                <value>0.0000</value>
            </detail>
            <detail xsi:type="keyStringValuePair">
                <key>BaseShopFeeCurrencyCode</key>
                <value>EUR</value>
            </detail>
            <detail xsi:type="keyStringValuePair">
                <key>ProviderExternalID</key>
                <value>6683</value>
            </detail>
            <detail xsi:type="keyStringValuePair">
                <key>ProviderTransactionID</key>
                <value>346344390</value>
            </detail>
            <detail xsi:type="keyStringValuePair">
                <key>BankName</key>
                <value>Toronto-Dominion Bank</value>
            </detail>
            <detail xsi:type="keyStringValuePair">
                <key>PayerName</key>
                <value>payper user</value>
            </detail>
        </paymentDetails>
    </payment>
</handlePaymentStateChangedNotificationRequest>