Ideal Deposit (via Hipay)
Payment method Ideal is a popular online banking methods in the Netherlands.
The following method IDs are covered in this section:
ID | Name | Credit/Debit State | Reversal State |
---|---|---|---|
111 | IdealDeposit | DepositedByProvider (13) |
Payment method interaction type: Redirection to External Payment Provider (see Interaction Types).
Ideal Deposit Returns
Refer to Bank Transfer (and Wallet) Deposit Returns for information on how to correctly handle the notifications for Ideal Deposit Returns
Redirect Integration
Currently not supported.
Backend2BackendIntegration
There are no specificPaymentAccountData.
Please provide the user´s firstname and lastname on the user.
specificPaymentData:
key (value type, account type, required) | value |
---|---|
SuccessPageUrl (string) | URL of the merchant´s success page |
ErrorPageUrl (string) | URL of the merchant´s error page |
PendingPageUrl (string) | URL of the merchant's pending page |
CancelPageUrl (string) | URL of the merchant´s cancel page |
MerchantNotificationUrl (string) | URL that combines Success & ErrorURL |
PaymentDescription | Description of the payment |
CountryCode2 (string, mandatory) | CountryCode of the user |
PaymentProviderID (Int, optional) | Fixed value set to 132. |
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>XXX</merchantID>
<shopID>XXX</shopID>
<merchantTransactionID>019b9df6-98b3-4f53-8037-ef29844796e2</merchantTransactionID>
<paymentMethodID>111</paymentMethodID>
<amount currencyCode="EUR">38.90</amount>
<userID>3ebb551a-b66f-4030-b75c-fe2229</userID>
<userData>
<username>3ebb551a-b66f-4030-b75c-fe2229</username>
<firstname xsi:nil="true" />
<lastname xsi:nil="true" />
<currencyCode xsi:nil="true" />
<languageCode xsi:nil="true" />
<email xsi:nil="true" />
<address>
<street xsi:nil="true" />
<houseName xsi:nil="true" />
<houseNumber xsi:nil="true" />
<houseNumberExtension xsi:nil="true" />
<postalCode xsi:nil="true" />
<city xsi:nil="true" />
<state xsi:nil="true" />
<countryCode2>DE</countryCode2>
<telephoneNumber xsi:nil="true" />
</address>
<gender>Male</gender>
<identificationNumberType xsi:nil="true" />
<drivingLicenseNumber xsi:nil="true" />
<drivingLicenseIssuingState xsi:nil="true" />
</userData>
<userIP>127.0.0.1</userIP>
<userSessionID>93183fb4-f5f1-4405-b9fa-5a60394a7e8d</userSessionID>
<creationTypeID>1</creationTypeID>
<specificPaymentData>
<data xsi:type="keyStringValuePair">
<key>SuccessPageUrl</key>
<value>https://returnurl.com</value>
</data>
<data xsi:type="keyStringValuePair">
<key>CancelPageUrl</key>
<value>http://cancel/?a=b&c=d</value>
</data>
<data xsi:type="keyStringValuePair">
<key>ErrorPageUrl</key>
<value>https://errorurl.com</value>
</data>
<data xsi:type="keyStringValuePair">
<key>MerchantNotificationUrl</key>
<value>https://merchantnotification</value>
</data>
<data xsi:type="keyStringValuePair">
<key>HomePageUrl</key>
<value>http://home/</value>
</data>
<data xsi:type="keyStringValuePair">
<key>PendingPageUrl</key>
<value>http://pending/</value>
</data>
<data xsi:type="keyStringValuePair">
<key>PaymentDescription</key>
<value>wise description</value>
</data>
</specificPaymentData>
</initiatePaymentRequest>
Alternative request with providerID and FirstName, Lastname in specificPaymentData:
<?xml version="1.0" encoding="utf-8"?>
<initiatePaymentRequest xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.cqrpayments.com/PaymentProcessing">
<merchantID>B2BTestMerchant</merchantID>
<shopID>150001</shopID>
<merchantTransactionID>ecb159ee-3ce0-447f-8732-78cfdbbd4e4-0121</merchantTransactionID>
<paymentMethodID>111</paymentMethodID>
<amount currencyCode="EUR">94</amount>
<userID>1233456</userID>
<userData>
<username>1233456</username>
</userData>
<userIP>127.0.0.1</userIP>
<userSessionID>aa27a625-1b3d-425a-a689-5431af914cdf</userSessionID>
<creationTypeID>1</creationTypeID>
<specificPaymentData>
<data xsi:type="keyStringValuePair">
<key>SuccessPageUrl</key>
<value>http://success/?a=b&c=d</value>
</data>
<data xsi:type="keyStringValuePair">
<key>CancelPageUrl</key>
<value>http://cancel/?a=b&c=d</value>
</data>
<data xsi:type="keyStringValuePair">
<key>ErrorPageUrl</key>
<value>http://error/</value>
</data>
<data xsi:type="keyStringValuePair">
<key>MerchantNotificationUrl</key>
<value>https://merchant.com/notification.html</value>
</data>
<data xsi:type="keyStringValuePair">
<key>HomePageUrl</key>
<value>http://home/</value>
</data>
<data xsi:type="keyStringValuePair">
<key>PendingPageUrl</key>
<value>http://pending/</value>
</data>
<data xsi:type="keyStringValuePair">
<key>UserFirstname</key>
<value>Fred</value>
</data>
<data xsi:type="keyStringValuePair">
<key>UserLastname</key>
<value>Flintstone</value>
</data>
<data xsi:type="keyStringValuePair">
<key>CountryCode2</key>
<value>NL</value>
</data>
<data xsi:type="keyIntValuePair">
<key>PaymentProviderID</key>
<value>132</value>
</data>
</specificPaymentData>
</initiatePaymentRequest>
Example initiatePaymentResponse:
<?xml version="1.0" encoding="utf-8"?>
<initiatePaymentResponse 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>XXX</merchantID>
<shopID>XXX</shopID>
<paymentMethod>
<key>111</key>
<value>IdealDeposit</value>
</paymentMethod>
<merchantTransactionID>019b9df6-98b3-4f53-8037-ef29844796e2</merchantTransactionID>
<paymentID>0439e1aa-5c46-431e-b39a-a696c9f1ed17</paymentID>
<userID>3ebb551a-b66f-4030-b75c-fe2229</userID>
<paymentProvider>
<key>132</key>
<value>Hipay</value>
</paymentProvider>
<amount currencyCode="EUR">38.90</amount>
<creationType>
<key>1</key>
<value>User</value>
</creationType>
<userIP>127.0.0.1</userIP>
<state>
<id>4049da46-018a-4bb0-a0a2-1cb491ce1e14</id>
<definition>
<key>30</key>
<value>RedirectURLCreated</value>
</definition>
<createdOn>2021-03-12T10:46:46.6567523Z</createdOn>
<paymentStateDetails>
<detail xsi:type="keyStringValuePair">
<key>RedirectionUrl</key>
<value>https://api.test2.kalixa.com/WebMockProviders/HipayFrontend/Index?orderId=121725&paymentProduct=ideal</value>
</detail>
<detail xsi:type="keyStringValuePair">
<key>PaymentStateReasonID</key>
<value>1</value>
</detail>
</paymentStateDetails>
</state>
<isExecuted>false</isExecuted>
<baseAmount currencyCode="EUR">38.9</baseAmount>
<paymentDetails>
<detail xsi:type="keyStringValuePair">
<key>ProviderExternalID</key>
<value>121725</value>
</detail>
</paymentDetails>
</payment>
</initiatePaymentResponse>
Possible payment states in initiatePaymentResponse:
Payment States | Description |
---|---|
RedirectDataCreated (287) | OK state; Redirect user to the URL |
ProviderCommunicationErrorOccurred (233) | Error state; Communication error during payment finalization |
InitiateErrorReportedByProvider (4) | Error state; Technical error during payment initialization. See below table for list of error codes. |
InitiateRequestProviderCommunicationErrorOccurred (325) | Error state; Technical error during payment initialization |
BlockedByPaymentScoring (202) | Error state; Refused by the PXP Financial Risk System |
RefusedByPaymentScoring (121) | Error state; Refused by the PXP Financial Risk System |
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 (DepositedByProvider with payment account data):
<?xml version="1.0" encoding="utf-16"?>
<handlePaymentStateChangedNotificationRequest xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<payment xsi:type="paymentWithPaymentAccount">
<merchantID>B2BTestMerchant</merchantID>
<shopID>HipayGiropayDepositProviderTesting</shopID>
<paymentMethod>
<key>111</key>
<value>IdealDeposit</value>
</paymentMethod>
<merchantTransactionID>b70f1dee-9d61-4339-8f3b-9bd62c8t2</merchantTransactionID>
<paymentID>d544768a-8b92-4b98-8f95-d58dcfa92f7f</paymentID>
<userID>954abca7-fedc-40c6-9cf4-4c57fc</userID>
<paymentProvider>
<key>132</key>
<value>Hipay</value>
</paymentProvider>
<amount currencyCode="EUR">94.0000</amount>
<creationType>
<key>1</key>
<value>User</value>
</creationType>
<userIP>127.0.0.1</userIP>
<state>
<id>0d090f67-1bdb-4649-ac86-5c4a274b7389</id>
<definition>
<key>29</key>
<value>DepositedByProvider</value>
</definition>
<createdOn>2021-12-29T15:16:03.867</createdOn>
<paymentStateDetails xsi:nil="true" />
</state>
<isExecuted>true</isExecuted>
<baseAmount currencyCode="EUR">94.0000</baseAmount>
<paymentDetails>
<detail xsi:type="keyStringValuePair">
<key>ProviderExternalID</key>
<value>152697</value>
</detail>
<detail xsi:type="keyStringValuePair">
<key>ProviderTransactionID</key>
<value>800145032093</value>
</detail>
</paymentDetails>
<paymentAccount>
<paymentAccountID>e4469409-6c0d-4145-a508-9f32914a39d9</paymentAccountID>
<details>
<detail xsi:type="keyStringValuePair">
<key>IBAN</key>
<value>NL18ABNA0484869868</value>
</detail>
<detail xsi:type="keyStringValuePair">
<key>AccountOwner</key>
<value>Confidence Lead</value>
</detail>
<detail xsi:type="keyStringValuePair">
<key>SWIFT</key>
<value>ABNANL2A</value>
</detail>
</details>
</paymentAccount>
</payment>
</handlePaymentStateChangedNotificationRequest>
Example handlePaymentStateChangedNotificationRequest (DepositedByProvider without payment account:
<?xml version="1.0" encoding="utf-16"?>
<handlePaymentStateChangedNotificationRequest xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<payment xsi:type="paymentWithPaymentAccount">
<merchantID>B2BTestMerchant</merchantID>
<shopID>HipayIdealDeposit</shopID>
<paymentMethod>
<key>111</key>
<value>IdealDeposit</value>
</paymentMethod>
<merchantTransactionID>060bc646-2c59-4be2-8be8-a6a76518ed6d</merchantTransactionID>
<paymentID>03267f6a-a211-4e85-b465-bd0c34f8c7a0</paymentID>
<userID>954abca7-fedc-40c6-9cf4-4c57fc</userID>
<paymentProvider>
<key>132</key>
<value>Hipay</value>
</paymentProvider>
<amount currencyCode="EUR">94.0000</amount>
<creationType>
<key>1</key>
<value>User</value>
</creationType>
<userIP>127.0.0.1</userIP>
<state>
<id>c98bc4f7-d98e-4bfc-844b-03431076a3a5</id>
<definition>
<key>29</key>
<value>DepositedByProvider</value>
</definition>
<createdOn>2021-12-29T15:18:59.54</createdOn>
<paymentStateDetails xsi:nil="true" />
</state>
<isExecuted>true</isExecuted>
<baseAmount currencyCode="EUR">94.0000</baseAmount>
<paymentDetails>
<detail xsi:type="keyStringValuePair">
<key>ProviderExternalID</key>
<value>152699</value>
</detail>
<detail xsi:type="keyStringValuePair">
<key>ProviderTransactionID</key>
<value>388997073285</value>
</detail>
</paymentDetails>
</payment>
</handlePaymentStateChangedNotificationRequest>
Example handlePaymentStateChangedNotificationRequest (RefusedByProvider):
<?xml version="1.0" encoding="utf-16"?>
<handlePaymentStateChangedNotificationRequest xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<payment xsi:type="paymentWithPaymentAccount">
<merchantID>B2BTestMerchant</merchantID>
<shopID>HipayGiropayDepositProviderTesting</shopID>
<paymentMethod>
<key>111</key>
<value>IdealDeposit</value>
</paymentMethod>
<merchantTransactionID>b70f1dee-9d61-4339-8f3b-9bd62c8t3</merchantTransactionID>
<paymentID>c9d7b748-8cb4-496e-b2f7-fbb2e2f8ee86</paymentID>
<userID>954abca7-fedc-40c6-9cf4-4c57fc</userID>
<paymentProvider>
<key>132</key>
<value>Hipay</value>
</paymentProvider>
<amount currencyCode="EUR">94.0000</amount>
<creationType>
<key>1</key>
<value>User</value>
</creationType>
<userIP>127.0.0.1</userIP>
<state>
<id>e1c8dffc-2cab-4649-a331-2921e280d08f</id>
<definition>
<key>100</key>
<value>RefusedByProvider</value>
</definition>
<createdOn>2021-12-29T15:17:06.203</createdOn>
<paymentStateDetails>
<detail xsi:type="keyStringValuePair">
<key>ProviderResponseCode</key>
<value>4000001</value>
</detail>
<detail xsi:type="keyStringValuePair">
<key>ProviderResponseMessage</key>
<value>Declined</value>
</detail>
<detail xsi:type="keyIntValuePair">
<key>PaymentStateReasonID</key>
<value>1</value>
</detail>
</paymentStateDetails>
</state>
<isExecuted>false</isExecuted>
<baseAmount currencyCode="EUR">94.0000</baseAmount>
<paymentDetails>
<detail xsi:type="keyStringValuePair">
<key>ProviderExternalID</key>
<value>152698</value>
</detail>
<detail xsi:type="keyStringValuePair">
<key>ProviderTransactionID</key>
<value>800145032113</value>
</detail>
</paymentDetails>
</payment>
</handlePaymentStateChangedNotificationRequest>
Testing using the PXP Mock
The PXP test system provides a mock page for testing and simulating the provider behaviour.
This can be used for simulating certain test scenarios.
After sending the initiatePaymentRequest
, the URL returned will be a URL that redirects to the PXP mock page rather than the provider page.
Example Redirection URL to the PXP mock:
<paymentStateDetails>
<detail xsi:type="keyStringValuePair">
<key>RedirectionUrl</key>
<value>https://api.test.kalixa.com/WebMockProviders/HipayFrontend/Index?orderId=121725&paymentProduct=ideal</value>
</detail>
Testing against provider test system
This mock is provided by PXP test system. It is NOT testing against provider system!
If a merchant wants to test against the provider (Hipay) test system, this needs to be requested to be configured via the PXP Support team. But please note that the below scenarios cannot be simulated with the Provider test system, this is why PXP provides that mock page.
The mock page contains the below listed fields which can be used by the merchant test team to simulate the different cases:
- successful (DepositedByProvider)
- refused (RefusedByProvider)
Additionally if values are entered for the optional fields, they will be used and stored on the created IdealDeposit payment and returned to the merchant as part of the handlePaymentStateChangedNotificationRequest. Examples for those requests can be found in the Notifications chapter above.
Field in Mock | Value | Details |
---|---|---|
Password | mandatory do not change prefilled value, should remain with value signature as shown in the screenshot | |
IBAN | optional the field is prefilled with a valid IBAN, can be changed, but there will be validation applied in the backend so it must be a valid IBAN to simulate a real case applicable only if state "completed" is selected in the mock More Examples of the valid IBANs: NL91ABNA0417164300 NL18ABNA0484869868 | If a value is provided, then it will be returned in handlePaymentStateChangedNotificationRequest to the merchant as part of paymentAccount.detailskey = IBAN value = NL18ABNA0484869868 (for example )Note: this will only be provided if a valid IBAN was inserted on the mock page! |
SWIFT | optional applicable only if state "completed" is selected in the mock | If a value is provided, then it will be returned in handlePaymentStateChangedNotificationRequest to the merchant as part of paymentAccount.detailskey = SWIFT value = ABNANL2A (for example ) |
Account Holder Name | optional applicable only if state "completed" is selected in the mock | If a value is provided, then it will be returned in handlePaymentStateChangedNotificationRequest to the merchant as part of paymentAccount.detailskey = AccountOwner value = John Doe (for example ) |
Reason Code | optional applicable only if state "declined" is selected in the mock | In case of a RefusedByProvider scenario, if a value is provided, then it will be returned in handlePaymentStateChangedNotificationRequest to the merchant as part of paymentStateDetailskey = ProviderResponseCode value = 4000001 (for example ) |
Reason Message | optional applicable only if state "declined" is selected in the mock | In case of a RefusedByProvider scenario, if a value is provided, then it will be returned in handlePaymentStateChangedNotificationRequest to the merchant as part of paymentStateDetailskey = ProviderResponseMessage value = Declined (for example ) |
State | completed = will simulate a successful payment declined = will simulate a refused payment | handlePaymentStateChangedNotificationRequest to the merchant will showif "declined", then state.definition key = 100 value = RefusedByProvider if "completed", then state.definition key = 29 value = DepositedByProvider |
Details
IBAN, SWIFT and Account Holder Name are stored to the
paymentAccount
and returned to the merchant only for successful payments; because in case of a refused transaction, thepaymentAccount
is not created therefore those details cannot be storedReason Code and Reason Message are stored and returned to the merchant only for refused payments
Example screenshot of the Ideal Deposit mock page, simulating Provider Hipay
Updated over 2 years ago