Payr reloadable deposit (Cashflows)
Payr reloadable allows customers to re-use the same Payr card when they make a purchase. The customer workflow is much smoother, and customers benefit from a single account through which they can view transaction history and manage their own payments.
The following method IDs are covered in this section:
ID | Name | Credit/Debit State |
---|---|---|
308 | PayrReloadableDeposit | DepositedByProvider(29) |
Payment method interaction type: Redirection to External Payment Provider (see Interaction Types).
After choosing the payment method on the merchant's site the user is redirected to the provider's site to proceed with payment. When the payment is executed, Cashflows sends notification whether it's successful or refused.
Payment flow
Following diagrams describe Payr reloadable deposit:
Redirect Integration
Currently not supported.
Backend2BackendIntegration
The following table contains the fields to be sent in the initiatePaymentRequest
xml section:
key (value type, account type, required) | value |
---|---|
amount (long integer, required) | Deposit amount. Must be numeric in following format: 1000.00 |
The following table contains the fields to be sent in the initiatePaymentRequest.userData
xml section:
key (value type, account type, required) | value |
---|---|
street (string, required) | |
countryCode2 (string, required) | User's two-letter ISO 3166 country code |
dateOfBirth (datetime, required) | User's date of birth in following format: CCYY-MM-DDThh:mm:ss |
The following table contains the fields to be sent in the initiatePaymentRequest.specificPaymentData
xml section:
key (value type, account type, required) | value |
---|---|
SuccessPageUrl (string, required) | URL to which the user will be redirected if transaction is successful |
ErrorPageUrl (string, required) | URL to which the user will be redirected if transaction is unsuccessful |
CancelPageUrl (string, required) | URL to which the user will be redirected if transaction is cancelled |
The following table contains the fields to be sent in the initiatePaymentRequest.paymentAccountID
xml section:
key (value type, account type, required) | value |
---|---|
paymentAccountID (string, required) | initiatePaymentRequest for Payr reloadable card option should be created with unique account ID and it will be passed in PaymentAccountID element |
Scenario: Successful Payment, TopUp needed
Step 1: Initiate the Payment
<?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>PG</merchantID>
<shopID>ferrari</shopID>
<merchantTransactionID>cfdw2dc7-6ada-4260-94bf-3d3f234f</merchantTransactionID>
<paymentMethodID>308</paymentMethodID>
<amount currencyCode="EUR">12.45</amount>
<userID>55667788</userID>
<userData>
<address>
<street>Street Name</street>
<countryCode2>AT</countryCode2>
</address>
<dateOfBirth>1955-02-15T00:00:00</dateOfBirth>
</userData>
<userIP>127.0.0.1</userIP>
<userSessionID>7495c35f-3c55-4a08-a0a0-03f3ed917fbc</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>ErrorPageUrl</key>
<value>http://error/?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>LanguageCode</key>
<value>en</value>
</data>
</specificPaymentData>
<paymentAccountID>91CAADB8-99C9-4349-BB6B-62D6A367F712</paymentAccountID>
</initiatePaymentRequest>
<?xml version="1.0" encoding="utf-8"?>
<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>PG</merchantID>
<shopID>ferrari</shopID>
<paymentMethod>
<key>308</key>
<value>PayrReloadableDeposit</value>
</paymentMethod>
<merchantTransactionID>cfdw2dc7-6ada-4260-94bf-3d3f234f</merchantTransactionID>
<paymentID>e44e2046-6e43-4f2a-86b2-b3759a1a430c</paymentID>
<userID>55667788</userID>
<paymentProvider>
<key>150</key>
<value>Cashflows</value>
</paymentProvider>
<amount currencyCode="EUR">12.45</amount>
<creationType>
<key>1</key>
<value>User</value>
</creationType>
<userIP>127.0.0.1</userIP>
<state>
<id>cd3197f0-40d5-4dee-b727-8861f796d28a</id>
<definition>
<key>30</key>
<value>RedirectURLCreated</value>
</definition>
<createdOn>2018-04-17T14:27:21.084595Z</createdOn>
<description>http://dev.backend.cqrpayments.com/WebMockProviders/CashflowsFrontend/Index?ID=e44e2046-6e43-4f2a-86b2-b3759a1a430c</description>
<paymentStateDetails>
<detail xsi:type="keyStringValuePair">
<key>RedirectionUrl</key>
<value>http://dev.backend.cqrpayments.com/WebMockProviders/CashflowsFrontend/Index?ID=e44e2046-6e43-4f2a-86b2-b3759a1a430c</value>
</detail>
<detail xsi:type="keyStringValuePair">
<key>PaymentStateReasonID</key>
<value>1</value>
</detail>
</paymentStateDetails>
</state>
<isExecuted>false</isExecuted>
<baseAmount currencyCode="EUR">12.45</baseAmount>
<paymentDetails>
<detail xsi:type="keyStringValuePair">
<key>ProviderExternalID</key>
<value>e44e2046-6e43-4f2a-86b2-b3759a1a430c</value>
</detail>
</paymentDetails>
<paymentAccount>
<paymentAccountID>91CAADB8-99C9-4349-BB6B-62D6A367F712</paymentAccountID>
</paymentAccount>
</payment>
</initiatePaymentResponse>
Step 2: User is redirected to provider's website.
Step 3: CashFlows payment notification is processed, and a notification to the merchant is sent:
<?xml version="1.0" encoding="utf-8"?>
<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>PG</merchantID>
<shopID>ferrari</shopID>
<paymentMethod>
<key>308</key>
<value>PayrReloadableDeposit</value>
</paymentMethod>
<merchantTransactionID>cfdw2dc7-6ada-4260-94bf-3d3f234f</merchantTransactionID>
<paymentID>e44e2046-6e43-4f2a-86b2-b3759a1a430c</paymentID>
<userID>55667788</userID>
<paymentProvider>
<key>150</key>
<value>Cashflows</value>
</paymentProvider>
<amount currencyCode="EUR">12.45</amount>
<creationType>
<key>1</key>
<value>User</value>
</creationType>
<userIP>127.0.0.1</userIP>
<state>
<id>a8962b3b-65b5-4107-b5a1-726c4f2815ff</id>
<definition>
<key>29</key>
<value>DepositedByProvider</value>
</definition>
<createdOn>2018-04-18T11:40:44.967</createdOn>
<description>Successful</description>
<paymentStateDetails xsi:nil="true" />
</state>
<isExecuted>true</isExecuted>
<baseAmount currencyCode="EUR">12.45</baseAmount>
<paymentDetails>
<detail xsi:type="keyStringValuePair">
<key>ProviderExternalID</key>
<value>1fbd94d7-690f-471a-bea8-7fa7d4fbb74a</value>
</detail>
</paymentDetails>
<paymentAccount>
<paymentAccountID>91CAADB8-99C9-4349-BB6B-62D6A367F712</paymentAccountID>
</paymentAccount>
</payment>
</handlePaymentStateChangedNotificationRequest>
Test Data used in the above sample request/response:
field=value | result/output value |
---|---|
initiatePaymentRequest.merchantID = PGinitiatePaymentRequest.shopID = ferrariinitiatePaymentRequest.userID = 55667788initiatePaymentRequest.paymentAccountID = 91CAADB8-99C9-4349-BB6B-62D6A367F712initiatePaymentRequest.amount = 12.45initiatePaymentRequest.amount.currencyCode = EUR | Step 1: PXP Financial System responds synchronously with:initiatePaymentResponse.payment.state.definition.key = 30initiatePaymentResponse.payment.state.definition.value = RedirectURLCreatedStep 2: Then the user is redirected to providers site to finalise the payment Step 3: After that PXP Financial System sends a notification to the merchant: handlePaymentStateChangedNotificationRequest.state.definition.key = 29handlePaymentStateChangedNotificationRequest.state.definition.value = DepositedByProvider |
Scenario: Successful or Unsuccessful Payment, User has enough funds in Payr account to cover the payment:
Same as above initiatePaymentRequest, with some values replaced as per Test Data table below.
Same as above initiatePaymentResponse, with some values replaced as per Test Data table below.
Same as above handlePaymentStateChangedNotificationRequest, with some values replaced as per Test Data table below.
Test Data used in the above sample request/response/notification:
field=value | result/output value |
---|---|
initiatePaymentRequest.merchantID = PGinitiatePaymentRequest.shopID = ferrariinitiatePaymentRequest.userID = 55667788initiatePaymentRequest.paymentAccountID = 91CAADB8-99C9-4349-BB6B-62D6A367F712initiatePaymentRequest.amount = 33.01 initiatePaymentRequest.amount.currencyCode = EUR | initiatePaymentResponse.payment.state.definition.key = 29 initiatePaymentResponse.payment.state.definition.value = DepositedByProvider The payment is finalised and moved in state DepositedByProvider After that PXP Financial System sends a notification to the merchant: handlePaymentStateChangedNotificationRequest.state.definition.key = 29 handlePaymentStateChangedNotificationRequest.state.definition.value = DepositedByProvider |
initiatePaymentRequest.merchantID = PGinitiatePaymentRequest.shopID = ferrariinitiatePaymentRequest.userID = 55667788initiatePaymentRequest.paymentAccountID = 91CAADB8-99C9-4349-BB6B-62D6A367F712initiatePaymentRequest.amount = 35.01 initiatePaymentRequest.amount.currencyCode = EUR | initiatePaymentResponse.payment.state.definition.key = 100 initiatePaymentResponse.payment.state.definition.value = RefusedByProvider After that PXP Financial System sends a notification to the merchant: handlePaymentStateChangedNotificationRequest.state.definition.key = 100 handlePaymentStateChangedNotificationRequest.state.definition.value = RefusedByProvider |
Other Scenarios
Use the below test data to simulate the following alternative scenarios:
scenario | field=value | result/output value |
---|---|---|
Unsuccessful payment, user is redirected to Payr but payment is refused | initiatePaymentRequest.amount = 16.01 initiatePaymentRequest.amount.currencyCode = EUR | initiatePaymentResponse.payment.state.definition.key = 100 initiatePaymentResponse.payment.state.definition.value = RefusedByProvider handlePaymentStateChangedNotificationRequest.state.definition.key = 100 handlePaymentStateChangedNotificationRequest.state.definition.value = RefusedByProvider |
Unsuccessful payment, user is redirected to Payr but aborted the process of purchasing an iCheque product or aborted the process after purchasing an iCheque product | initiatePaymentRequest.amount = 16.02 or 16.04 initiatePaymentRequest.amount.currencyCode = EUR | initiatePaymentResponse.payment.state.definition.key = 101 initiatePaymentResponse.payment.state.definition.value = AbortedByCustomer handlePaymentStateChangedNotificationRequest.state.definition.key = 101 handlePaymentStateChangedNotificationRequest.state.definition.value = AbortedByCustomer |
Unsuccessful payment, user is redirected to Payr but an error occurred during the transaction | initiatePaymentRequest.amount = 16.03 initiatePaymentRequest.amount.currencyCode = EUR | initiatePaymentResponse.payment.state.definition.key = 152 initiatePaymentResponse.payment.state.definition.value = DepositErrorReportedByProvider handlePaymentStateChangedNotificationRequest.state.definition.key = 152 handlePaymentStateChangedNotificationRequest.state.definition.value = DepositErrorReportedByProvider |
initiatePaymentResponse and handlePaymentStateChangedNotificationRequest states:
State | Description |
---|---|
RedirectURLCreated (30) | User is redirected to providers site to finalise the payment Only returned in initiatePaymentResponse. |
DepositedByProvider (29) | The payment is finalised and moved in state DepositedByProvider |
RefusedByProvider (100) | Unsuccessful transaction reported by provider |
DepositErrorReportedByProvider (152) | Unsuccessful transaction due to redirect URL failure reported by provider |
AbortedByCustomer | Unsuccessful transaction due to customer cancellation Only returned in handlePaymentStateChangedNotificationRequest. |
For more information on notifications see PaymentStateChangedNotification.
List of CashFlows response codes:
https://www.cashflows.com/response-codes
State diagrams:
Diagrams below follows transaction states of Payr reloadable deposit
Updated almost 6 years ago