Paysafecard Deposit

Paysafecard Deposit is a popular voucher payment method allowing user to purchase paysafecard 16-digit PINs at various outlets.

In order to improve usability and to meet KYC requirements in various countries, besides the option to only enter the PIN(s), Paysafecard also offers a my paysafecard account - both options are selected only after the redirect to Paysafecard.

The following method IDs are covered in this section:

ID

Name

Credit/Debit State

19

PaysafecardDeposit

CapturedByProvider

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

The following Paysafecard payment methods are available in the PXP Financial payment service:

Payment Method

Description

Paysafecard Deposit* withprovider Paysafecard**

The old implementation of Paysafecard is no longer in use.

Paysafecard Deposit with *provider PaysafecardSOPG**

This implementation is utilizing the (current) Paysafecard SOPG interface.

Paysafecard Withdrawal

The withdrawal option requires that the customer uses a my paysafecard account.

Paysafecard Direct Deposit

The Paysafecard Direct Deposit option allows to enter the PIN at the merchant´s website and complete the payment without redirection to Paysafecard. This payment option is being phased out and is no longer available for new merchants.

Redirect Integration

Paysafecard is supported.

Backend2BackendIntegration

The following description applies to PaysafecardDeposit with provider Paysafecard SOPG.

The following parameters can be provided in initiatePaymentRequest.specificPaymentData:

key (value type, account type, required)

value

SuccessPageURL (string)

The URL to redirect user in case of a successful payment

  • ErrorPageUrl** (string*)

The URL to redirect user in case of unsuccessful payment

  • MerchantNotificationUrl** (string*)

Either SuccessPageURL/ErrorPageURL is selected, or MerchantNotificationURL is used if provided

  • UserID** (string*, required)

UserID of merchant´s user. The username should not be used.

  • UserIP** (string*, required)

IP address of the user.

  • ShouldRequestKYC** (string*, optional)

When the merchant sends true, the payment is extending with the KYC flow. This flow can only be used when activated by Paysafe. See the section further below for details.

Example initiatePaymentRequest:

<?xml version="1.0" encoding="utf-8"?>
<initiatePaymentRequest xmlns="http://www.cqrpayments.com/PaymentProcessing">
	<merchantID>AcceptDemo</merchantID>
	<shopID>AcceptDemo</shopID>
	<merchantTransactionID>testPSCAD00001085_06</merchantTransactionID>
	<paymentMethodID>19</paymentMethodID>
	<amount currencyCode="EUR">50.00</amount>
	<userID>48722522</userID>
	        <userData>
                <username>accept308</username>
                <firstname>John</firstname>
                <lastname>Doe</lastname>
                <languageCode>en</languageCode>
                <email>[email protected]</email>
                <address>
                        <street>Address2308</street>
                        <houseName>Address308</houseName>
                        <postalCode>447474</postalCode>
                        <state>State308</state>
                        <countryCode2>DE</countryCode2>
                </address>
                <dateOfBirth>1941-01-03T00:00:00</dateOfBirth>
        </userData>

	<userIP>127.0.0.1</userIP>
	<userSessionID>07430107032016axcvED5CPaQ</userSessionID>
	<creationTypeID>1</creationTypeID>
	<specificPaymentData>
        <data xsi:type="keyStringValuePair">
               <key>SuccessPageUrl</key>
               <value>https://example.com/?status=success&amp;txnid=14573330244299428</value>
        </data>
        <data xsi:type="keyStringValuePair">
               <key>ErrorPageUrl</key>
               <value>https://example.com/?status=fail&amp;txnid=14573330244299428</value>
        </data>
        <data xsi:type="keyStringValuePair">
               <key>MerchantNotificationUrl</key>
               <value>https://example.com/paysafecardRedirectBack.action</value>
        </data>
        </specificPaymentData>
</initiatePaymentRequest>

Example initiatePaymentRequest (with KYC flow):

<?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>PaysafecardSOPGShouldRequestKYCBDD</shopID>
       <merchantTransactionID>06129a57-d536-4bef-b9dc-f84efc893583</merchantTransactionID>
       <paymentMethodID>19</paymentMethodID>
       <amount currencyCode="EUR">21</amount>
<userID>PaysafecardSOPGShouldRequestKYCBDD</userID>
       <userData>
       <username>PaysafecardSOPGShouldRequestKYCBDD</username>
       </userData>
       <userIP>127.0.0.1</userIP>
       <userSessionID>32e4937d-7d93-477f-aaf2-52a24a4a9c9c</userSessionID>
       <creationTypeID>1</creationTypeID>
       <specificPaymentData>
              <data xsi:type="keyStringValuePair">
                    <key>SuccessPageUrl</key>
                    <value>http://accept/</value>
              </data>
              <data xsi:type="keyStringValuePair">
                    <key>ErrorPageUrl</key>
                    <value>http://decline/</value>
              </data>
              <data xsi:type="keyStringValuePair">
                     <key>MerchantNotificationUrl</key>
                    <value />
              </data>
              <data xsi:type="keyStringValuePair">
                    <key>LanguageCode</key>
                    <value>de</value>
              </data>
              <data xsi:type="keyBooleanValuePair">
                    <key>ShouldRequestKYC</key>
                    <value>true</value>
              </data>
       </specificPaymentData>
</initiatePaymentRequest>

Example initiatePaymentResponse:

<initiatePaymentResponse xmlns="http://www.cqrpayments.com/PaymentProcessing">
         <payment xsi:type="paymentWithPaymentAccount" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
            <merchantID>PG</merchantID>
            <shopID>releaseb</shopID>
            <paymentMethod>
               <key>19</key>
               <value>Paysafecard Deposit</value>
            </paymentMethod>
            <merchantTransactionID>testPSCAD00001085_06</merchantTransactionID>
            <paymentID>3603bd0e-5449-4ced-ba01-5eadf858e741</paymentID>
            <userID>48722522</userID>
            <paymentProvider>
               <key>118</key>
               <value>PaysafecardSOPG</value>
            </paymentProvider>
            <amount currencyCode="EUR">50.00</amount>
            <creationType>
               <key>1</key>
               <value>User</value>
            </creationType>
            <userIP>127.0.0.1</userIP>
            <state>
               <id>e468b1ea-5771-4bda-bc9e-3434838ef29b</id>
               <definition>
                  <key>30</key>
                  <value>RedirectURLCreated</value>
               </definition>
               <createdOn>2017-05-15T16:28:42.3064018Z</createdOn>
               <description>https://api.test.kalixa.com/WebMockProviders/PaysafecardSOPG.aspx?mid=1000001234&amp;mtid=3603bd0e-5449-4ced-ba01-5eadf858e741&amp;amount=50.00&amp;currency=EUR</description>
               <paymentStateDetails>
                  <detail xsi:type="keyStringValuePair">
                     <key>RedirectionUrl</key>
                     <value>https://api.test.kalixa.com/WebMockProviders/PaysafecardSOPG.aspx?mid=1000001234&amp;mtid=3603bd0e-5449-4ced-ba01-5eadf858e741&amp;amount=50.00&amp;currency=EUR</value>
                  </detail>
                  <detail xsi:type="keyStringValuePair">
                     <key>PaymentStateReasonID</key>
                     <value>1</value>
                  </detail>
               </paymentStateDetails>
            </state>
            <isExecuted>false</isExecuted>
            <baseAmount currencyCode="EUR">50</baseAmount>
            <paymentDetails>
               <detail xsi:type="keyStringValuePair">
                  <key>ProviderExternalID</key>
                  <value>3603bd0e-5449-4ced-ba01-5eadf858e741</value>
               </detail>
            </paymentDetails>
            <paymentAccount>
               <paymentAccountID>0</paymentAccountID>
            </paymentAccount>
         </payment>
      </initiatePaymentResponse>

KYC flow

When the KYC flow has been initiated, PXP returns the customer´s Firstname, Lastname, customerID and DateOfBirth in a state notification for the state AuthorisedByProvider.

The merchant has to respond to this notification. if the payment is blocked or refused by merchant, then the authorization is cancelled on Paysafecard.

Example handleProviderNotificationToMerchantRequest (with KYC data):

<?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" xmlns="http://www.cqrpayments.com/PaymentProcessing">
	<payment xsi:type="paymentWithPaymentAccount">
		<merchantID>B2BTestMerchant</merchantID>
		<shopID>PaysafecardSOPGShouldRequestKYCBDD</shopID>
		<paymentMethod>
			<key>19</key>
			<value>Paysafecard Deposit</value>
		</paymentMethod>
		<merchantTransactionID>06129a57-d536-4bef-b9dc-f84efc893583</merchantTransactionID>
		<paymentID>072d3d6e-883f-49f1-bc27-80d1c1be9da0</paymentID>
		<userID>PaysafecardSOPGShouldRequestKYCBDD</userID>
		<paymentProvider>
			<key>118</key>
			<value>PaysafecardSOPG</value>
		</paymentProvider>
		<amount currencyCode="EUR">21.0000</amount>
		<creationType>
			<key>1</key>
			<value>User</value>
		</creationType>
		<userIP>127.0.0.1</userIP>
		<state>
			<id>f31cab99-ffa1-4296-a363-a38703f94171</id>
			<definition>
				<key>27</key>
				<value>AuthorisedByProvider</value>
			</definition>
			<createdOn>2019-12-30T10:02:16.933</createdOn>
			<paymentStateDetails xsi:nil="true" />
		</state>
		<isExecuted>true</isExecuted>
		<baseAmount currencyCode="EUR">21.0000</baseAmount>
		<paymentDetails>
			<detail xsi:type="keyStringValuePair">
				<key>ProviderExternalID</key>
				<value>072d3d6e-883f-49f1-bc27-80d1c1be9da0</value>
			</detail>
			<detail xsi:type="keyStringValuePair">
				<key>CustomerID</key>
				<value>10677219</value>
			</detail>
			<detail xsi:type="keyStringValuePair">
				<key>KYCFirstname</key>
				<value>Tore</value>
			</detail>
			<detail xsi:type="keyStringValuePair">
				<key>KYCLastname</key>
				<value>God</value>
			</detail>
			<detail xsi:type="keyStringValuePair">
				<key>KYCDateOfBirth</key>
				<value>06/06/1466</value>
			</detail>
		</paymentDetails>
		<paymentAccount>
			<paymentAccountID>e3ae02c5-614d-4932-8cca-f6a68a6bde47</paymentAccountID>
		</paymentAccount>
	</payment>
</handlePaymentStateChangedNotificationRequest>

Example handlePaymentStateChangedNotificationResponse (successful case:

<?xml version="1.0" encoding="utf-8"?>
<handlePaymentStateChangedNotificationResponse 
    xmlns="http://www.cqrpayments.com/PaymentProcessing" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <resultCode>
    <key>0</key>
    <value>ProcessedSuccessfully</value>
  </resultCode>
  <resultMessage>Approved payment</resultMessage>
</handlePaymentStateChangedNotificationResponse>

Example handlePaymentStateChangedNotificationResponse (error case):

<?xml version="1.0" encoding="utf-8"?>
<handlePaymentStateChangedNotificationResponse 
    xmlns="http://www.cqrpayments.com/PaymentProcessing"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
	<resultCode>
		<key>15</key>
		<value>BlockedByMerchant</value>
	</resultCode>
	<resultMessage>Rejected payment</resultMessage>
</handlePaymentStateChangedNotificationResponse>

Note: When the merchant responds with resultCode 0 (Approved), the payment is captured and the state CapturedByProvider is notified to the merchant.

However, if the merchant responds with resultcode 15 (BlockedByMerchant), the payment is cancelled at provider (captured with an amount of zero) and a notification for the state Cancelled can be sent to the merchant.

Finalization of payment

Example handleProviderNotificationToMerchantRequest:

<handleProviderNotificationToMerchantResponse xmlns="http://www.cqrpayments.com/PaymentProcessing" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" >
	<payment>
		<merchantID>YourMerchantID</merchantID>
		<shopID>YourShopID</shopID>
		<paymentMethod>
			<key>19</key>
			<value>Paysafecard Deposit</value>
		</paymentMethod>
		<merchantTransactionID>0e23b2f1-1d92-4ddd-8d43-9de4e77e279b</merchantTransactionID>
		<paymentID>18746be1-b2c3-42d8-8543-fc2d0a93f77d</paymentID>
		<userID>d48693ca-e96e-4ca1-9e01-035645a79399</userID>
		<paymentProvider>
			<key>118</key>
			<value>PaysafecardSOPG</value>
		</paymentProvider>
		<amount currencyCode="EUR">100</amount>
		<creationType>
			<key>1</key>
			<value>User</value>
		</creationType>
		<userIP>127.0.0.1</userIP>
		<state>
			<id>9b4bf2bc-c0e7-4bee-abb4-a00ebe5ce4cf</id>
			<definition>
				<key>27</key>
				<value>CapturedByProvider</value>
			</definition>
			<createdOn>2010-05-19T10:14:41.1242993Z</createdOn>
			<paymentStateDetails xsi:nil="true" />
		</state>
		<isExecuted>true</isExecuted>
		<baseAmount currencyCode="EUR">100</baseAmount>
		<paymentDetails xsi:nil="true" />
</payment>
</handleProviderNotificationToMerchantResponse >

The possible payment states in *handleProviderNotificationToMerchantRequest are listed below:

Payment State

Description

  • *CapturedByProvider** (27)

Success state; Redirect user to SuccessPage and deliver goods

  • *CaptureErrorReportedByProvider** (28)

Error state; Technical error during payment finalization

  • *CaptureCommunicationErrorOccurred** (324)

Error state; Communication error during payment finalization

  • *AuthorisedByProvider** (13)

Intermediate state; It’s not a final state yet. Payment still needs to captured.

  • *PendingOnProvider** (120)

Pending state.

  • *Cancelled** (113)

Final state: Payment cancelled by merchant.

  • *AbortedByCustomer** (101)

Final state: Payment cancelled by merchant`s user.

  • *AbortedOnProvider** (397)

Final state: Payment cancelled by merchant operator while in AuthorisedByProvider state.

Paysafecard deposits with provider PaysafecardSOPG can be captured either automatically, after a pre-defined time or manually on demand.

Step 3 - optional (for manual capturing):

If merchant wants to initiate a capturing he needs to call the method executePaymentAction with the ActionID = 205

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 for the state CapturedByProvider:

<?xml version="1.0" encoding="utf-8"?>
<handlePaymentStateChangedNotificationRequest 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>KalixaAcceptDEMO</merchantID>
		<shopID>KalixaAcceptDEMO</shopID>
		<paymentMethod>
			<key>19</key>
			<value>Paysafecard Deposit</value>
		</paymentMethod>
		<merchantTransactionID>20141217_1</merchantTransactionID>
		<paymentID>ccbc1e5e-baeb-4331-ab99-7c94fef0ce73</paymentID>
		<userID>KalxiaTestUser_7</userID>
		<paymentProvider>
			<key>118</key>
			<value>PaysafecardSOPG</value>
		</paymentProvider>
		<amount currencyCode="EUR">100.0000</amount>
		<creationType>
			<key>1</key>
			<value>User</value>
		</creationType>
		<userIP>195.72.132.1</userIP>
		<state>
			<id>52ad9032-ebd7-4546-ac86-45e67453fc35</id>
			<definition>
				<key>27</key>
				<value>CapturedByProvider</value>
			</definition>
			<createdOn>2014-12-17T08:14:02.34</createdOn>
			<paymentStateDetails xsi:nil="true" />
		</state>
		<isExecuted>true</isExecuted>
		<baseAmount currencyCode="EUR">100.0000</baseAmount>
		<paymentDetails>
			<detail xsi:type="keyStringValuePair">
				<key>ProviderExternalID</key>
				<value>ccbc1e5e-baeb-4331-ab99-7c94fef0ce73</value>
			</detail>
			<detail xsi:type="keyIntValuePair">
				<key>PaymentScoring</key>
				<value>714663</value>
			</detail>
		</paymentDetails>
		<paymentAccount>
			<paymentAccountID>72562076-5d33-4279-8345-e6bc016cbfcc</paymentAccountID>
		</paymentAccount>
	</payment>
</handlePaymentStateChangedNotificationRequest>

Example handlePaymentStateChangedNotificationRequest for the state Cancelled:

<?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" xmlns="http://www.cqrpayments.com/PaymentProcessing">
	<payment xsi:type="paymentWithPaymentAccount">
		<merchantID>B2BTestMerchant</merchantID>
		<shopID>PaysafecardSOPGShouldRequestKYCBDD</shopID>
		<paymentMethod>
			<key>19</key>
			<value>Paysafecard Deposit</value>
		</paymentMethod>
		<merchantTransactionID>21e30378-3dca-4694-acd3-7c1e91f33c61</merchantTransactionID>
		<paymentID>07e7ca39-14f6-4a72-a3e6-442b850d122a</paymentID>
		<userID>PaysafecardSOPGShouldRequestKYCBDD</userID>
		<paymentProvider>
			<key>118</key>
			<value>PaysafecardSOPG</value>
		</paymentProvider>
		<amount currencyCode="EUR">46.0000</amount>
		<creationType>
			<key>1</key>
			<value>User</value>
		</creationType>
		<userIP>127.0.0.1</userIP>
		<state>
			<id>f22eceab-f0ab-430e-a031-045668603500</id>
			<definition>
				<key>113</key>
				<value>Cancelled</value>
			</definition>
			<createdOn>2019-12-30T10:02:21.42</createdOn>
			<paymentStateDetails>
				<detail xsi:type="keyIntValuePair">
					<key>PaymentStateReasonID</key>
					<value>1</value>
				</detail>
			</paymentStateDetails>
		</state>
		<isExecuted>false</isExecuted>
		<baseAmount currencyCode="EUR">46.0000</baseAmount>
		<paymentDetails>
			<detail xsi:type="keyStringValuePair">
				<key>ProviderExternalID</key>
				<value>07e7ca39-14f6-4a72-a3e6-442b850d122a</value>
			</detail>
			<detail xsi:type="keyStringValuePair">
				<key>CustomerID</key>
				<value>10677219</value>
			</detail>
		</paymentDetails>
		<paymentAccount>
			<paymentAccountID>e3ae02c5-614d-4932-8cca-f6a68a6bde47</paymentAccountID>
		</paymentAccount>
	</payment>
</handlePaymentStateChangedNotificationRequest>

Paysafecard error codes

ProviderResponseCode

ProviderResponseMessage

3001

Merchant %1 is not active. Please contact your webshop.

3002

Currency %1 is not valid for merchant %2. Please contact your webshop.

3003

Merchant %1 does not exist. Please contact your webshop.

3006

Card Type %1 is not accepted by the merchant.

3007

Merchant %1 exceeded time window to debit the transaction.

3012

Merchant %1 exceeded time window for Micropayment.

3013

Merchant %1 already exists.

3014

Reporting Criterion %1 for Merchant %2 doesn't exist.

3015

Reporting Criterion %1 for Merchant %2 is in state %3, expected %4 or %5.

4001

SSL error.

4002

Invalid function request.

4003

above maximum disposition amount (1000.00 EUR or equivalent in different transaction currency)

4004

Invalid proxy request.

4005

Connection error.

4006

Unexpected response from server.

4007

Undefined error - this should not happen.

4008

Error reported from backend.

4010

Error opening configuration file.

4011

Configuration file is no regular readable file.

4012

Incorrect syntax in configuration file.

4013

Incorrect value in configuration file.

4014

Error HTTP response from API proxy: %1.

10003

HTTPS request error

10004

General technical error

10005

General technical error

10006

PIN validation failed

10007

Unexpected error

10008

Authentication failed

10010

cancelPayment too late

10011

Insufficient Balance

10012

Zero Balance

10013

Card not active

10014

Method not allowed for SOPG User

10015

Currency not valid for SOPG User

10021

Invalid transaction amount

10028

Invalid request parameters