BankTransferWithdrawal (Callpay)
The BankTransferWithdrawal method supports real time EFT bank transfer payouts through provider Callpay in South Africa.
The following method IDs are covered in this section:
ID | Name | Credit/Debit State |
---|---|---|
24 | BankTransferWithdrawal | WithdrawnByProvider (20) |
Payment method interaction type: Redirection to External Payment Provider (see Interaction Types).
Supported currency: only ZAR
Flow
In order to test error states, please refer to the testing section below.
Redirect Integration
Currently not supported.
Backend2BackendIntegration
The following parameters can be provided in initiatePaymentRequest.specificPaymentAccountData:
key (value type, account type, required) | value |
---|---|
accountOwner (string, required) | Bank account owner |
bankname (string, required) | Bank name. Valid names include ABSA, Nedbank, Capitec, FNB, Standard, Investec |
BankCountryCode2 (string, required) | ZA by default |
branchcode (string, required) | fnb => 250655 absa => 632005 standard => 051001 nedbank => 198765 capitec => 470010 investec => 580105 mercantile => 450105 bidvest => 462005 tyme => 678910 windhoek => 483872 afribank => 430000 oldmutual => 462005 discovery => 679000 grindrod => 584000 ubank => 431010 imperial => 39001 firstrand => 201419 hsbc => 587000 sasfin => 683000 access => 410506 stdchartered => 730020 Data passed in this field will not be validated by PXP, but it is validated by Callpay. Please contact Callpay for details. |
accountnumber (string, required) | account number |
accountType (string, required/optional | Account type may be required for some banks. Possible values include cheque, savings, transmission. Subject to change, please contact Callpay. |
Data sent in below request are validated by provider Callpay.
Usage of payment account
A mix of paymentaccountID and paymentaccountdetails is not allowed.
When the payment account has missing payment account details, the merchant is responsible to collect those and pass them in specificPaymentAccountData, but the payment account should not be passed.
Communication Error
If a bank transfer withdrawal payment goes to communication error state, the payment has to be checked manually in the callpay backoffice. A lookup API has not be provided by Callpay.
Example initiatePaymentRequest - with account details:
<initiatePaymentRequest xmlns=http://www.cqrpayments.com/PaymentProcessing xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xmlns:xsd=http://www.w3.org/2001/XMLSchema>
<merchantID>B2BTestMerchant</merchantID>
<shopID>CallpayMockShop</shopID>
<merchantTransactionID>MP_Callpay_151</merchantTransactionID>
<paymentMethodID>24</paymentMethodID>
<amount currencyCode="zar">22.5</amount>
<userID>MaxCallpay002</userID>
<userData>
<username>MaxCallpay001</username>
<firstname>John</firstname>
<lastname>Doe</lastname>
<email>[email protected]</email>
<dateOfBirth>2000-01-01T00:00:00</dateOfBirth>
</userData>
<userIP>80.121.151.158</userIP>
<userSessionID>t02d03hwaxkrl5gmabcypwmm</userSessionID>
<creationTypeID>1</creationTypeID>
<specificPaymentData>
<data xsi:type="keyStringValuePair">
<key>PaymentDescription</key>
<value>test</value>
</data>
</specificPaymentData>
<paymentAccount>
<specificPaymentAccountData>
<data xsi:type="keyStringValuePair">
<key>accountowner</key>
<value>New holder</value>
</data>
<data xsi:type="keyStringValuePair">
<key>bankname</key>
<value>SomeBank</value>
</data>
<data xsi:type="keyStringValuePair">
<key>BankCountryCode2</key>
<value>AT</value>
</data>
<data xsi:type="keyStringValuePair">
<key>BankCode</key>
<value>12311</value>
</data>
<data xsi:type="keyStringValuePair">
<key>accountnumber</key>
<value>11223344556677</value>
</data>
<data xsi:type="keyStringValuePair">
<key>AccountType</key>
<value>current</value>
</data>
</specificPaymentAccountData>
</paymentAccount>
</initiatePaymentRequest>
Example initiatePaymentResponse with paymentaccount and account details:
<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>B2BTestMerchant</merchantID>
<shopID>CallpayMockShop</shopID>
<paymentMethod>
<key>24</key>
<value>BankTransferWithdrawal</value>
</paymentMethod>
<merchantTransactionID>MP_Callpay_150</merchantTransactionID>
<paymentID>3bdc9e20-5af2-406e-9dbf-7580f5eadd2c</paymentID>
<userID>MaxCallpay002</userID>
<paymentProvider>
<key>206</key>
<value>Callpay</value>
</paymentProvider>
<amount currencyCode="ZAR">22.5</amount>
<creationType>
<key>1</key>
<value>User</value>
</creationType>
<userIP>80.121.151.158</userIP>
<state>
<id>dd31c59f-4b4e-4c08-abf6-1c24782722db</id>
<definition>
<key>20</key>
<value>WithdrawnByProvider</value>
</definition>
<createdOn>2023-08-31T08:59:49.1429904Z</createdOn>
<paymentStateDetails xsi:nil="true"></paymentStateDetails>
</state>
<isExecuted>true</isExecuted>
<baseAmount currencyCode="EUR">1.7</baseAmount>
<paymentDetails>
<detail xsi:type="keyStringValuePair">
<key>ExternalReference</key>
<value>1435466002</value>
</detail>
<detail xsi:type="keyStringValuePair">
<key>ProviderTransactionID</key>
<value>1435466002384961</value>
</detail>
<detail xsi:type="keyStringValuePair">
<key>ProviderExternalID</key>
<value>14069</value>
</detail>
</paymentDetails>
<paymentAccount>
<paymentAccountID>ff4ffdc6-25d8-4b54-8f83-a8c6aad7618a</paymentAccountID>
<details>
<detail xsi:type="keyStringValuePair">
<key>AccountNumber</key>
<value>11223344556677</value>
</detail>
<detail xsi:type="keyStringValuePair">
<key>BankName</key>
<value>SomeBank</value>
</detail>
<detail xsi:type="keyStringValuePair">
<key>BankCountryCode2</key>
<value>ZA</value>
</detail>
<detail xsi:type="keyStringValuePair">
<key>AccountOwner</key>
<value>test holder</value>
</detail>
<detail xsi:type="keyStringValuePair">
<key>AccountType</key>
<value>cheque</value>
</detail>
<detail xsi:type="keyStringValuePair">
<key>BankCode</key>
<value>12311</value>
</detail>
</details>
</paymentAccount>
</payment>
</initiatePaymentResponse>
On payments going to state WithdrawnByProvider PXP returns a payment account in the initiatePaymentResponse. The payment account can be used for future withdrawals.
A payment account is only returned if the payment data was validated successfully at provider Callpay.
Example initiatePaymentResponse with error RefusedByProvider (CDV invalid):
<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>B2BTestMerchant</merchantID>
<shopID>CallpayMockShop</shopID>
<paymentMethod>
<key>24</key>
<value>BankTransferWithdrawal</value>
</paymentMethod>
<merchantTransactionID>MP_Callpay_152</merchantTransactionID>
<paymentID>413407de-199a-4de0-8f99-2f2999d0c358</paymentID>
<userID>MaxCallpay002</userID>
<paymentProvider>
<key>206</key>
<value>Callpay</value>
</paymentProvider>
<amount currencyCode="ZAR">22.11</amount>
<creationType>
<key>1</key>
<value>User</value>
</creationType>
<userIP>80.121.151.158</userIP>
<state>
<id>2bcf344f-6b58-434d-8f0b-f3eab67e43e8</id>
<definition>
<key>100</key>
<value>RefusedByProvider</value>
</definition>
<createdOn>2023-08-31T11:40:38.5489952Z</createdOn>
<paymentStateDetails>
<detail xsi:type="keyStringValuePair">
<key>ProviderResponseMessage</key>
<value>CDV invalid</value>
</detail>
<detail xsi:type="keyStringValuePair">
<key>PaymentStateReasonID</key>
<value>1</value>
</detail>
</paymentStateDetails>
</state>
<isExecuted>false</isExecuted>
<baseAmount currencyCode="EUR">1.67</baseAmount>
<paymentDetails>
<detail xsi:type="keyStringValuePair">
<key>ProviderTransactionID</key>
<value>4041546109969239</value>
</detail>
<detail xsi:type="keyStringValuePair">
<key>ProviderExternalID</key>
<value>14085</value>
</detail>
</paymentDetails>
</payment>
</initiatePaymentResponse>
Payments will go to RefusedByProvider as the data is validated by Callpay.
On an error PXP returns the detail ProviderResponseMessage.
Example initiatePaymentResponse with error RefusedByProvider (ERROR in transaction not present):
<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>B2BTestMerchant</merchantID>
<shopID>CallpayMockShop</shopID>
<paymentMethod>
<key>24</key>
<value>BankTransferWithdrawal</value>
</paymentMethod>
<merchantTransactionID>MP_Callpay_153</merchantTransactionID>
<paymentID>b793bbf0-4e74-48d0-bb61-bf636af992b6</paymentID>
<userID>MaxCallpay002</userID>
<paymentProvider>
<key>206</key>
<value>Callpay</value>
</paymentProvider>
<amount currencyCode="ZAR">22.12</amount>
<creationType>
<key>1</key>
<value>User</value>
</creationType>
<userIP>80.121.151.158</userIP>
<state>
<id>f27d13dd-f167-430c-b3b3-9a5a31286eb3</id>
<definition>
<key>100</key>
<value>RefusedByProvider</value>
</definition>
<createdOn>2023-08-31T11:44:16.7097838Z</createdOn>
<paymentStateDetails>
<detail xsi:type="keyStringValuePair">
<key>ProviderResponseMessage</key>
<value>ERROR in transaction not present</value>
</detail>
<detail xsi:type="keyStringValuePair">
<key>PaymentStateReasonID</key>
<value>1</value>
</detail>
</paymentStateDetails>
</state>
<isExecuted>false</isExecuted>
<baseAmount currencyCode="EUR">1.67</baseAmount>
<paymentDetails>
<detail xsi:type="keyStringValuePair">
<key>ProviderTransactionID</key>
<value>5657036846144643</value>
</detail>
<detail xsi:type="keyStringValuePair">
<key>ProviderExternalID</key>
<value>14086</value>
</detail>
</paymentDetails>
</payment>
</initiatePaymentResponse>
The payment will go to state WithdrawErrorReportedByProvider if the amount returned does not match with the amount of the payment.
Example initiatePaymentResponse with error WithdrawErrorReportedByProvider:
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>B2BTestMerchant</merchantID>
<shopID>CallpayMockShop</shopID>
<paymentMethod>
<key>24</key>
<value>BankTransferWithdrawal</value>
</paymentMethod>
<merchantTransactionID>MP_Callpay_154</merchantTransactionID>
<paymentID>1702e9af-7453-4154-a5f8-9b1ed71f3523</paymentID>
<userID>MaxCallpay002</userID>
<paymentProvider>
<key>206</key>
<value>Callpay</value>
</paymentProvider>
<amount currencyCode="ZAR">22.13</amount>
<creationType>
<key>1</key>
<value>User</value>
</creationType>
<userIP>80.121.151.158</userIP>
<state>
<id>d612ad6b-c4c9-4985-bc45-2284b6c5e7a6</id>
<definition>
<key>21</key>
<value>WithdrawErrorReportedByProvider</value>
</definition>
<createdOn>2023-08-31T11:45:15.492238Z</createdOn>
<description>Amount returned by the provider is not equal to ChannelAmount of the payment</description>
<paymentStateDetails>
<detail xsi:type="keyStringValuePair">
<key>PaymentStateReasonID</key>
<value>1</value>
</detail>
</paymentStateDetails>
</state>
<isExecuted>false</isExecuted>
<baseAmount currencyCode="EUR">1.67</baseAmount>
<paymentDetails>
<detail xsi:type="keyStringValuePair">
<key>ProviderTransactionID</key>
<value>2008013650358952</value>
</detail>
<detail xsi:type="keyStringValuePair">
<key>ProviderExternalID</key>
<value>14087</value>
</detail>
</paymentDetails>
<paymentAccount>
<paymentAccountID>ff4ffdc6-25d8-4b54-8f83-a8c6aad7618a</paymentAccountID>
<details>
<detail xsi:type="keyStringValuePair">
<key>AccountNumber</key>
<value>11223344556677</value>
</detail>
<detail xsi:type="keyStringValuePair">
<key>BankName</key>
<value>SomeBank</value>
</detail>
<detail xsi:type="keyStringValuePair">
<key>BankCountryCode2</key>
<value>ZA</value>
</detail>
<detail xsi:type="keyStringValuePair">
<key>AccountOwner</key>
<value>test holder</value>
</detail>
<detail xsi:type="keyStringValuePair">
<key>AccountType</key>
<value>cheque</value>
</detail>
<detail xsi:type="keyStringValuePair">
<key>BankCode</key>
<value>12311</value>
</detail>
</details>
</paymentAccount>
</payment>
</initiatePaymentResponse>
The payment will go to state WithdrawCommunicationErrorOccurred if there is no response or an empty response from provider.
Example initiatePaymentResponse with error WithdrawCommunicationErrorOccurred (empty response):
<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>B2BTestMerchant</merchantID>
<shopID>CallpayMockShop</shopID>
<paymentMethod>
<key>24</key>
<value>BankTransferWithdrawal</value>
</paymentMethod>
<merchantTransactionID>MP_Callpay_155</merchantTransactionID>
<paymentID>219ffcff-847f-4499-bf41-2ca0f59f7904</paymentID>
<userID>MaxCallpay002</userID>
<paymentProvider>
<key>206</key>
<value>Callpay</value>
</paymentProvider>
<amount currencyCode="ZAR">22.14</amount>
<creationType>
<key>1</key>
<value>User</value>
</creationType>
<userIP>80.121.151.158</userIP>
<state>
<id>00199573-c1ad-4066-a71b-b33e4216a885</id>
<definition>
<key>576</key>
<value>WithdrawCommunicationErrorOccurred</value>
</definition>
<createdOn>2023-08-31T11:54:03.4094231Z</createdOn>
<description>Empty response</description>
<paymentStateDetails>
<detail xsi:type="keyStringValuePair">
<key>PaymentStateReasonID</key>
<value>1</value>
</detail>
</paymentStateDetails>
</state>
<isExecuted>false</isExecuted>
<baseAmount currencyCode="EUR">1.68</baseAmount>
<paymentDetails>
<detail xsi:type="keyStringValuePair">
<key>ProviderExternalID</key>
<value>14088</value>
</detail>
</paymentDetails>
<paymentAccount>
<paymentAccountID>fc2a6a25-c1e7-4469-bf41-5943e1ac1123</paymentAccountID>
<details>
<detail xsi:type="keyStringValuePair">
<key>BankName</key>
<value>SomeBank</value>
</detail>
<detail xsi:type="keyStringValuePair">
<key>BankCountryCode2</key>
<value>AT</value>
</detail>
<detail xsi:type="keyStringValuePair">
<key>AccountOwner</key>
<value>New holder</value>
</detail>
<detail xsi:type="keyStringValuePair">
<key>AccountType</key>
<value>current</value>
</detail>
</details>
</paymentAccount>
</payment>
</initiatePaymentResponse>
Note: the payment account is the Example initiatePaymentResponse with error WithdrawCommunicationErrorOccurred (An internal server error occurred):
<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>B2BTestMerchant</merchantID>
<shopID>CallpayMockShop</shopID>
<paymentMethod>
<key>24</key>
<value>BankTransferWithdrawal</value>
</paymentMethod>
<merchantTransactionID>MP_Callpay_156</merchantTransactionID>
<paymentID>fdc2f95b-d974-4266-a1ce-1f00626f5982</paymentID>
<userID>MaxCallpay002</userID>
<paymentProvider>
<key>206</key>
<value>Callpay</value>
</paymentProvider>
<amount currencyCode="ZAR">22.15</amount>
<creationType>
<key>1</key>
<value>User</value>
</creationType>
<userIP>80.121.151.158</userIP>
<state>
<id>9e2bbfad-f898-40c7-8278-8ff278fa8aa5</id>
<definition>
<key>576</key>
<value>WithdrawCommunicationErrorOccurred</value>
</definition>
<createdOn>2023-08-31T11:56:24.1935839Z</createdOn>
<paymentStateDetails>
<detail xsi:type="keyStringValuePair">
<key>ProviderErrorResponseCode</key>
<value>0</value>
</detail>
<detail xsi:type="keyStringValuePair">
<key>ProviderErrorResponseMessage</key>
<value>An internal server error occurred.</value>
</detail>
<detail xsi:type="keyStringValuePair">
<key>PaymentStateReasonID</key>
<value>1</value>
</detail>
</paymentStateDetails>
</state>
<isExecuted>false</isExecuted>
<baseAmount currencyCode="EUR">1.68</baseAmount>
<paymentDetails>
<detail xsi:type="keyStringValuePair">
<key>ProviderExternalID</key>
<value>14089</value>
</detail>
</paymentDetails>
<paymentAccount>
<paymentAccountID>fc2a6a25-c1e7-4469-bf41-5943e1ac1123</paymentAccountID>
<details>
<detail xsi:type="keyStringValuePair">
<key>BankName</key>
<value>SomeBank</value>
</detail>
<detail xsi:type="keyStringValuePair">
<key>BankCountryCode2</key>
<value>AT</value>
</detail>
<detail xsi:type="keyStringValuePair">
<key>AccountOwner</key>
<value>New holder</value>
</detail>
<detail xsi:type="keyStringValuePair">
<key>AccountType</key>
<value>current</value>
</detail>
</details>
</paymentAccount>
</payment>
</initiatePaymentResponse>
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 (WithdrawnByProvider):
<?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
xmlns=http://www.cqrpayments.com/PaymentProcessing xsi:type="paymentWithPaymentAccount">
<merchantID>B2BTestMerchant</merchantID>
<shopID>CallpayMockShop</shopID>
<paymentMethod>
<key>24</key>
<value>BankTransferWithdrawal</value>
</paymentMethod>
<merchantTransactionID>hc-20230315-160711</merchantTransactionID>
<paymentID>ba96e6ba-afa5-4e4e-a59c-b0e1f8447ab3</paymentID>
<userID>CallpayExistingBAccMissingBC</userID>
<paymentProvider>
<key>206</key>
<value>Callpay</value>
</paymentProvider>
<amount currencyCode="ZAR">1.0000</amount>
<creationType>
<key>1</key>
<value>User</value>
</creationType>
<userIP>80.121.151.158</userIP>
<state>
<id>d507f0ea-b2fb-4500-a836-46df8e5625b3</id>
<definition>
<key>20</key>
<value>WithdrawnByProvider</value>
</definition>
<createdOn>2023-03-15T15:07:29.85</createdOn>
<paymentStateDetails xsi:nil="true" />
</state>
<isExecuted>true</isExecuted>
<baseAmount currencyCode="EUR">0.0800</baseAmount>
<paymentDetails>
<detail xsi:type="keyStringValuePair">
<key>ProviderExternalID</key>
<value>919</value>
</detail>
<detail xsi:type="keyStringValuePair">
<key>ProviderTransactionID</key>
<value>0894681467015093</value>
</detail>
</paymentDetails>
<paymentAccount>
<paymentAccountID>2683400c-728f-4312-af33-e57434a15ab6</paymentAccountID>
</paymentAccount>
</payment>
</handlePaymentStateChangedNotificationRequest>
BankTransfer Withdrawal Return
A banktransferwithdrawal return is created when a return webhook is received from Callpay.
The paymentID is copied from the original payment.
PXP is processing only 1 return - it is highly unlikely that more than one return webhook is received from Callpay.
<<?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 xmlns="http://www.cqrpayments.com/PaymentProcessing"
xsi:type="paymentWithPaymentAccount">
<merchantID>B2BTestMerchant</merchantID>
<shopID>CallpayMockShop</shopID>
<paymentMethod>
<key>240</key>
<value>BankTransferWithdrawalReturn</value>
</paymentMethod>
<merchantTransactionID>de9c6305-c2c2-438d-a1a6-c840d79d6bee</merchantTransactionID>
<paymentID>87098268-6753-481f-a53b-58735a8065fc</paymentID>
<userID>a5dc645d-428d-4d87-a573-f5e61d</userID>
<paymentProvider>
<key>206</key>
<value>Callpay</value>
</paymentProvider>
<amount currencyCode="ZAR">20.5500</amount>
<creationType>
<key>6</key>
<value>Provider</value>
</creationType>
<state>
<id>5b754d2c-def2-482f-b3e5-f4586d7a2c32</id>
<definition>
<key>279</key>
<value>ReturnedByProvider</value>
</definition>
<createdOn>2023-03-24T16:21:28.723</createdOn>
<paymentStateDetails>
<detail xsi:type="keyStringValuePair">
<key>ProviderResponseMessage</key>
<value>Incorrect Account Code</value>
</detail>
</paymentStateDetails>
</state>
<isExecuted>true</isExecuted>
<baseAmount currencyCode="EUR">1.5500</baseAmount>
<paymentDetails>
<detail xsi:type="keyStringValuePair">
<key>ProviderExternalID</key>
<value>9cba879e-298a-487d-ac87-591a6cc42897</value>
</detail>
<detail xsi:type="keyStringValuePair">
<key>OriginalPaymentID</key>
<value>ceb5d0f1-d4b9-4041-8d29-dcd58ea7262d</value>
</detail>
<detail xsi:type="keyStringValuePair">
<key>OriginalPaymentMerchantTransactionID</key>
<value>de9c6305-c2c2-438d-a1a6-c840d79d6bee</value>
</detail>
<detail xsi:type="keyStringValuePair">
<key>OriginalPaymentMethodID</key>
<value>24</value>
</detail>
<detail xsi:type="keyStringValuePair">
<key>OriginalPaymentMethodName</key>
<value>BankTransferWithdrawal</value>
</detail>
</paymentDetails>
<paymentAccount>
<paymentAccountID>8140c561-476d-4fb0-9062-9268e87d0294</paymentAccountID>
</paymentAccount>
</payment>
</handlePaymentStateChangedNotificationRequest>
merchantID>B2BTestMerchant</merchantID>
<shopID>CallpayMockShop</shopID>
<paymentMethod>
<key>240</key>
<value>BankTransferWithdrawalReturn</value>
</paymentMethod>
<merchantTransactionID>de9c6305-c2c2-438d-a1a6-c840d79d6bee</merchantTransactionID>
<paymentID>87098268-6753-481f-a53b-58735a8065fc</paymentID>
<userID>a5dc645d-428d-4d87-a573-f5e61d</userID>
<paymentProvider>
<key>206</key>
<value>Callpay</value>
</paymentProvider>
<amount currencyCode="ZAR">20.5500</amount>
<creationType>
<key>6</key>
<value>Provider</value>
</creationType>
<state>
<id>5b754d2c-def2-482f-b3e5-f4586d7a2c32</id>
<definition>
<key>279</key>
<value>ReturnedByProvider</value>
</definition>
<createdOn>2023-03-24T16:21:28.723</createdOn>
<paymentStateDetails>
<detail xsi:type="keyStringValuePair">
<key>ProviderResponseMessage</key>
<value>Incorrect Account Code</value>
</detail>
</paymentStateDetails>
</state>
<isExecuted>true</isExecuted>
<baseAmount currencyCode="EUR">1.5500</baseAmount>
<paymentDetails>
<detail xsi:type="keyStringValuePair">
<key>ProviderExternalID</key>
<value>9cba879e-298a-487d-ac87-591a6cc42897</value>
</detail>
<detail xsi:type="keyStringValuePair">
<key>OriginalPaymentID</key>
<value>ceb5d0f1-d4b9-4041-8d29-dcd58ea7262d</value>
</detail>
<detail xsi:type="keyStringValuePair">
<key>OriginalPaymentMerchantTransactionID</key>
<value>de9c6305-c2c2-438d-a1a6-c840d79d6bee</value>
</detail>
<detail xsi:type="keyStringValuePair">
<key>OriginalPaymentMethodID</key>
<value>24</value>
</detail>
<detail xsi:type="keyStringValuePair">
<key>OriginalPaymentMethodName</key>
<value>BankTransferWithdrawal</value>
</detail>
</paymentDetails>
<paymentAccount>
<paymentAccountID>8140c561-476d-4fb0-9062-9268e87d0294</paymentAccountID>
</paymentAccount>
</payment>
</handlePaymentStateChangedNotificationRequest>
Provider Testing
Provider testing of bank transfer withdrawal returns is not supported. Only mock testing is possible.
Mock Testing
The states RefusedByProvider, WithdrawErrorReportedByProvider and WithdrawCommunicationErrorOccurred may be tested with the merchant mock - see the instructions below.
All other states should be tested with provider.
22.11 => RefusedByProvider (CDV invalid)
22.12 => RefusedByProvider (ERROR in transaction not present)
22.13 => WithdrawErrorReportedByProvider (Amount returned by provider not equal to ChannelAmount of the payment)
22.14 => WithdrawCommunicationErrorOccurred (empty response)
22.15 => WithdrawCommunicationErrorOccurred (An internal server error occurred)
Updated about 1 year ago