Search Overlay

Interac e-Transfer

The Paysafe Payments API supports Interac e-Transfer as a payment instrument. Interac e-Transfer is a funds transfer service between personal and business institutions that allows merchants to collect funds from Canadian consumers to pay for the goods. Interac eTransfer is a popular payment options for consumers in Canada.

Features

  • Supported region: Canada
  • Supported currency: CAD

Transaction Types

Interac e-Transfer supports below two transactions:

  • Payments
  • Payouts

Setup Requirements

To create a test account in the sandbox and production environment, Paysafe requires the following details:

  • Bank account
  • Merchant email

Typical Scenarios

Payment (Request money flow)

When processing an Interac request money payment request, perform the following steps:

  1. Create a Payment Handle with the transactionType parameter set to PAYMENT and the paymentType parameter set to INTERAC_ETRANSFER
    • Post : paymenthub/v1/paymenthandles
  2. Since the customer has to complete payment by selecting bank account on interac page, Paysafe returns a response with the following:
    • The action parameter is set to REDIRECT
    • A redirect_payment link points to the Interac redirect URL
  3. Redirect the customer to the Interac redirect URL.
    • On redirecting the customer to redirection link, status of the Payment Handle becomes PAYABLE and you will be notified with webhook for PAYMENT_HANDLE_PAYABLE event
    • On redirection page, customer selects the bank, provides credentials, and accepts the request of transfer-money.
  4. Use the paymentHandleToken returned in the response to process the Payment request via Payments API using the private key. You must initiate a POST request to the endpoint:
    • Post : paymenthub/v1/payments
  5. Once the merchant processes the payment via Payments API, the payment will be indicated as PENDING. When the consumer successfully completes the payment within the payment time to live, the merchant will receive the SETTLEMENT COMPLETED/ PAYMENT COMPLETED event (Since this is settlewithauth= true, we can assume that both are same). You can safely credit the cash to the customer's account/ship the goods once you get these events.

Payment (Send money flow)

When you want to process an Interac payment request, perform the following steps:

  1. Create a payment handle with method set to SEND_MONEY, transactionType set to PAYMENT, paymentType set to INTERAC_ETRANSFER, and paymentrefexpiryminutes set to the period of time the merchant wants the transaction to be open (minimum is 120).

    • Post: paymenthub/v1/paymenthandles

  2. Since the customer needs instructions on how to complete the payment, Paysafe returns a response with the following:

    • The action parameter is set to PAYABLE

    • A unique payment reference is returned

  3. View the payment instructions on your hosted page, including the merchant name, merchant email, amount, and memo reflecting the value from the payment reference.

    • When you redirect a customer to a redirection link, the Payment Handle's status changes to PAYABLE, and you will be notified via a webhook for the PAYMENT_HANDLE_PAYABLE event.

    • On the redirection page, the customer chooses the bank, enters credentials, and accepts the transfer-money request.

  4. Process the payment request via Payments API by using the paymentHandleToken supplied in the response and the private key. A POST request needs to be sent to the endpoint:

    • Post: paymenthub/v1/payments

  5. After the merchant processes the payment using the Payments API, The status of the payment will change to PENDING. The merchant will receive a SETTLEMENT_COMPLETED/PAYMENT_COMPLETED event when the customer successfully completes the payment within the payment time to live. Since settlewithauth=true, we can assume that both are the same. You can dispatch the goods or safely credit the amount to the customer's account once you get these events.

Withdrawal

When you want to process a Interac withdrawal request, do the following:

  1. Ask customer the email ID to initiate a withdrawal.

  2. Check if the email ID is registered for Auto deposit. You can use Verification API to do the same. You get Auto Deposit status and max transferrable amount in response.

  3. Depending on auto-deposit registration status, below mentioned steps need to be implemented.

Registered for Auto Deposit Flow

  1. Create a Payment Handle with the transactionType parameter set to STANDALONE_CREDIT and the paymentType parameter set to INTERAC_ETRANSFER.

  2. This Payment Handle should immediately have the status of PAYABLE.

  3. Use the paymentHandleToken returned in the response to process the Withdrawal request via Standalone Credit API using the private key. You must initiate a POST request to the endpoint:

    • Post: /paymenthub/v1/standalonecredits
  4. Once the Withdrawal request is successfully completed, the status of the withdrawal (STANDALONE_CREDIT) will be in PROCESSING state. And funds are transferred to the customer's account upon which the status will be changed to COMPLETED.

Not registered for Auto Deposit Flow

  1. For non Auto deposit withdrawals, you have to pass the security question and answer to the API. This can be done either by asking customer to pass question & answer or you can have preconfigured question & answer (and share this with customer).
  2. Create a Payment Handle with the transactionType parameter set to STANDALONE_CREDIT, the paymentType parameter set to INTERAC_ETRANSFER and pass the set of question & answer in the API.
  3. This Payment Handle should immediately have the status of PAYABLE.
  4. Use the paymentHandleToken returned in the response to process the Withdrawal request via Standalone Credit API using the private key. You must initiate a POST request to the endpoint:
    • Post: /paymenthub/v1/standalonecredits
  5. Customer will receive the link via email and customer has to complete the process of answering the question via interac/bank page.
  6. You will receive webhook for the "SA_CREDIT_COMPLETED" event and once funds are credited into customer account.

Code Examples

Payments

Payment Handle Request Example

You have to pass Interac e-Transfer object in the payment Handle request:

"interacEtransfer": {
"consumerId": "krissjames.12@gmail.com",
"type":"EMAIL"
}

Parameter

Type Mandatory Description
consumerId string true Customer/end user email id or phone number, from whom money has to be collected.
true string false Default: EMAIL To pass mobile number we have to specify the type as PHONE.

Payment Handle Request

{
"merchantRefNum":"118a0bb7-7239-43ea-b6a8-1dd8b5b765ad",
"transactionType":"PAYMENT",
"paymentType":"INTERAC_ETRANSFER",
"amount":"544",
"currencyCode":"CAD",
"customerIp":"172.0.0.1",
"interacEtransfer":{
"consumerId":"madhubaddam@paysafe.com",
"type":"EMAIL"
},
"billingDetails":{
"street1":"100 Queen",
"street2":"Unit 201",
"city":"Melbourne",
"state":"Victoria",
"zip":"3000",
"country":"AU"
},
"profile":{
"firstName":"Madhu",
"lastName":"Baddam",
"email":"madhu@paysafe.com"
},
"returnLinks":[
{
"rel":"default",
"href":"http://www.amazon.in"
},
{
"rel":"on_failed",
"href":"http://www.costco.ca"
},
{
"rel":"on_cancelled",
"href":"http://www.bestbuy.ca"
}
]
}

Payment Handle Response Example

{
"id": "514b4cf1-8891-445d-9b58-e50ae02d8c3c",
"paymentType": "INTERAC_ETRANSFER",
"paymentHandleToken": "PHEkR6gInY2NM05X",
"merchantRefNum": "afca4603-a9d7-4010-866f-f5a7204f36fd",
"currencyCode": "CAD",
"txnTime": "2021-10-06T13:15:22Z",
"billingDetails": {
"street": "100 Queen",
"street2": "Unit 201",
"city": "Melbourne",
"zip": "3000",
"state": "Victoria",
"country": "AU"
},
"customerIp": "172.0.0.1",
"status": "INITIATED",
"links": [
{
"rel": "redirect_payment",
"href": "https://api.qa.paysafe.com/alternatepayments/v1/redirect?accountId=1018169820&paymentHandleId=514b4cf1-8891-445d-9b58-e50ae02d8c3c&token=eyJhbGciOiJIUzI1NiJ9.eyJhY2QiOiIxMDE4MTY5ODIwIiwicHlkIjoiNTE0YjRjZjEtODg5MS00NDVkLTliNTgtZTUwYWUwMmQ4YzNjIiwiZXhwIjoxNjMzNTI3OTIzfQ.DvMBbCsxckQhKwsUSpHEAh9IkpGuIyaPFsa4heWUxNE"
}
],
"liveMode": false,
"simulator": "EXTERNAL",
"usage": "SINGLE_USE",
"action": "REDIRECT",
"executionMode": "SYNCHRONOUS",
"amount": 544,
"timeToLiveSeconds": 899,
"gatewayResponse": {
"id": "Gs27oxf1xsoUJRrB",
"processor": "INTERAC",
"status": "AVAILABLE"
},
"returnLinks": [
{
"rel": "on_failed",
"href": "http://www.costco.ca"
},
{
"rel": "default",
"href": "http://www.amazon.in"
},
{
"rel": "on_cancelled",
"href": "http://www.bestbuy.ca"
}
],
"transactionType": "PAYMENT",
"gatewayReconciliationId": "e17a0f2f-ab84-4fe0-a405-a6ef104120dc",
"updatedTime": "2021-10-06T13:15:23Z",
"statusTime": "2021-10-06T13:15:23Z",
"interacEtransfer": {
"consumerId": "madhu.baddam@paysafe.com",
"type": "EMAIL"
},
"profile": {
"firstName": "Madhu",
"lastName": "Baddam",
"email": "madhu@paysafe.com"
}
}

Payments Request Example

{
"merchantRefNum": "b9405251-5ede-4439-b844-73ff553144a5",
"amount": "546",
"currencyCode": "CAD",
"settleWithAuth": true,
"paymentHandleToken": "PHEkR6gInY2NM05X"
}

Payments Response Example

{
"id": "568530f0-262a-453f-b681-1088195d9439",
"paymentType": "INTERAC_ETRANSFER",
"paymentHandleToken": "PHEkR6gInY2NM05X",
"merchantRefNum": "b9405251-5ede-4439-b844-73ff553144a5",
"currencyCode": "CAD",
"settleWithAuth": true,
"dupCheck": true,
"txnTime": "2021-10-06T13:18:58Z",
"billingDetails": {
"street1": "100 Queen",
"street2": "Unit 201",
"city": "Melbourne",
"zip": "3000",
"state": "Victoria",
"country": "AU"
},
"status": "PROCESSING",
"gatewayReconciliationId": "Io27oxf1xsqOrDIe",
"amount": 546,
"availableToRefund": 0,
"consumerIp": "172.0.0.1",
"liveMode": false,
"simulator": "EXTERNAL",
"updatedTime": "2021-10-06T13:20:18Z",
"statusTime": "2021-10-06T13:20:18Z",
"gatewayResponse": {
"id": "Io27oxf1xsqOrDIe",
"processor": "INTERAC",
"status": "AVAILABLE"
},
"availableToSettle": 0,
"interacEtransfer": {
"consumerId": "madhu.baddam@paysafe.com",
"type": "EMAIL"
},
"profile": {
"firstName": "Madhu",
"lastName": "Baddam",
"email": "madhu@paysafe.com"
},
"settlements": {
"amount": 546,
"txnTime": "2021-10-06T13:18:58.000+0000",
"availableToRefund": 0,
"merchantRefNum": "b9405251-5ede-4439-b844-73ff553144a5",
"id": "568530f0-262a-453f-b681-1088195d9439",
"status": "PROCESSING"
}
}

To know more about each parameter, you can visit Payments.

Verification

Payment Hanle Request Example

{
"merchantRefNum": "8e103c2d-891c-4b42-b3ba-28aaf371ad25",
"transactionType": "VERIFICATION",
"paymentType": "INTERAC_ETRANSFER",
"amount": 543,
"currencyCode": "CAD",
"dupCheck": true,
"liveMode": true,
"interacEtransfer": {
"consumerId": "madhu@paysafe.com"
},
"profile": {
"firstName": "Madhu",
"lastName": "Baddam",
"email": "madhu.baddam@paysafe.com"
}
}

Payment Handle Response Example

{
"id": "cbd5a3a4-fbba-4d09-a666-662ff13c1628",
"paymentType": "INTERAC_ETRANSFER",
"paymentHandleToken": "PHd0GFCqwJqu9YkV",
"merchantRefNum": "0a8c7252-1ba6-4e89-b666-3f11ed3ffb20",
"currencyCode": "CAD",
"txnTime": "2021-10-06T13:43:18Z",
"status": "PAYABLE",
"liveMode": false,
"simulator": "EXTERNAL",
"action": "NONE",
"amount": 543,
"timeToLiveSeconds": 899,
"gatewayResponse": {
"processor": "INTERAC"
},
"transactionType": "VERIFICATION",
"updatedTime": "2021-10-06T13:43:18Z",
"statusTime": "2021-10-06T13:43:18Z",
"interacEtransfer": {
"consumerId": "madhu@paysafe.com"
},
"profile": {
"firstName": "Madhu",
"lastName": "Baddam",
"email": "madhu.baddam@paysafe.com"
}
}

To know more about each parameter, you can visit Payment Handles.

Verification Request Example

{
"paymentHandleToken": "PHd0GFCqwJqu9YkV",
"currencyCode": "CAD",
"merchantRefNum": "0a8c7252-1ba6-4e89-b666-3f11ed3ffb20",
"amount": "543"
}

Verification Response Example

{
"id": "d19ca286-6497-4dc5-bcd6-c1b80431800a",
"paymentType": "INTERAC_ETRANSFER",
"paymentHandleToken": "PHd0GFCqwJqu9YkV",
"merchantRefNum": "ab428d69-1135-4db7-9305-999605b48814​​​",
"currencyCode": "CAD",
"txnTime": "2021-10-06T09:40:52Z",
"billingDetails": {
"street1": "100 Queen Street West",
"street2": "stree 2",
"city": "Toronto",
"zip": "M5H 2N2",
"state": "CA",
"country": "NL"
},
"status": "COMPLETED",
"amount": 543,
"updatedTime": "2021-10-06T09:40:52Z",
"statusTime": "2021-10-06T09:40:52Z",
"liveMode": false,
"simulator": "EXTERNAL",
"gatewayResponse": {
"processor": "INTERAC"
},
"interacEtransfer": {
"consumerId": "madhu@paysafe.com",
"maxAmount": 500000,
"transferType": "ALIAS_REGULAR"
},
"profile": {
"firstName": "Madhu",
"lastName": "Baddam",
"email": "madhu.baddam@paysafe.com"
}
}

Withdrawal or Standalone Credits

Non Auto-Deposit

Payment Handle Request Example

{
"merchantRefNum": "0ec1bcb3-2994-4440-acd9-1d71dd0f0988",
"transactionType": "STANDALONE_CREDIT",
"paymentType": "INTERAC_ETRANSFER",
"amount": 500,
"currencyCode": "CAD",
"customerIp": "172.0.0.1",
"interacEtransfer": {
"consumerId": "madhu@paysafe.com",
"question": "what is your name",
"answer": "MadhuBaddam"
},
"profile": {
"firstName": "Madhu",
"lastName": "Baddam",
"email": "madhu.baddam@paysafe.com",
"phone": "12345678"
},
"browserDetails": {
"userCookie": "testusercoockie"
}
}

Payment Handle Response Example

{
"id": "9129cf41-c403-455f-b5b2-6cd76cbeaed7",
"paymentType": "INTERAC_ETRANSFER",
"paymentHandleToken": "PH6grPCguAtRInwc",
"merchantRefNum": "4f55a9f1-f19d-4bc7-b52f-7ef7133995a1",
"currencyCode": "CAD",
"txnTime": "2021-10-06T13:37:58Z",
"customerIp": "172.0.0.1",
"status": "PAYABLE",
"liveMode": false,
"simulator": "EXTERNAL",
"action": "NONE",
"amount": 500,
"timeToLiveSeconds": 899,
"gatewayResponse": {
"id": "Yd27oxf1xt1HwRRi",
"processor": "INTERAC",
"status": "ACCEPTED"
},
"transactionType": "STANDALONE_CREDIT",
"gatewayReconciliationId": "14a92cf4-011a-4598-8cf0-3eb926b1abb8",
"updatedTime": "2021-10-06T13:37:59Z",
"statusTime": "2021-10-06T13:37:59Z",
"browserDetails": {
"userCookie": "testusercoockie"
},
"interacEtransfer": {
"consumerId": "madhu@paysafe.com",
"question": "what is your name",
"answer": "MadhuBaddam",
"maxAmount": 500000,
"transferType": "ALIAS_REGULAR"
},
"profile": {
"firstName": "Madhu",
"lastName": "Baddam",
"email": "madhu.baddam@paysafe.com",
"phone": "12345678"
}
}

To know more about each parameter, you can visit Payment Handles.

Auto-Deposit

{
"merchantRefNum": "mer_ref_1646289201",
"transactionType": "STANDALONE_CREDIT",
"paymentType": "INTERAC_ETRANSFER",
"amount": 500,
"currencyCode": "CAD",
"customerIp": "172.0.0.1",
"interacEtransfer": {
"consumerId": "paysafeauto@paysafe.com"
},
"profile": {
"firstName": "Madhu",
"lastName": "Baddam",
"email": "madhu.baddam@paysafe.com",
"phone": "12345678"
},
"merchantDescriptor": {
"dynamicDescriptor": "OnlineStore"
},
"returnLinks": [
{
"rel": "default",
"href": "http://www.amazon.ca"
},
{
"rel": "on_failed",
"href": "http://www.costco.ca"
},
{
"rel": "on_cancelled",
"href": "http://www.bestbuy.ca"
}
],
"browserDetails": {
"userCookie": "testusercoockie"
}
}
{
"id": "b1d312e0-91c2-4a64-be50-42f02c58b1c0",
"paymentType": "INTERAC_ETRANSFER",
"paymentHandleToken": "PHC3sQw2EaDNrSFy",
"merchantRefNum": "mer_ref_1646288564",
"currencyCode": "CAD",
"txnTime": "2022-03-03T06:22:55Z",
"customerIp": "172.0.0.1",
"status": "PAYABLE",
"liveMode": false,
"action": "NONE",
"amount": 500,
"merchantDescriptor": {
"dynamicDescriptor": "OnlineStore"
},
"timeToLiveSeconds": 899,
"gatewayResponse": {
"id": "bpw3csW2cHypVNVF",
"processor": "PEOPLE_TRUST",
"status": "ACCEPTED",
"profile": {
"fullName": "customername"
}
},
"returnLinks": [
{
"rel": "on_cancelled",
"href": "http://www.bestbuy.ca"
},
{
"rel": "default",
"href": "http://www.amazon.ca"
},
{
"rel": "on_failed",
"href": "http://www.costco.ca"
}
],
"transactionType": "STANDALONE_CREDIT",
"gatewayReconciliationId": "46fe2e4b-bbf8-4976-9d6f-216150edf17c",
"updatedTime": "2022-03-03T06:22:55Z",
"statusTime": "2022-03-03T06:22:55Z",
"browserDetails": {
"userCookie": "testusercoockie"
},
"interacEtransfer": {
"consumerId": "paysafeauto@paysafe.com",
"maxAmount": 390000,
"transferType": "ALIAS_AUTODEPOSIT"
},
"profile": {
"firstName": "Madhu",
"lastName": "Baddam",
"email": "madhu.baddam@paysafe.com",
"phone": "12345678"
}
}

Withdrawal Request Example

{
"merchantRefNum": "4f55a9f1-f19d-4bc7-b52f-7ef7133995a1",
"amount": "500",
"currencyCode": "CAD",
"paymentHandleToken": "PH6grPCguAtRInwc",
"customerIp": "172.0.0.1",
"description": "Magazine subscription"
}

Withdrawal Response Example

{
"id": "b7759f69-b194-41ad-aab2-164432596c04",
"paymentType": "INTERAC_ETRANSFER",
"paymentHandleToken": "PH6grPCguAtRInwc",
"merchantRefNum": "4f55a9f1-f19d-4bc7-b52f-7ef7133995a1",
"currencyCode": "CAD",
"dupCheck": true,
"txnTime": "2021-10-06T13:38:44Z",
"customerIp": "172.0.0.1",
"status": "PROCESSING",
"gatewayReconciliationId": "f58a0d95-0934-46dd-bcd3-96c4990be3f3",
"amount": 500,
"liveMode": false,
"simulator": "EXTERNAL",
"updatedTime": "2021-10-06T13:38:44Z",
"statusTime": "2021-10-06T13:38:44Z",
"gatewayResponse": {
"id": "Yd27oxf1xt1HwRRi",
"processor": "INTERAC",
"status": "AVAILABLE"
},
"interacEtransfer": {
"consumerId": "madhu@paysafe.com",
"question": "what is your name",
"answer": "MadhuBaddam",
"maxAmount": 500000,
"transferType": "ALIAS_REGULAR"
},
"profile": {
"firstName": "Madhu",
"lastName": "Baddam",
"email": "madhu.baddam@paysafe.com",
"phone": "12345678"
}
}

To know more about each parameter, you can visit Standalone Credits.

Appendix

Payment Handle

A Payment Handle represents tokenized information about the payment method that you set up for your customer. Once the Payment Handle is created, you can then include the paymentHandleToken returned in the Payment Handle request-response in a new payment request.

Payments Flow:

  1. Create Payment Handle API request.
  2. In Payment Handle API response, you will get redirect link and paymentHandleToken.
    • A Payment Handle can be used in a payment request only if it has the status of PAYABLE.
    • PaymentHandleToken expires in 899 seconds
  3. Redirect user to the redirect link, provided in Payment handle response.
    • You will receive a Webhook with paymentHandleToken status as "PAYABLE"
  4. Wait for 10 mins and let user complete the transaction on Interac page.

    Interac doesn't redirect the customer to Merchant page once customer completes the payment. Hence you are advised to show a message to customer while redirecting to Interac page. You may show a message 'Please close the tab and come back to this page after completing the payment'. In addition, you can have listeners on tab close (on redirection Interac page) and once tab close event is received, you can do a GET API call to pull the status.

    • To find out what user has done on Interac page (closed or cancelled or completed the transaction), you can do a GET API Call.
  5. Make POST "/payments" API call only when the paymentHandleToken status is "PAYABLE"
    • Customer has completed the transaction:
      • If Interac has notified Paysafe then you will receive "status" as COMPLETED in response and also you will receive PAYMENT_COMPLETED webhook.
      • If Interac has not notified Paysafe then you will receive "status" as PROCESSING in response

         

        • Interac takes max 30 mins to notify Paysafe after user completes the transaction on bank page.
        • Once POST "/payments" API call is made, status of paymentHandleToken changes from "PAYABLE" to "COMPLETED".

    • Customer has declined or not completed the transaction:

      If merchant does not make /payments call within 899 seconds for a paymentHandleToken:

      • Customer has completed the transaction via bankpage then Paysafe will complete payment on merchant's behalf and merchant will receive - a) PAYMENT_COMPLETED or b) PAYMENT_PROCESSING followed by PAYMENT_COMPLETED.
      • Customer has declined or not completed the transaction, we will fail the transaction and you will receive PAYMENT_HANDLE_FAILED event.

      • Your payment handle becomes Completed and Payment status will be in Processing.
      • 2 days later, we will mark the transaction as Failed and you will receive "PAYMENT_FAILED" notification.

Withdrawal Flow

Withdrawal flow can be implement in two ways:

  • Verification API + Standalone Credit API.
    • In this model, you will get to know max withdrawal limit and whether user has registered for Auto deposit or not and accordingly you can decide the user experience.
  • Standalone Credit API.

Verification API

  1. Create Payment Handle API request with transactionType parameter set to VERIFICATION and the paymentType parameter set to INTERAC_ETRANSFER.
  2. This Payment Handle should immediately have the status of PAYABLE.
  3. Make POST "/verifications" API call with "PAYABLE" paymentHandleToken.
    • You will receive Auto-deposit status and max limit.

Standalone Credit API

  1. Create Payment Handle API request with transactionType parameter set to STANDALONE_CREDIT and the paymentType parameter set to INTERAC_ETRANSFER.

  2. This Payment Handle status will either be PAYABLE or FAILED.
  3. Make POST "/standalonecredits" API call only if paymentHandleToken is "PAYABLE"
    • In Auto-deposit flow, money gets directly credited into user account. You will receive SA_CREDIT_PROCESSING immediately and SA_CREDIT_COMPLETED on T+1
    • If it is non-Auto-deposit flow, you will receive status as "PROCESSING"
      • Once customer completes the transaction within 30 days then you will receive the webhook SA_CREDIT_COMPLETED.
    • PaymentHandleToken expires in 899 seconds
    • If merchant does not send /standalonecredits call within 899 seconds for a paymentHandleToken then paymentHandleToken will expire and you will received PAYMENT_HANDLE_EXPIRED webhook.

Webhooks

  • PAYMENT_HANDLE_PAYABLE - On receiving this webhook, merchant has to initiate the paymenthub/v1/payments call
  • PAYMENT_COMPLETED/SETTLEMENT_COMPLETED - The payment was completed successfully.
  • PAYMENT_PROCESSING: The payment in is in progress. For some cases it may be waiting an action by the customer or the merchant.
  • And the below optional webhooks
    • PAYMENT_HANDLE_EXPIRED - This webhook is sent when the customer has not completed the payment on the bank page within the paymentHandle token TTL time. So the merchant can close the transaction as not completed.
    • PAYMENT_HANDLE_COMPLETED - The payment handle token is used before expiry.
    • PAYMENT_FAILED - The payment has failed and the downstream PSP has returned an error (http status 402).
    • PAYMENT_ERRORED - The payment has an error (non http status 402 error).
    • SETTLEMENT_FAILED - Consume this to know when the Settlement status becomes FAILED.
    • SETTLEMENT_ERRORED - Consume this to know when the Settlement status becomes ERRORED.

Simulation Cases

Payment

In Production, People Trust will give us call backs to complete the transaction. So to replicate those scenarios we added some simulation cases.

Below amount based simulations are used to COMPLETE/FAIL the Payment transactions with Internal Simulator. We need to send amount value in the request to get the respected result.

Amount (Dollars) Status Time Limit
5.19 or 119 COMPLETED After 20 seconds
5.29 or 129 COMPLETED After 5 minutes
5.39 or 139 COMPLETED After 15 minutes
5.49 or 149 FAILED After 5 minutes
  • Status will change after time limit. Example for amount 5.29 it will wait for 5 minutes and it will update the status
  • For COMPLETED status webhooks will be triggered automatically after time limit without doing any lookup calls
  • For FAILED status we should do a look up call after time limit to get the webhooks
{
"merchantRefNum": "1387453849343947",
"transactionType": "PAYMENT",
"paymentType": "INTERAC_ETRANSFER",
"amount": 519,
"currencyCode": "CAD",
"customerIp": "172.0.0.1",
"interacEtransfer": {
"consumerId": "madhu.baddam@paysafe.com",
"type": "EMAIL"
},
"billingDetails": {
"street1": "100 Queen",
"street2": "Unit 201",
"city": "Melbourne",
"state": "Victoria",
"zip": "3000",
"country": "AU"
},
"profile": {
"firstName": "Madhu",
"lastName": "Baddam",
"email": "madhu@paysafe.com"
}
}

FullName:

This section explains how to return different fullName in the gatewayresponse object in response.

In General for all the Payment Completed transactions we will echo back firstname and lastname as fullName in the response. To get a different value in the fullName, send the amount value as 105 in the request, "JOHN SMITH" will return as fullName in the response every time.

Normal Response

{
"id": "36c237e9-0973-4509-9231-998b25ddbdf0",
"paymentType": "INTERAC_ETRANSFER",
"paymentHandleToken": "PHP1ouu8SVipCCjb",
"merchantRefNum": "2fcebe3d-63e1-4df9-aea5-4492ac5c0091",
"currencyCode": "CAD",
"settleWithAuth": true,
"txnTime": "2022-02-06T13:41:38Z",
"billingDetails": {
"street1": "100 Queen",
"street2": "Unit 201",
"city": "Melbourne",
"zip": "3000",
"state": "Victoria",
"country": "AU"
},
"status": "COMPLETED",
"gatewayReconciliationId": "0928b6d2-0000-4f7f-ba77-9814dec5f643",
"amount": 519,
"availableToRefund": 519,
"consumerIp": "172.0.0.1",
"liveMode": false,
"updatedTime": "2022-02-06T13:41:58Z",
"statusTime": "2022-02-06T13:41:58Z",
"gatewayResponse": {
"profile": {
"fullName": "Madhu Baddam"
},
"id": "FRwDo5XNl8unDJk1",
"processor": "INTERAC",
"status": "DEPOSIT_COMPLETE"
},
"availableToSettle": 0,
"interacEtransfer": {
"consumerId": "madhu.baddam@paysafe.com",
"type": "EMAIL"
},
"profile": {
"firstName": "Madhu",
"lastName": "Baddam",
"email": "madhu@paysafe.com"
}
}

Simulation Response for Amount 105

{
"id": "2bcf8261-c7ac-40e4-8451-38670355cba1",
"paymentType": "INTERAC_ETRANSFER",
"paymentHandleToken": "PHQmoqj8i7NQb1TB",
"merchantRefNum": "4f258664-5a57-49f8-8835-2c801352e0ae",
"currencyCode": "CAD",
"settleWithAuth": true,
"txnTime": "2022-02-06T13:52:17Z",
"billingDetails": {
"street1": "100 Queen",
"street2": "Unit 201",
"city": "Melbourne",
"zip": "3000",
"state": "Victoria",
"country": "AU"
},
"status": "COMPLETED",
"gatewayReconciliationId": "14ce6cb7-d5df-4d23-990f-2407fbfae957",
"amount": 105,
"availableToRefund": 105,
"consumerIp": "172.0.0.1",
"liveMode": false,
"updatedTime": "2022-02-06T13:52:28Z",
"statusTime": "2022-02-06T13:52:28Z",
"gatewayResponse": {
"profile": {
"fullName": "JOHN SMITH"
},
"id": "9BtHBjgSDlXPjqg0",
"processor": "INTERAC",
"status": "DEPOSIT_COMPLETE"
},
"availableToSettle": 0,
"interacEtransfer": {
"consumerId": "madhu.baddam@paysafe.com",
"type": "EMAIL"
},
"profile": {
"firstName": "Madhu",
"lastName": "Baddam",
"email": "madhu@paysafe.com"
}
}

Payment (Send money flow)

The Send Money Payment will be created in Production with the status PENDING. Further, we update the Payment status as soon as we receive a call back from Peoples Trust.

To replicate this situation with the internal simulator, we must hit one endpoint in order to change the payment status to COMPLETED. 

POST: /alternatepayments/interacetransfer/v1/autodeposit/payment

Request body fields:

  • amount: Amount used in payment. 

  • paymentReference: payment reference number generated in payment. 

  • accountNumber: account number which was used while setup the account. 

The amount-based simulations listed below are used to complete payment transactions with the Internal Simulator. To obtain the desired result, we must provide an amount value in the request.

Payments for amounts other than StandaloneCredits and Verifications will be completed instantly. 

Amount (Dollars) Status Time Limit
5.19 or 119 COMPLETED After 20 seconds
5.29 or 129 COMPLETED After 5 minutes
5.39 or 139 COMPLETED After 15 minutes

Request:

{
“amount”: 129,
“paymentReference”: “369SBKQADW”
“accountNumber”: “629-16001-000000010000”
}

Response:

{
“amount”: 129,
“status”: “AVAILABLE”,
“paymentReference": "369SBKQADW ",
"account_number": "629-16001-000000010000"
}

Standalone Credits

Below amount based simulations are used to COMPLETE/FAIL/ERROR the transactions with Internal Simulator.

Amount (Dollars) Status Time Limit
7.19 or 719 COMPLETED After 60 minutes
7.29 or 729 FAILED After 60 minutes
7.39 or 739 ERROR Immediately
7.49 or 749 COMPLETED Immediately
  • For Standalone credits always do a lookup call for the webhooks. 

 

{
"merchantRefNum": "13982837948732984732",
"transactionType": "STANDALONE_CREDIT",
"paymentType": "INTERAC_ETRANSFER",
"amount": 719,
"currencyCode": "CAD",
"customerIp": "172.0.0.1",
"interacEtransfer": {
"consumerId": "madhutest@paysafe.com",
"question": "what is your name",
"answer": "MadhuBaddam"
},
"profile": {
"firstName": "Madhu",
"lastName": "Baddam",
"email": "madhu.baddam@paysafe.com",
"phone": "12345678"
},
"browserDetails": {
"userCookie": "testusercoockie"
},
"deviceDetails": {
"deviceId": "testdeviceid"
}
}

Verifications

There are two types of customers for PEOPLE TRUST.

  1. ALIAS_AUTODEPOSIT
  2. ALIAS_REGULAR

To simulate the above types we need to add the below strings in the consumerId field

for ALIAS_AUTODEPOSIT → send "auto" in the consumerId

example: testauto@paysafe.com

for ALIAS_REGULAR → send "reg" in the consumerId

Example: testreg@paysafe.com

Note: If we are not sending the above simulations in the consumerId it will give a random response.

{
"merchantRefNum": "f8203e56-1920-40df-93f0-56c10bd48064​​​",
"transactionType": "VERIFICATION",
"paymentType": "INTERAC_ETRANSFER",
"amount": 543,
"currencyCode": "CAD",
"dupCheck": true,
"liveMode": true,
"interacEtransfer": {
"consumerId": "autoemail@paysafe.com"
},
"profile": {
"firstName": "Madhu",
"lastName": "Baddam",
"email": "madhu.baddam@paysafe.com"
},
"billingDetails": {
"street1": "100 Queen Street West",
"street2": "stree 2",
"city": "Toronto",
"state": "CA",
"country": "NL",
"zip": "M5H 2N2"
}
}

FullName:

To get the different value in fullName field we should add "nmchk" value in the consumerId.

Example: testnmchkauto@paysafecom -→ it will return "JOHN SMITH" in the response for fullName.

Note: fullName only return for the ALIAS_AUTODEPOSIT transactions. So, add auto also in the consumerId