OTTVoucherWithdrawal (Callpay)

The OTTVoucherWithdrawal method supports OTT voucher withdrawals through provider Callpay in South Africa with Standard Bank Instant Money.

The following method IDs are covered in this section:

IDNameCredit/Debit State
439OTTVoucherWithdrawalWithdrawnByProvider (20)

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

Supported currency: only ZAR

Flow

Redirect Integration

Currently not supported.

Backend2BackendIntegration

The following parameters can be provided in initiatePaymentRequest.User or the need to be present on the user before the initiatePaymentRequest is sent.

key (value type, account type, required)Description
firstName (string, required)User´s first name.
lastName (string, required)User´s last name.
email (string, required)User´s email address.
dateOfBirth (string, required)User´s date of birth.
gender (string, required)User´s gender ("Male" or "Female").
telephoneNumber (string, required)User´s telephone number.
identificationNumber (string, required)User´s identification number, valid ID or passport number.
identificationNumberType (string, required)User´s identification number type - "RSAID" or "PASSPT"
nationality (string, required)User´s nationality, eg. ZA
identificationIssuingCountry (string, required)User´s identification document issuing country, e.g. ZA

The following parameters can be provided in initiatePaymentRequest.specificPaymentData

key (value type, account type, required)Value
PaymentProviderID (string)206 (Callpay)

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>B2BTestMerchant</merchantID>
	<shopID>CallpayProviderShop</shopID>
	<merchantTransactionID>OB-20230321-0002</merchantTransactionID>
	<paymentMethodID>439</paymentMethodID>
	<amount currencyCode="ZAR">50.00</amount>
	<userID>OB-20230321-0001</userID>
	<userData>
		<firstname>Oksana</firstname>
		<lastname>Bulgakova</lastname>
		<email>[email protected]</email>
		<address>
			<countryCode2>ZA</countryCode2>
			<telephoneNumber>27836677704</telephoneNumber>
		</address>
		<dateOfBirth>1984-11-04T00:00:00</dateOfBirth>
		<gender>Female</gender>
		<identificationNumber>8403241111111</identificationNumber>
		<identificationNumberType>PASSPT</identificationNumberType>
		<nationality>ZA</nationality>
		<identificationIssuingCountry>ZA</identificationIssuingCountry>
	</userData>
	<userIP>127.0.0.22</userIP>
	<userSessionID>08b980b9-b5be-4d0a-9e1b-a6541d6ac9ce</userSessionID>
	<creationTypeID>1</creationTypeID>
</initiatePaymentRequest>

Example initiatePaymentResponse:

<?xml version="1.0" encoding="utf-8"?>
<initiatePaymentResponse 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>CallpayProviderShop</shopID>
		<paymentMethod>
			<key>439</key>
			<value>OTT Voucher Withdrawal</value>
		</paymentMethod>
		<merchantTransactionID>6da35c60-c5a4-4f58-b63b-97b316d9e8c5</merchantTransactionID>
		<paymentID>8b69dc1c-5653-4a04-8249-b143d694c68e</paymentID>
		<userID>19b43207-d4cf-4820-852b-15bd61</userID>
		<paymentProvider>
			<key>206</key>
			<value>Callpay</value>
		</paymentProvider>
		<amount currencyCode="ZAR">100.10</amount>
		<creationType>
			<key>1</key>
			<value>User</value>
		</creationType>
		<userIP>127.0.0.1</userIP>
		<state>
			<id>fdb81e01-b4b7-4e65-81db-5e0fb33c8907</id>
			<definition>
				<key>20</key>
				<value>WithdrawnByProvider</value>
			</definition>
			<createdOn>2023-03-16T12:43:13.9618048Z</createdOn>
			<paymentStateDetails>
				<detail xsi:type="keyStringValuePair">
					<key>ProviderResponseMessage</key>
					<value>Withdrawal successfully requested</value>
				</detail>
			</paymentStateDetails>
		</state>
		<isExecuted>true</isExecuted>
		<baseAmount currencyCode="EUR">7.57</baseAmount>
		<paymentDetails>
			<detail xsi:type="keyStringValuePair">
				<key>ProviderTransactionID</key>
				<value>4261780</value>
			</detail>
			<detail xsi:type="keyStringValuePair">
				<key>ProviderExternalID</key>
				<value>1077</value>
			</detail>
		</paymentDetails>
	</payment>

Example initiatePaymentResponse with error InitiateRefusedByProvider:

<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>CallpayProviderShop</shopID>
        <paymentMethod>
            <key>439</key>
            <value>OTT Voucher Withdrawal</value>
        </paymentMethod>
        <merchantTransactionID>c323c7f5-d4a2-46c8-b19a-39f47530cf54CC4</merchantTransactionID>
        <paymentID>fb962ca4-ffe3-4403-8a3f-098a83775102</paymentID>
        <userID>306111f7-d3e2-4e27-ba36-842e31</userID>
        <paymentProvider>
            <key>206</key>
            <value>Callpay</value>
        </paymentProvider>
        <amount currencyCode="ZAR">100.10</amount>
        <creationType>
            <key>1</key>
            <value>User</value>
        </creationType>
        <userIP>127.0.0.1</userIP>
        <state>
            <id>aa479665-e0cc-48bf-b588-1491e8eafc64</id>
            <definition>
                <key>100</key>
                <value>RefusedByProvider</value>
            </definition>
            <createdOn>2023-03-16T12:48:13.2657194Z</createdOn>
            <paymentStateDetails>
                <detail xsi:type="keyStringValuePair">
                    <key>ProviderResponseMessage</key>
                    <value>South African ID Number check digit fails, please check.</value>
                </detail>
                <detail xsi:type="keyStringValuePair">
                    <key>PaymentStateReasonID</key>
                    <value>1</value>
                </detail>
            </paymentStateDetails>
        </state>
        <isExecuted>false</isExecuted>
        <baseAmount currencyCode="EUR">7.57</baseAmount>
        <paymentDetails>
            <detail xsi:type="keyStringValuePair">
                <key>ProviderExternalID</key>
                <value>1079</value>
            </detail>
        </paymentDetails>
    </payment>
</initiatePaymentResponse>

Payments will go to InitiateRefusedProvider as the data is validated by Callpay.
On an error PXP returns the detail ProviderResponseMessage.

Example initiatePaymentResponse with error InitiateRequestProviderCommunicationErrorOccurred**:

<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>CallpayProviderShop</shopID>
		<paymentMethod>
			<key>439</key>
			<value>OTT Voucher Withdrawal</value>
		</paymentMethod>
		<merchantTransactionID>OB-20230321-0001</merchantTransactionID>
		<paymentID>8f09256f-3cf1-4a92-b009-28f21452f504</paymentID>
		<userID>OB-20230321-0001</userID>
		<paymentProvider>
			<key>206</key>
			<value>Callpay</value>
		</paymentProvider>
		<amount currencyCode="ZAR">50.00</amount>
		<creationType>
			<key>1</key>
			<value>User</value>
		</creationType>
		<userIP>127.0.0.22</userIP>
		<state>
			<id>22e8d15b-2956-4911-ac3e-43cc614b0e78</id>
			<definition>
				<key>576</key>
				<value>WithdrawCommunicationErrorOccurred</value>
			</definition>
			<createdOn>2023-03-21T11:27:30.7476103Z</createdOn>
			<description>Error occurred while processing payment communication for Payment[ID='46220055'].</description>
			<paymentStateDetails>
				<detail xsi:type="keyStringValuePair">
					<key>PaymentStateReasonID</key>
					<value>1</value>
				</detail>
			</paymentStateDetails>
		</state>
		<isExecuted>false</isExecuted>
		<baseAmount currencyCode="EUR">3.78</baseAmount>
		<paymentDetails>
			<detail xsi:type="keyStringValuePair">
				<key>ProviderExternalID</key>
				<value>1944</value>
			</detail>
		</paymentDetails>
	</payment>
</initiatePaymentResponse>

Payments in state InitiateRequestProviderCommunicationErrorOccurred maybe be moved to InitiatedByProvider upon receiving notification from provider.

Notifications

The standard notification mechanism is used for notifying the merchant in the background (asynchronously) about payment state changes. For more information see PaymentStateChangedNotification.