<?xml version="1.0" encoding="UTF-8" standalone="no"?><wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:sch="http://www.paygate.co.za/PayHOST" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.paygate.co.za/PayHOST" targetNamespace="http://www.paygate.co.za/PayHOST">
  <wsdl:types>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xspg="http://www.paygate.co.za/PayHOST" elementFormDefault="qualified" targetNamespace="http://www.paygate.co.za/PayHOST">

    <!-- Account Type -->
    <xs:complexType name="PayGateAccountType">
        <xs:sequence>
            <xs:element name="PayGateId" type="xs:token"/>
            <xs:element name="Password" type="xs:token"/>
        </xs:sequence>
    </xs:complexType>

    <!-- Payment Method Type -->
    <xs:simpleType name="PaymentMethodType">
        <xs:restriction base="xs:token">
            <xs:enumeration value="CC">
                <xs:annotation>
                    <xs:documentation>
                        <p>Credit Card</p>
                    </xs:documentation>
                </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="DC">
                <xs:annotation>
                    <xs:documentation>
                        <p>Debit Card</p>
                    </xs:documentation>
                </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="EW">
                <xs:annotation>
                    <xs:documentation>
                        <p>eWallet</p>
                    </xs:documentation>
                </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="BT">
                <xs:annotation>
                    <xs:documentation>
                        <p>Bank Transfer</p>
                    </xs:documentation>
                </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="CV">
                <xs:annotation>
                    <xs:documentation>
                        <p>Cash Voucher</p>
                    </xs:documentation>
                </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="PC">
                <xs:annotation>
                    <xs:documentation>
                        <p>Pre-Paid Card</p>
                    </xs:documentation>
                </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="MO">
                <xs:annotation>
                    <xs:documentation>
                        <p>Mobile Payment</p>
                    </xs:documentation>
                </xs:annotation>
            </xs:enumeration>
        </xs:restriction>
    </xs:simpleType>

    <!-- PaymentMethodDetailType -->
    <xs:simpleType name="PaymentDetailType">
        <xs:restriction base="xs:token">
            <xs:minLength value="1"/>
            <xs:maxLength value="80"/>
        </xs:restriction>
    </xs:simpleType>

    <!-- PaymentType -->
    <xs:complexType name="PaymentType">
        <xs:sequence>
            <xs:element maxOccurs="1" minOccurs="1" name="Method" type="xspg:PaymentMethodType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="Detail" type="xspg:PaymentDetailType"/>
        </xs:sequence>
    </xs:complexType>

    <!-- Transaction Type -->
    <xs:simpleType name="TransactionType">
        <xs:restriction base="xs:token">
            <xs:enumeration value="Authorisation"/>
            <xs:enumeration value="Settlement"/>
            <xs:enumeration value="Refund"/>
            <xs:enumeration value="Payout"/>
            <xs:enumeration value="Purchase"/>
        </xs:restriction>
    </xs:simpleType>

    <!-- Recurring Transaction Type -->
    <xs:simpleType name="RecurringTransactionType">
        <xs:restriction base="xs:token">
            <xs:enumeration value="CARD_ON_FILE">
                <xs:annotation>
                    <xs:documentation>
                        <p>Card On File</p>
                    </xs:documentation>
                </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="RECURRING">
                <xs:annotation>
                    <xs:documentation>
                        <p>Recurring</p>
                    </xs:documentation>
                </xs:annotation>
            </xs:enumeration>
        </xs:restriction>
    </xs:simpleType>

    <!-- Initiated Type -->
    <xs:simpleType name="InitiatedType">
        <xs:restriction base="xs:token">
            <xs:enumeration value="CARD_HOLDER">
                <xs:annotation>
                    <xs:documentation>
                        <p>Card Holder Initiated</p>
                    </xs:documentation>
                </xs:annotation>
            </xs:enumeration>
            <xs:enumeration value="MERCHANT">
                <xs:annotation>
                    <xs:documentation>
                        <p>Merchant Initiated</p>
                    </xs:documentation>
                </xs:annotation>
            </xs:enumeration>
        </xs:restriction>
    </xs:simpleType>

    <!-- Transaction Types including the all option -->
    <xs:simpleType name="QueryTransactionType">
        <xs:restriction base="xs:token">
            <xs:enumeration value="Authorisation"/>
            <xs:enumeration value="Settlement"/>
            <xs:enumeration value="Refund"/>
            <xs:enumeration value="Payout"/>
            <xs:enumeration value="Purchase"/>
            <xs:enumeration value="All"/>
        </xs:restriction>
    </xs:simpleType>

    <!-- Risk Type -->
    <xs:complexType name="RiskType">
        <xs:sequence>
            <xs:element maxOccurs="1" minOccurs="0" name="AccountNumber" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="SessionId" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="IpV4Address" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="IpV6Address" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="UserId" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="MachineId" type="xs:token"/>
            <xs:element maxOccurs="unbounded" minOccurs="0" name="UserProfile" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="ConsumerWatch" type="xs:boolean"/>
            <xs:element maxOccurs="1" minOccurs="0" name="Browser" type="xspg:BrowserType"/>
        </xs:sequence>
    </xs:complexType>

    <!-- Person Type -->
    <xs:complexType name="PersonType">
        <xs:sequence>
            <xs:element maxOccurs="1" minOccurs="0" name="Title" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="1" name="FirstName" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="MiddleName" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="1" name="LastName" type="xs:token"/>
            <xs:element maxOccurs="unbounded" minOccurs="0" name="Telephone" type="xs:token"/>
            <xs:element maxOccurs="unbounded" minOccurs="0" name="Mobile" type="xs:token"/>
            <xs:element maxOccurs="unbounded" minOccurs="0" name="Fax" type="xs:token"/>
            <xs:element maxOccurs="unbounded" minOccurs="1" name="Email" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="DateOfBirth" type="xs:date"/>
            <xs:element maxOccurs="1" minOccurs="0" name="Nationality" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="IdNumber" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="IdType" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="SocialSecurityNumber" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="Address" type="xspg:AddressType"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="BrowserType">
        <xs:sequence>
            <xs:element name="UserAgent" type="xs:string"/>
            <xs:element name="Language" type="xspg:LanguageType"/>
        </xs:sequence>
    </xs:complexType>

    <!-- Address Type -->
    <xs:complexType name="AddressType">
        <xs:sequence>
            <xs:element maxOccurs="unbounded" minOccurs="0" name="AddressLine" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="City" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="Country" type="xspg:CountryType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="State" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="Zip" type="xs:token"/>
        </xs:sequence>
    </xs:complexType>

    <!-- Shipping Details Type -->
    <xs:complexType name="ShippingDetailsType">
        <xs:sequence>
            <xs:element maxOccurs="1" minOccurs="1" name="Customer" type="xspg:PersonType"/>
            <xs:element maxOccurs="1" minOccurs="1" name="Address" type="xspg:AddressType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="DeliveryDate" type="xs:dateTime"/>
            <xs:element maxOccurs="1" minOccurs="0" name="DeliveryMethod" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="InstallationRequested" type="xs:boolean"/>
        </xs:sequence>
    </xs:complexType>

    <!-- Billing Details Type -->
    <xs:complexType name="BillingDetailsType">
        <xs:sequence>
            <xs:element maxOccurs="1" minOccurs="1" name="Customer" type="xspg:PersonType"/>
            <xs:element maxOccurs="1" minOccurs="1" name="Address" type="xspg:AddressType"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="GeolocationType">
        <xs:sequence>
            <xs:element maxOccurs="1" minOccurs="1" name="Address" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="1" name="City" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="1" name="State" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="1" name="Country" type="xspg:CountryType"/>
            <xs:element maxOccurs="1" minOccurs="1" name="Zip" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="1" name="MSISDN" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="CustomerServiceMSISDN" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="AdditionalContactInformation" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="URL" type="xs:token"/>
        </xs:sequence>
    </xs:complexType>

    <!-- Order Item Type -->
    <xs:complexType name="OrderItemType">
        <xs:sequence>
            <xs:element maxOccurs="1" minOccurs="0" name="ProductCode" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="ProductDescription" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="ProductCategory" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="ProductRisk" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="OrderQuantity" type="xs:unsignedInt"/>
            <xs:element maxOccurs="1" minOccurs="0" name="UnitPrice" type="xs:decimal"/>
            <xs:element maxOccurs="1" minOccurs="0" name="Currency" type="xs:token"/>
        </xs:sequence>
    </xs:complexType>

    <!-- Order Type -->
    <xs:complexType name="OrderType">
        <xs:sequence>
            <xs:element maxOccurs="1" minOccurs="1" name="MerchantOrderId" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="1" name="Currency" type="xspg:CurrencyType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="CurrencyFrom" type="xspg:CurrencyType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="ConversionRate" type="xs:double"/>
            <xs:element maxOccurs="1" minOccurs="1" name="Amount" type="xs:int"/>
            <xs:element maxOccurs="1" minOccurs="0" name="Discount" type="xs:int"/>
            <xs:element maxOccurs="1" minOccurs="0" name="TransactionDate" type="xs:dateTime"/>
            <xs:element maxOccurs="1" minOccurs="0" name="BillingDetails" type="xspg:BillingDetailsType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="ShippingDetails" type="xspg:ShippingDetailsType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="AirlineBookingDetails" type="xspg:AirlineBookingDetailsType"/>
            <xs:element maxOccurs="unbounded" minOccurs="0" name="OrderItems" type="xspg:OrderItemType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="Locale" type="xspg:LanguageType"/>
        </xs:sequence>
    </xs:complexType>

    <!-- AcquirerInfoType -->
    <xs:complexType name="AcquirerInfoType">
        <xs:sequence>
            <xs:element maxOccurs="1" minOccurs="0" name="MCC" type="xspg:MccType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="MID" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>

    <!-- CVV Type -->
    <xs:simpleType name="MccType">
        <xs:restriction base="xs:token">
            <xs:pattern value="[0-9]+"/>
            <xs:minLength value="1"/>
            <xs:maxLength value="4"/>
        </xs:restriction>
    </xs:simpleType>

    <!-- Passenger Type -->
    <xs:complexType name="PassengerType">
        <xs:sequence>
            <xs:element maxOccurs="1" minOccurs="1" name="Passenger" type="xspg:PersonType"/>
            <xs:element maxOccurs="1" minOccurs="1" name="TravellerType">
                <xs:simpleType>
                    <xs:restriction base="xs:token">
                        <xs:enumeration value="A"/>
                        <xs:enumeration value="C"/>
                        <xs:enumeration value="T"/>
                        <xs:enumeration value="I"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element maxOccurs="1" minOccurs="0" name="LoyaltyNumber" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="LoyaltyType" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="LoyaltyTier" type="xs:int"/>
        </xs:sequence>
    </xs:complexType>

    <xs:simpleType name="CarrierCodeType">
        <xs:restriction base="xs:token">
            <xs:pattern value="[A-Z0-9]{2}"/>
        </xs:restriction>
    </xs:simpleType>

    <!-- Flight Leg Type -->
    <xs:complexType name="FlightLegType">
        <xs:sequence>

            <!-- Departure Details -->
            <xs:element maxOccurs="1" minOccurs="1" name="DepartureAirport">
                <xs:simpleType>
                    <xs:restriction base="xs:token">
                        <xs:pattern value="[A-Z]{3}"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element maxOccurs="1" minOccurs="1" name="DepartureCountry" type="xspg:CountryType"/>
            <xs:element maxOccurs="1" minOccurs="1" name="DepartureCity">
                <xs:simpleType>
                    <xs:restriction base="xs:token">
                        <xs:pattern value="[A-Z]{3}"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element maxOccurs="1" minOccurs="1" name="DepartureDateTime" type="xs:dateTime"/>
            <xs:element maxOccurs="1" minOccurs="0" name="DepartureAirportTimeZone" type="xspg:TimeZoneType"/>

            <!-- Arrival Details -->
            <xs:element maxOccurs="1" minOccurs="1" name="ArrivalAirport">
                <xs:simpleType>
                    <xs:restriction base="xs:token">
                        <xs:pattern value="[A-Z]{3}"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element maxOccurs="1" minOccurs="1" name="ArrivalCountry" type="xspg:CountryType"/>
            <xs:element maxOccurs="1" minOccurs="1" name="ArrivalCity">
                <xs:simpleType>
                    <xs:restriction base="xs:token">
                        <xs:pattern value="[A-Z]{3}"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element maxOccurs="1" minOccurs="1" name="ArrivalDateTime" type="xs:dateTime"/>
            <xs:element maxOccurs="1" minOccurs="0" name="ArrivalAirportTimeZone" type="xspg:TimeZoneType"/>

            <!-- Carrier Details -->
            <xs:element maxOccurs="1" minOccurs="1" name="MarketingCarrierCode" type="xspg:CarrierCodeType"/>
            <xs:element maxOccurs="1" minOccurs="1" name="MarketingCarrierName" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="1" name="IssuingCarrierCode" type="xspg:CarrierCodeType"/>
            <xs:element maxOccurs="1" minOccurs="1" name="IssuingCarrierName" type="xs:token"/>

            <!-- Flight Details -->
            <xs:element maxOccurs="1" minOccurs="1" name="FlightNumber" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="FareBasisCode" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="FareClass" type="xs:token"/>

            <!-- Money Details -->
            <xs:element maxOccurs="1" minOccurs="1" name="BaseFareAmount" type="xs:int"/>
            <xs:element maxOccurs="1" minOccurs="1" name="BaseFareCurrency" type="xspg:CurrencyType"/>
        </xs:sequence>
    </xs:complexType>

    <!-- Airline Booking Type -->
    <xs:complexType name="AirlineBookingDetailsType">
        <xs:sequence>
            <xs:element maxOccurs="1" minOccurs="0" name="TicketNumber" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="InternalCustomerCode" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="ReservationSystem" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="TravelAgencyCode" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="TravelAgencyName" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="PayerTravelling" type="xs:boolean"/>
            <xs:element maxOccurs="1" minOccurs="1" name="PNR" type="xs:token"/>
            <xs:element maxOccurs="unbounded" minOccurs="0" name="Passengers" type="xspg:PassengerType"/>
            <xs:element maxOccurs="unbounded" minOccurs="0" name="FlightLegs" type="xspg:FlightLegType"/>
        </xs:sequence>
    </xs:complexType>

    <!-- Language Type according to RFC 1766 -->
    <xs:simpleType name="LanguageType">
        <xs:restriction base="xs:token">
            <xs:pattern value="([a-zA-Z]{2}|[iI]-[a-zA-Z]+|[xX]-[a-zA-Z]{1,8})(-[a-zA-Z]{1,8})*"/>
        </xs:restriction>
    </xs:simpleType>

    <!-- Credit Card Type -->
    <xs:simpleType name="CreditCardType">
        <xs:restriction base="xs:token">
            <xs:enumeration value="Unknown"/>
            <xs:enumeration value="Visa"/>
            <xs:enumeration value="MasterCard"/>
            <xs:enumeration value="AmericanExpress"/>
            <xs:enumeration value="DinersClub"/>
        </xs:restriction>
    </xs:simpleType>

    <!-- TransactionCode -->
    <xs:simpleType name="TransactionCodeType">
        <xs:restriction base="xs:token">
            <xs:enumeration value="NotDone"/>
            <xs:enumeration value="Approved"/>
            <xs:enumeration value="Declined"/>
            <xs:enumeration value="Paid"/>
            <xs:enumeration value="Refunded"/>
            <xs:enumeration value="ReceivedByPaygate"/>
            <xs:enumeration value="RepliedToClient"/>
        </xs:restriction>
    </xs:simpleType>

    <!-- Vault Key Type -->
    <xs:simpleType name="VaultKeyType">
        <xs:restriction base="xs:token">
            <xs:enumeration value="cardNumber"/>
            <xs:enumeration value="expDate"/>
        </xs:restriction>
    </xs:simpleType>

    <!-- Currency Type -->
    <xs:simpleType name="CurrencyType">
        <xs:restriction base="xs:token">
            <xs:enumeration value="AED"/>
            <xs:enumeration value="AFN"/>
            <xs:enumeration value="ALL"/>
            <xs:enumeration value="AMD"/>
            <xs:enumeration value="ANG"/>
            <xs:enumeration value="AOA"/>
            <xs:enumeration value="ARS"/>
            <xs:enumeration value="AUD"/>
            <xs:enumeration value="AWG"/>
            <xs:enumeration value="AZN"/>
            <xs:enumeration value="BAM"/>
            <xs:enumeration value="BBD"/>
            <xs:enumeration value="BDT"/>
            <xs:enumeration value="BGN"/>
            <xs:enumeration value="BHD"/>
            <xs:enumeration value="BIF"/>
            <xs:enumeration value="BMD"/>
            <xs:enumeration value="BND"/>
            <xs:enumeration value="BOB"/>
            <xs:enumeration value="BOV"/>
            <xs:enumeration value="BRL"/>
            <xs:enumeration value="BSD"/>
            <xs:enumeration value="BTN"/>
            <xs:enumeration value="BWP"/>
            <xs:enumeration value="BYR"/>
            <xs:enumeration value="BZD"/>
            <xs:enumeration value="CAD"/>
            <xs:enumeration value="CDF"/>
            <xs:enumeration value="CHE"/>
            <xs:enumeration value="CHF"/>
            <xs:enumeration value="CHW"/>
            <xs:enumeration value="CLF"/>
            <xs:enumeration value="CLP"/>
            <xs:enumeration value="CNY"/>
            <xs:enumeration value="COP"/>
            <xs:enumeration value="COU"/>
            <xs:enumeration value="CRC"/>
            <xs:enumeration value="CUC"/>
            <xs:enumeration value="CUP"/>
            <xs:enumeration value="CVE"/>
            <xs:enumeration value="CZK"/>
            <xs:enumeration value="DJF"/>
            <xs:enumeration value="DKK"/>
            <xs:enumeration value="DOP"/>
            <xs:enumeration value="DZD"/>
            <xs:enumeration value="EGP"/>
            <xs:enumeration value="ERN"/>
            <xs:enumeration value="ETB"/>
            <xs:enumeration value="EUR"/>
            <xs:enumeration value="FJD"/>
            <xs:enumeration value="FKP"/>
            <xs:enumeration value="GBP"/>
            <xs:enumeration value="GEL"/>
            <xs:enumeration value="GHS"/>
            <xs:enumeration value="GIP"/>
            <xs:enumeration value="GMD"/>
            <xs:enumeration value="GNF"/>
            <xs:enumeration value="GTQ"/>
            <xs:enumeration value="GYD"/>
            <xs:enumeration value="HKD"/>
            <xs:enumeration value="HNL"/>
            <xs:enumeration value="HRK"/>
            <xs:enumeration value="HTG"/>
            <xs:enumeration value="HUF"/>
            <xs:enumeration value="IDR"/>
            <xs:enumeration value="ILS"/>
            <xs:enumeration value="INR"/>
            <xs:enumeration value="IQD"/>
            <xs:enumeration value="IRR"/>
            <xs:enumeration value="ISK"/>
            <xs:enumeration value="JMD"/>
            <xs:enumeration value="JOD"/>
            <xs:enumeration value="JPY"/>
            <xs:enumeration value="KES"/>
            <xs:enumeration value="KGS"/>
            <xs:enumeration value="KHR"/>
            <xs:enumeration value="KMF"/>
            <xs:enumeration value="KPW"/>
            <xs:enumeration value="KRW"/>
            <xs:enumeration value="KWD"/>
            <xs:enumeration value="KYD"/>
            <xs:enumeration value="KZT"/>
            <xs:enumeration value="LAK"/>
            <xs:enumeration value="LBP"/>
            <xs:enumeration value="LKR"/>
            <xs:enumeration value="LRD"/>
            <xs:enumeration value="LSL"/>
            <xs:enumeration value="LTL"/>
            <xs:enumeration value="LVL"/>
            <xs:enumeration value="LYD"/>
            <xs:enumeration value="MAD"/>
            <xs:enumeration value="MDL"/>
            <xs:enumeration value="MKD"/>
            <xs:enumeration value="MMK"/>
            <xs:enumeration value="MNT"/>
            <xs:enumeration value="MOP"/>
            <xs:enumeration value="MUR"/>
            <xs:enumeration value="MVR"/>
            <xs:enumeration value="MWK"/>
            <xs:enumeration value="MXN"/>
            <xs:enumeration value="MXV"/>
            <xs:enumeration value="MYR"/>
            <xs:enumeration value="MZN"/>
            <xs:enumeration value="NAD"/>
            <xs:enumeration value="NGN"/>
            <xs:enumeration value="NIO"/>
            <xs:enumeration value="NOK"/>
            <xs:enumeration value="NPR"/>
            <xs:enumeration value="NZD"/>
            <xs:enumeration value="OMR"/>
            <xs:enumeration value="PAB"/>
            <xs:enumeration value="PEN"/>
            <xs:enumeration value="PGK"/>
            <xs:enumeration value="PHP"/>
            <xs:enumeration value="PKR"/>
            <xs:enumeration value="PLN"/>
            <xs:enumeration value="PYG"/>
            <xs:enumeration value="QAR"/>
            <xs:enumeration value="RON"/>
            <xs:enumeration value="RSD"/>
            <xs:enumeration value="RUB"/>
            <xs:enumeration value="RWF"/>
            <xs:enumeration value="SAR"/>
            <xs:enumeration value="SBD"/>
            <xs:enumeration value="SCR"/>
            <xs:enumeration value="SDG"/>
            <xs:enumeration value="SEK"/>
            <xs:enumeration value="SGD"/>
            <xs:enumeration value="SHP"/>
            <xs:enumeration value="SLL"/>
            <xs:enumeration value="SOS"/>
            <xs:enumeration value="SRD"/>
            <xs:enumeration value="SSP"/>
            <xs:enumeration value="STD"/>
            <xs:enumeration value="SYP"/>
            <xs:enumeration value="SZL"/>
            <xs:enumeration value="THB"/>
            <xs:enumeration value="TJS"/>
            <xs:enumeration value="TMT"/>
            <xs:enumeration value="TND"/>
            <xs:enumeration value="TOP"/>
            <xs:enumeration value="TRY"/>
            <xs:enumeration value="TTD"/>
            <xs:enumeration value="TWD"/>
            <xs:enumeration value="TZS"/>
            <xs:enumeration value="UAH"/>
            <xs:enumeration value="UGX"/>
            <xs:enumeration value="USD"/>
            <xs:enumeration value="USN"/>
            <xs:enumeration value="USS"/>
            <xs:enumeration value="UYI"/>
            <xs:enumeration value="UYU"/>
            <xs:enumeration value="UZS"/>
            <xs:enumeration value="VEF"/>
            <xs:enumeration value="VND"/>
            <xs:enumeration value="VUV"/>
            <xs:enumeration value="WST"/>
            <xs:enumeration value="XAF"/>
            <xs:enumeration value="XAG"/>
            <xs:enumeration value="XAU"/>
            <xs:enumeration value="XBA"/>
            <xs:enumeration value="XBB"/>
            <xs:enumeration value="XBC"/>
            <xs:enumeration value="XBD"/>
            <xs:enumeration value="XCD"/>
            <xs:enumeration value="XDR"/>
            <xs:enumeration value="XFU"/>
            <xs:enumeration value="XOF"/>
            <xs:enumeration value="XPD"/>
            <xs:enumeration value="XPF"/>
            <xs:enumeration value="XPT"/>
            <xs:enumeration value="XTS"/>
            <xs:enumeration value="XXX"/>
            <xs:enumeration value="YER"/>
            <xs:enumeration value="ZAR"/>
            <xs:enumeration value="ZMW"/>
            <xs:enumeration value="ZWL"/>
        </xs:restriction>
    </xs:simpleType>

    <!-- Country Code -->
    <xs:simpleType name="CountryType">
        <xs:restriction base="xs:token">
            <xs:enumeration value="ABW"/>
            <xs:enumeration value="AFG"/>
            <xs:enumeration value="AGO"/>
            <xs:enumeration value="AIA"/>
            <xs:enumeration value="ALA"/>
            <xs:enumeration value="ALB"/>
            <xs:enumeration value="AND"/>
            <xs:enumeration value="ARE"/>
            <xs:enumeration value="ARG"/>
            <xs:enumeration value="ARM"/>
            <xs:enumeration value="ASM"/>
            <xs:enumeration value="ATA"/>
            <xs:enumeration value="ATF"/>
            <xs:enumeration value="ATG"/>
            <xs:enumeration value="AUS"/>
            <xs:enumeration value="AUT"/>
            <xs:enumeration value="AZE"/>
            <xs:enumeration value="BDI"/>
            <xs:enumeration value="BEL"/>
            <xs:enumeration value="BEN"/>
            <xs:enumeration value="BES"/>
            <xs:enumeration value="BFA"/>
            <xs:enumeration value="BGD"/>
            <xs:enumeration value="BGR"/>
            <xs:enumeration value="BHR"/>
            <xs:enumeration value="BHS"/>
            <xs:enumeration value="BIH"/>
            <xs:enumeration value="BLM"/>
            <xs:enumeration value="BLR"/>
            <xs:enumeration value="BLZ"/>
            <xs:enumeration value="BMU"/>
            <xs:enumeration value="BOL"/>
            <xs:enumeration value="BRA"/>
            <xs:enumeration value="BRB"/>
            <xs:enumeration value="BRN"/>
            <xs:enumeration value="BTN"/>
            <xs:enumeration value="BVT"/>
            <xs:enumeration value="BWA"/>
            <xs:enumeration value="CAF"/>
            <xs:enumeration value="CAN"/>
            <xs:enumeration value="CCK"/>
            <xs:enumeration value="CHE"/>
            <xs:enumeration value="CHL"/>
            <xs:enumeration value="CHN"/>
            <xs:enumeration value="CIV"/>
            <xs:enumeration value="CMR"/>
            <xs:enumeration value="COD"/>
            <xs:enumeration value="COG"/>
            <xs:enumeration value="COK"/>
            <xs:enumeration value="COL"/>
            <xs:enumeration value="COM"/>
            <xs:enumeration value="CPV"/>
            <xs:enumeration value="CRI"/>
            <xs:enumeration value="CUB"/>
            <xs:enumeration value="CUW"/>
            <xs:enumeration value="CXR"/>
            <xs:enumeration value="CYM"/>
            <xs:enumeration value="CYP"/>
            <xs:enumeration value="CZE"/>
            <xs:enumeration value="DEU"/>
            <xs:enumeration value="DJI"/>
            <xs:enumeration value="DMA"/>
            <xs:enumeration value="DNK"/>
            <xs:enumeration value="DOM"/>
            <xs:enumeration value="DZA"/>
            <xs:enumeration value="ECU"/>
            <xs:enumeration value="EGY"/>
            <xs:enumeration value="ERI"/>
            <xs:enumeration value="ESH"/>
            <xs:enumeration value="ESP"/>
            <xs:enumeration value="EST"/>
            <xs:enumeration value="ETH"/>
            <xs:enumeration value="FIN"/>
            <xs:enumeration value="FJI"/>
            <xs:enumeration value="FLK"/>
            <xs:enumeration value="FRA"/>
            <xs:enumeration value="FRO"/>
            <xs:enumeration value="FSM"/>
            <xs:enumeration value="GAB"/>
            <xs:enumeration value="GBR"/>
            <xs:enumeration value="GEO"/>
            <xs:enumeration value="GGY"/>
            <xs:enumeration value="GHA"/>
            <xs:enumeration value="GIB"/>
            <xs:enumeration value="GIN"/>
            <xs:enumeration value="GLP"/>
            <xs:enumeration value="GMB"/>
            <xs:enumeration value="GNB"/>
            <xs:enumeration value="GNQ"/>
            <xs:enumeration value="GRC"/>
            <xs:enumeration value="GRD"/>
            <xs:enumeration value="GRL"/>
            <xs:enumeration value="GTM"/>
            <xs:enumeration value="GUF"/>
            <xs:enumeration value="GUM"/>
            <xs:enumeration value="GUY"/>
            <xs:enumeration value="HKG"/>
            <xs:enumeration value="HMD"/>
            <xs:enumeration value="HND"/>
            <xs:enumeration value="HRV"/>
            <xs:enumeration value="HTI"/>
            <xs:enumeration value="HUN"/>
            <xs:enumeration value="IDN"/>
            <xs:enumeration value="IMN"/>
            <xs:enumeration value="IND"/>
            <xs:enumeration value="IOT"/>
            <xs:enumeration value="IRL"/>
            <xs:enumeration value="IRN"/>
            <xs:enumeration value="IRQ"/>
            <xs:enumeration value="ISL"/>
            <xs:enumeration value="ISR"/>
            <xs:enumeration value="ITA"/>
            <xs:enumeration value="JAM"/>
            <xs:enumeration value="JEY"/>
            <xs:enumeration value="JOR"/>
            <xs:enumeration value="JPN"/>
            <xs:enumeration value="KAZ"/>
            <xs:enumeration value="KEN"/>
            <xs:enumeration value="KGZ"/>
            <xs:enumeration value="KHM"/>
            <xs:enumeration value="KIR"/>
            <xs:enumeration value="KNA"/>
            <xs:enumeration value="KOR"/>
            <xs:enumeration value="KWT"/>
            <xs:enumeration value="LAO"/>
            <xs:enumeration value="LBN"/>
            <xs:enumeration value="LBR"/>
            <xs:enumeration value="LBY"/>
            <xs:enumeration value="LCA"/>
            <xs:enumeration value="LIE"/>
            <xs:enumeration value="LKA"/>
            <xs:enumeration value="LSO"/>
            <xs:enumeration value="LTU"/>
            <xs:enumeration value="LUX"/>
            <xs:enumeration value="LVA"/>
            <xs:enumeration value="MAC"/>
            <xs:enumeration value="MAF"/>
            <xs:enumeration value="MAR"/>
            <xs:enumeration value="MCO"/>
            <xs:enumeration value="MDA"/>
            <xs:enumeration value="MDG"/>
            <xs:enumeration value="MDV"/>
            <xs:enumeration value="MEX"/>
            <xs:enumeration value="MHL"/>
            <xs:enumeration value="MKD"/>
            <xs:enumeration value="MLI"/>
            <xs:enumeration value="MLT"/>
            <xs:enumeration value="MMR"/>
            <xs:enumeration value="MNE"/>
            <xs:enumeration value="MNG"/>
            <xs:enumeration value="MNP"/>
            <xs:enumeration value="MOZ"/>
            <xs:enumeration value="MRT"/>
            <xs:enumeration value="MSR"/>
            <xs:enumeration value="MTQ"/>
            <xs:enumeration value="MUS"/>
            <xs:enumeration value="MWI"/>
            <xs:enumeration value="MYS"/>
            <xs:enumeration value="MYT"/>
            <xs:enumeration value="NAM"/>
            <xs:enumeration value="NCL"/>
            <xs:enumeration value="NER"/>
            <xs:enumeration value="NFK"/>
            <xs:enumeration value="NGA"/>
            <xs:enumeration value="NIC"/>
            <xs:enumeration value="NIU"/>
            <xs:enumeration value="NLD"/>
            <xs:enumeration value="NOR"/>
            <xs:enumeration value="NPL"/>
            <xs:enumeration value="NRU"/>
            <xs:enumeration value="NZL"/>
            <xs:enumeration value="OMN"/>
            <xs:enumeration value="PAK"/>
            <xs:enumeration value="PAN"/>
            <xs:enumeration value="PCN"/>
            <xs:enumeration value="PER"/>
            <xs:enumeration value="PHL"/>
            <xs:enumeration value="PLW"/>
            <xs:enumeration value="PNG"/>
            <xs:enumeration value="POL"/>
            <xs:enumeration value="PRI"/>
            <xs:enumeration value="PRK"/>
            <xs:enumeration value="PRT"/>
            <xs:enumeration value="PRY"/>
            <xs:enumeration value="PSE"/>
            <xs:enumeration value="PYF"/>
            <xs:enumeration value="QAT"/>
            <xs:enumeration value="REU"/>
            <xs:enumeration value="ROU"/>
            <xs:enumeration value="RUS"/>
            <xs:enumeration value="RWA"/>
            <xs:enumeration value="SAU"/>
            <xs:enumeration value="SDN"/>
            <xs:enumeration value="SEN"/>
            <xs:enumeration value="SGP"/>
            <xs:enumeration value="SGS"/>
            <xs:enumeration value="SHN"/>
            <xs:enumeration value="SJM"/>
            <xs:enumeration value="SLB"/>
            <xs:enumeration value="SLE"/>
            <xs:enumeration value="SLV"/>
            <xs:enumeration value="SMR"/>
            <xs:enumeration value="SOM"/>
            <xs:enumeration value="SPM"/>
            <xs:enumeration value="SRB"/>
            <xs:enumeration value="SSD"/>
            <xs:enumeration value="STP"/>
            <xs:enumeration value="SUR"/>
            <xs:enumeration value="SVK"/>
            <xs:enumeration value="SVN"/>
            <xs:enumeration value="SWE"/>
            <xs:enumeration value="SWZ"/>
            <xs:enumeration value="SXM"/>
            <xs:enumeration value="SYC"/>
            <xs:enumeration value="SYR"/>
            <xs:enumeration value="TCA"/>
            <xs:enumeration value="TCD"/>
            <xs:enumeration value="TGO"/>
            <xs:enumeration value="THA"/>
            <xs:enumeration value="TJK"/>
            <xs:enumeration value="TKL"/>
            <xs:enumeration value="TKM"/>
            <xs:enumeration value="TLS"/>
            <xs:enumeration value="TON"/>
            <xs:enumeration value="TTO"/>
            <xs:enumeration value="TUN"/>
            <xs:enumeration value="TUR"/>
            <xs:enumeration value="TUV"/>
            <xs:enumeration value="TWN"/>
            <xs:enumeration value="TZA"/>
            <xs:enumeration value="UGA"/>
            <xs:enumeration value="UKR"/>
            <xs:enumeration value="UMI"/>
            <xs:enumeration value="URY"/>
            <xs:enumeration value="USA"/>
            <xs:enumeration value="UZB"/>
            <xs:enumeration value="VAT"/>
            <xs:enumeration value="VCT"/>
            <xs:enumeration value="VEN"/>
            <xs:enumeration value="VGB"/>
            <xs:enumeration value="VIR"/>
            <xs:enumeration value="VNM"/>
            <xs:enumeration value="VUT"/>
            <xs:enumeration value="WLF"/>
            <xs:enumeration value="WSM"/>
            <xs:enumeration value="YEM"/>
            <xs:enumeration value="ZAF"/>
            <xs:enumeration value="ZMB"/>
            <xs:enumeration value="ZWE"/>
        </xs:restriction>
    </xs:simpleType>

    <!-- Payout Types -->
    <xs:simpleType name="PayoutType">
        <xs:restriction base="xs:token">
            <xs:enumeration value="Eft"/>
            <xs:enumeration value="Salary"/>
            <xs:enumeration value="PayAndClear"/>
        </xs:restriction>
    </xs:simpleType>

    <!-- Bank Account Types -->
    <xs:simpleType name="BankAccountType">
        <xs:restriction base="xs:token">
            <xs:enumeration value="Current"/>
            <xs:enumeration value="Savings"/>
            <xs:enumeration value="Transmission"/>
            <xs:enumeration value="Bond"/>
        </xs:restriction>
    </xs:simpleType>

    <!-- Timezone Type -->
    <xs:simpleType name="TimeZoneType">
        <xs:restriction base="xs:token">
            <xs:pattern value="[+-][0-9]{2}:[0-9]{2}"/>
        </xs:restriction>
    </xs:simpleType>

    <!-- Budget Period Type -->
    <xs:simpleType name="BudgetPeriodType">
        <xs:restriction base="xs:token">
            <xs:pattern value="[0-9]+"/>
            <xs:minLength value="1"/>
            <xs:maxLength value="2"/>
        </xs:restriction>
    </xs:simpleType>

    <!-- CVV Type -->
    <xs:simpleType name="CvvType">
        <xs:restriction base="xs:token">
            <xs:pattern value="[0-9]+"/>
            <xs:minLength value="3"/>
            <xs:maxLength value="4"/>
        </xs:restriction>
    </xs:simpleType>

    <!-- Issue Number Type -->
    <xs:simpleType name="IssueNumberType">
        <xs:restriction base="xs:token">
            <xs:pattern value="[0-9]+"/>
            <xs:minLength value="1"/>
            <xs:maxLength value="3"/>
        </xs:restriction>
    </xs:simpleType>

    <!-- Card Expiry / Issue Date Type -->
    <xs:simpleType name="CardDateType">
        <xs:restriction base="xs:token">
            <xs:pattern value="([0][0-9]|[1][0-2])20[0-9]{2}"/>
        </xs:restriction>
    </xs:simpleType>

    <!-- Status Name Type -->
    <xs:simpleType name="StatusNameType">
        <xs:restriction base="xs:token">
            <xs:enumeration value="Error"/>
            <xs:enumeration value="Pending"/>
            <xs:enumeration value="Cancelled"/>
            <xs:enumeration value="Completed"/>
            <xs:enumeration value="RiskRejected"/>
            <xs:enumeration value="ValidationError"/>
            <xs:enumeration value="WebRedirectRequired"/>
            <xs:enumeration value="ThreeDSecureRedirectRequired"/>
            <xs:enumeration value="VaultFailure"/>
        </xs:restriction>
    </xs:simpleType>

    <!-- Card Number Type -->
    <xs:simpleType name="CardNumberType">
        <xs:restriction base="xs:token">
            <xs:pattern value="[0-9x]+"/>
            <xs:minLength value="13"/>
            <xs:maxLength value="19"/>
        </xs:restriction>
    </xs:simpleType>

    <!-- Virtual Card Type -->
    <xs:complexType name="VirtualCardType">
        <xs:sequence>
            <xs:element maxOccurs="1" minOccurs="1" name="CardNumber" type="xspg:CardNumberType"/>
            <xs:element maxOccurs="1" minOccurs="1" name="CardExpiryDate" type="xspg:CardDateType"/>
            <xs:element maxOccurs="1" minOccurs="1" name="Eci" type="xs:token"/>
        </xs:sequence>
    </xs:complexType>

    <!-- Risk Details Type -->
    <xs:complexType name="RiskDetailsType">
        <xs:sequence>
            <xs:element maxOccurs="1" minOccurs="0" name="MerchantAdviseCode" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="BlockStatus" type="xspg:RiskBlockStatusType"/>
        </xs:sequence>
    </xs:complexType>

    <!-- Risk Block Status Type-->
    <xs:complexType name="RiskBlockStatusType">
        <xs:sequence>
            <xs:element maxOccurs="1" minOccurs="0" name="Permanent" type="xs:boolean"/>
            <xs:element maxOccurs="1" minOccurs="0" name="UntilDate" type="xs:dateTime"/>
        </xs:sequence>
    </xs:complexType>

    <!-- Status Type -->
    <xs:complexType name="StatusType">
        <xs:sequence>
            <xs:element maxOccurs="1" minOccurs="0" name="TransactionId" type="xs:string"/>
            <xs:element maxOccurs="1" minOccurs="0" name="Reference" type="xs:string"/>
            <xs:element maxOccurs="1" minOccurs="0" name="AcquirerCode" type="xs:string"/>

            <!-- Used for if errors occur in code -->
            <xs:element maxOccurs="1" minOccurs="0" name="StatusName" type="xspg:StatusNameType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="StatusDetail" type="xs:token"/>

            <xs:element maxOccurs="1" minOccurs="0" name="AuthCode" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="PayRequestId" type="xs:token"/>

            <xs:element maxOccurs="1" minOccurs="0" name="VaultId" type="xs:token"/>

            <xs:element maxOccurs="unbounded" minOccurs="0" name="PayVaultData" type="xspg:VaultDataType"/>

            <xs:element maxOccurs="1" minOccurs="0" name="TransactionStatusCode" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="TransactionStatusDescription" type="xs:token"/>

            <xs:element maxOccurs="1" minOccurs="0" name="ResultCode" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="ResultDescription" type="xs:token"/>

            <xs:element maxOccurs="1" minOccurs="0" name="Currency" type="xspg:CurrencyType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="Amount" type="xs:int"/>

            <xs:element maxOccurs="1" minOccurs="0" name="RequestedCurrency" type="xspg:CurrencyType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="RequestedAmount" type="xs:int"/>
            <xs:element maxOccurs="1" minOccurs="0" name="ConversionRate" type="xs:token"/>

            <xs:element maxOccurs="1" minOccurs="0" name="RiskIndicator" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="PaymentType" type="xspg:PaymentType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="BillingDescriptor" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="DateTime" type="xs:dateTime"/>
            <xs:element maxOccurs="1" minOccurs="0" name="TransactionType" type="xspg:TransactionType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="OriginalRecurringBankReference" type="xs:string"/>
            <xs:element maxOccurs="1" minOccurs="0" name="ThreeDSecureDetails" type="xspg:ThreeDSecureDetailsType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="RiskDetails" type="xspg:RiskDetailsType"/>
        </xs:sequence>
    </xs:complexType>

    <!-- Key Value Pair -->
    <xs:complexType name="KeyValueType">
        <xs:sequence>
            <xs:element maxOccurs="1" minOccurs="1" name="key" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="1" name="value" type="xs:token"/>
        </xs:sequence>
    </xs:complexType>

    <!-- Vault data -->
    <xs:complexType name="VaultDataType">
        <xs:sequence>
            <xs:element maxOccurs="1" minOccurs="1" name="name" type="xspg:VaultKeyType"/>
            <xs:element maxOccurs="1" minOccurs="1" name="value" type="xs:token"/>
        </xs:sequence>
    </xs:complexType>

    <!-- Redirect Object -->
    <xs:complexType name="RedirectRequestType">
        <xs:sequence>
            <xs:element name="NotifyUrl" type="xs:token"/>
            <xs:element name="ReturnUrl" type="xs:token"/>
            <xs:element default="_self" maxOccurs="1" minOccurs="0" name="Target" type="xs:token"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="RedirectResponseType">
        <xs:sequence>
            <xs:element maxOccurs="1" minOccurs="1" name="RedirectUrl" type="xs:token"/>
            <xs:element maxOccurs="unbounded" minOccurs="0" name="UrlParams" type="xspg:KeyValueType"/>
        </xs:sequence>
    </xs:complexType>


    <!-- Instructions Object -->
    <xs:complexType name="InstructionsResponseType">
        <xs:sequence>
            <xs:element maxOccurs="1" minOccurs="0" name="Instruction" type="xs:token"/>
        </xs:sequence>
    </xs:complexType>

    <!-- Yes / No / Unknown -->
    <xs:simpleType name="YNU">
        <xs:restriction base="xs:token">
            <xs:enumeration value="Y"/>
            <xs:enumeration value="N"/>
            <xs:enumeration value="U"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="YNUA">
        <xs:restriction base="xs:token">
            <xs:enumeration value="Y"/>
            <xs:enumeration value="N"/>
            <xs:enumeration value="U"/>
            <xs:enumeration value="A"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="EnrolledStatusType">
        <xs:restriction base="xs:token">
            <xs:enumeration value="Y"/>
            <xs:enumeration value="N"/>
            <xs:enumeration value="U"/>
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="PaResStatusType">
        <xs:restriction base="xs:token">
            <xs:enumeration value="Y"/>
            <xs:enumeration value="N"/>
            <xs:enumeration value="U"/>
            <xs:enumeration value="A"/>
            <xs:enumeration value="B"/>
            <xs:enumeration value="R"/>
            <xs:enumeration value="I"/>
        </xs:restriction>
    </xs:simpleType>

    <!-- 3D Secure Object -->
    <xs:complexType name="ThreeDSecureDetailsType">
        <xs:sequence>
            <xs:element maxOccurs="1" minOccurs="0" name="Enrolled" type="xspg:EnrolledStatusType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="ParesStatus" type="xspg:PaResStatusType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="Eci" type="xs:token"/>
        </xs:sequence>
    </xs:complexType>

    <!-- 3D Secure Object -->
    <xs:complexType name="ThreeDSecureType">
        <xs:sequence>
            <xs:element name="Enrolled" type="xspg:YNU"/>
            <xs:element name="Paresstatus" type="xspg:YNUA"/>
            <xs:element name="Eci" type="xs:token"/>
            <xs:element name="Xid" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="Cavv" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="IssuerAuthCode" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="AcsReferenceNumber" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="ACSTransId" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="DSTransId" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="MessageVersion" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="ServerTransId" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="TransStatus" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="CavvAlgorithm" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="ProtocolVersion" type="xs:token"/>
        </xs:sequence>
    </xs:complexType>


    <!-- ++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
    <!-- ++++++++++++ Request Response Types ++++++++++++++++ -->
    <!-- ++++++++++++++++++++++++++++++++++++++++++++++++++++ -->

    <!-- Account Status Inquiry Request -->
    <xs:complexType name="AccountStatusInquiryRequestType">
        <xs:sequence>
            <xs:element name="Account" type="xspg:PayGateAccountType"/>
            <xs:element maxOccurs="1" minOccurs="1" name="Customer" type="xspg:PersonType"/>
            <xs:choice>
                <xs:sequence>
                    <xs:element maxOccurs="1" minOccurs="1" name="CardNumber" type="xspg:CardNumberType"/>
                    <xs:element maxOccurs="1" minOccurs="1" name="CardExpiryDate" type="xspg:CardDateType"/>
                </xs:sequence>
                <xs:sequence>
                    <xs:element maxOccurs="1" minOccurs="1" name="VaultId" type="xs:token"/>
                </xs:sequence>
            </xs:choice>
            <xs:element maxOccurs="1" minOccurs="0" name="CVV" type="xspg:CvvType"/>
            <xs:element default="false" maxOccurs="1" minOccurs="0" name="Vault" type="xs:boolean"/>
            <xs:element maxOccurs="1" minOccurs="0" name="Redirect" type="xspg:RedirectRequestType"/>
            <xs:element name="Order" type="xspg:OrderType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="AcquirerInfo" type="xspg:AcquirerInfoType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="ThreeDSecure" type="xspg:ThreeDSecureType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="BillingDescriptor" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="Recurring" type="xspg:RecurringType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="Facilitator" type="xspg:FacilitatorType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="Geolocation" type="xspg:GeolocationType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="ServiceGeolocation" type="xspg:GeolocationType"/>
            <xs:element maxOccurs="unbounded" minOccurs="0" name="UserDefinedFields" type="xspg:KeyValueType"/>
        </xs:sequence>
    </xs:complexType>


    <!-- Credit Card Payment Request -->
    <xs:complexType name="CardPaymentRequestType">
        <xs:sequence>
            <xs:element name="Account" type="xspg:PayGateAccountType"/>
            <xs:element maxOccurs="1" minOccurs="1" name="Customer" type="xspg:PersonType"/>
            <xs:choice>
                <xs:sequence>
                    <xs:element maxOccurs="1" minOccurs="1" name="CardNumber" type="xspg:CardNumberType"/>
                    <xs:element name="CardExpiryDate" type="xspg:CardDateType"/>
                </xs:sequence>
                <xs:sequence>
                    <xs:element maxOccurs="1" minOccurs="1" name="VaultId" type="xs:token"/>
                </xs:sequence>
            </xs:choice>
            <xs:element maxOccurs="1" minOccurs="0" name="CardIssueDate" type="xspg:CardDateType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="CardIssueNumber" type="xspg:IssueNumberType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="CVV" type="xspg:CvvType"/>
            <xs:element default="false" maxOccurs="1" minOccurs="0" name="Vault" type="xs:boolean"/>
            <xs:element maxOccurs="1" minOccurs="0" name="BudgetPeriod" type="xspg:BudgetPeriodType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="Redirect" type="xspg:RedirectRequestType"/>
            <xs:element name="Order" type="xspg:OrderType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="AcquirerInfo" type="xspg:AcquirerInfoType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="ThreeDSecure" type="xspg:ThreeDSecureType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="Risk" type="xspg:RiskType"/>
            <xs:element maxOccurs="unbounded" minOccurs="0" name="UserDefinedFields" type="xspg:KeyValueType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="BillingDescriptor" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="Recurring" type="xspg:RecurringType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="Facilitator" type="xspg:FacilitatorType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="CvvToggle" type="xs:boolean"/>
            <xs:element maxOccurs="1" minOccurs="0" name="Geolocation" type="xspg:GeolocationType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="ServiceGeolocation" type="xspg:GeolocationType"/>
        </xs:sequence>
    </xs:complexType>

    <!-- Facilitator Type -->
    <xs:complexType name="FacilitatorType">
        <xs:sequence>
            <xs:element maxOccurs="1" minOccurs="0" name="PaymentFacilitatorId" type="xs:string"/>
            <xs:element maxOccurs="1" minOccurs="0" name="AcceptorTaxId" type="xs:string"/>
            <xs:element maxOccurs="1" minOccurs="0" name="SubMerchantId" type="xs:string"/>
            <xs:element maxOccurs="1" minOccurs="0" name="SubMerchantName" type="xs:string"/>
            <xs:element maxOccurs="1" minOccurs="0" name="SubMerchantTaxId" type="xs:string"/>
            <xs:element maxOccurs="1" minOccurs="0" name="IndependentSaleOrg" type="xs:string"/>
            <xs:element maxOccurs="1" minOccurs="0" name="FacilitatorName" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>

    <!-- Recurring Type -->
    <xs:complexType name="RecurringType">
        <xs:sequence>
            <xs:element default="false" maxOccurs="1" minOccurs="0" name="InitialAuth" type="xs:boolean"/>
            <xs:element maxOccurs="1" minOccurs="0" name="RecurringTransactionType" type="xspg:RecurringTransactionType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="InitiatedType" type="xspg:InitiatedType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="OriginalRecurringReferenceID" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>

    <!-- Credit Card Payment Response -->
    <xs:complexType name="CardPaymentResponseType">
        <xs:sequence>
            <xs:element name="Status" type="xspg:StatusType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="Redirect" type="xspg:RedirectResponseType"/>
            <xs:element maxOccurs="unbounded" minOccurs="0" name="UserDefinedFields" type="xspg:KeyValueType"/>
        </xs:sequence>
    </xs:complexType>

    <!-- Single Inquiry Response -->
    <xs:complexType name="AccountStatusInquiryResponseType">
        <xs:sequence>
            <xs:element name="Status" type="xspg:StatusType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="Redirect" type="xspg:RedirectResponseType"/>
            <xs:element maxOccurs="unbounded" minOccurs="0" name="UserDefinedFields" type="xspg:KeyValueType"/>
        </xs:sequence>
    </xs:complexType>

    <!-- Bank Payment Request -->
    <xs:complexType name="BankPaymentRequestType">
        <xs:sequence>
            <xs:element name="Account" type="xspg:PayGateAccountType"/>
            <xs:element maxOccurs="1" minOccurs="1" name="Customer" type="xspg:PersonType"/>
            <xs:element maxOccurs="1" minOccurs="1" name="AccountNumber" type="xs:token"/>
            <xs:choice>
                <xs:sequence>
                    <xs:element maxOccurs="1" minOccurs="1" name="AccountHolder" type="xs:token"/>
                    <xs:element maxOccurs="1" minOccurs="0" name="BankAccountType" type="xspg:BankAccountType"/>
                    <xs:element maxOccurs="1" minOccurs="0" name="BankCode" type="xs:token"/>
                    <xs:element maxOccurs="1" minOccurs="0" name="BankName" type="xs:token"/>
                    <xs:element maxOccurs="1" minOccurs="0" name="BIC" type="xs:token"/>
                    <xs:element maxOccurs="1" minOccurs="0" name="IBAN" type="xs:token"/>
                    <xs:element maxOccurs="1" minOccurs="0" name="Country" type="xspg:CountryType"/>
                </xs:sequence>
                <xs:sequence>
                    <xs:element maxOccurs="1" minOccurs="1" name="VaultId" type="xs:token"/>
                </xs:sequence>
            </xs:choice>
            <xs:element default="false" maxOccurs="1" minOccurs="0" name="Vault" type="xs:boolean"/>
            <xs:element maxOccurs="1" minOccurs="0" name="BudgetPeriod" type="xspg:BudgetPeriodType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="Redirect" type="xspg:RedirectRequestType"/>
            <xs:element name="Order" type="xspg:OrderType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="ThreeDSecure" type="xspg:ThreeDSecureType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="Risk" type="xspg:RiskType"/>
            <xs:element maxOccurs="unbounded" minOccurs="0" name="UserDefinedFields" type="xspg:KeyValueType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="BillingDescriptor" type="xs:token"/>
        </xs:sequence>
    </xs:complexType>

    <!-- Bank Payment Response -->
    <xs:complexType name="BankPaymentResponseType">
        <xs:sequence>
            <xs:element name="Status" type="xspg:StatusType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="Redirect" type="xspg:RedirectResponseType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="Instructions" type="xspg:InstructionsResponseType"/>
            <xs:element maxOccurs="unbounded" minOccurs="0" name="UserDefinedFields" type="xspg:KeyValueType"/>
        </xs:sequence>
    </xs:complexType>

    <!-- Query Request -->
    <xs:complexType name="QueryRequestType">
        <xs:sequence>
            <xs:element name="Account" type="xspg:PayGateAccountType"/>
            <xs:choice>
                <xs:element maxOccurs="1" minOccurs="1" name="TransactionId" type="xs:string"/>
                <xs:element maxOccurs="1" minOccurs="1" name="PayRequestId" type="xs:token"/>
                <xs:sequence>
                    <xs:element maxOccurs="1" minOccurs="1" name="MerchantOrderId" type="xs:token"/>
                    <xs:element maxOccurs="1" minOccurs="0" name="TransactionType" type="xspg:QueryTransactionType"/>
                </xs:sequence>
            </xs:choice>
            <xs:element maxOccurs="unbounded" minOccurs="0" name="UserDefinedFields" type="xspg:KeyValueType"/>
        </xs:sequence>
    </xs:complexType>

    <!-- Query Response -->
    <xs:complexType name="QueryResponseType">
        <xs:sequence>
            <xs:element name="Status" type="xspg:StatusType"/>
            <xs:element maxOccurs="unbounded" minOccurs="0" name="UserDefinedFields" type="xspg:KeyValueType"/>
        </xs:sequence>
    </xs:complexType>

    <!-- Settle Request -->
    <xs:complexType name="SettleRequestType">
        <xs:sequence>
            <xs:element name="Account" type="xspg:PayGateAccountType"/>
            <xs:choice>
                <xs:element maxOccurs="1" minOccurs="1" name="TransactionId" type="xs:string"/>
                <xs:element maxOccurs="1" minOccurs="1" name="MerchantOrderId" type="xs:token"/>
            </xs:choice>
            <xs:element maxOccurs="1" minOccurs="0" name="Amount" type="xs:int"/>
            <xs:element maxOccurs="unbounded" minOccurs="0" name="UserDefinedFields" type="xspg:KeyValueType"/>
        </xs:sequence>
    </xs:complexType>

    <!-- Settle Response -->
    <xs:complexType name="SettleResponseType">
        <xs:sequence>
            <xs:element name="Status" type="xspg:StatusType"/>
            <xs:element maxOccurs="unbounded" minOccurs="0" name="UserDefinedFields" type="xspg:KeyValueType"/>
        </xs:sequence>
    </xs:complexType>

    <!-- Refund Request -->
    <xs:complexType name="RefundRequestType">
        <xs:sequence>
            <xs:element name="Account" type="xspg:PayGateAccountType"/>
            <xs:choice>
                <xs:element maxOccurs="1" minOccurs="1" name="TransactionId" type="xs:string"/>
                <xs:element maxOccurs="1" minOccurs="1" name="MerchantOrderId" type="xs:token"/>
            </xs:choice>
            <xs:element maxOccurs="1" minOccurs="0" name="Amount" type="xs:int"/>
            <xs:element maxOccurs="1" minOccurs="0" name="Reference" type="xs:string"/>
            <xs:element maxOccurs="unbounded" minOccurs="0" name="UserDefinedFields" type="xspg:KeyValueType"/>
        </xs:sequence>
    </xs:complexType>

    <!-- Refund Response -->
    <xs:complexType name="RefundResponseType">
        <xs:sequence>
            <xs:element name="Status" type="xspg:StatusType"/>
            <xs:element maxOccurs="unbounded" minOccurs="0" name="UserDefinedFields" type="xspg:KeyValueType"/>
        </xs:sequence>
    </xs:complexType>

    <!-- Void Transaction Request -->
    <xs:complexType name="VoidRequestType">
        <xs:sequence>
            <xs:element name="Account" type="xspg:PayGateAccountType"/>
            <xs:choice>
                <xs:element maxOccurs="1" minOccurs="1" name="TransactionId" type="xs:string"/>
                <xs:element maxOccurs="1" minOccurs="1" name="MerchantOrderId" type="xs:token"/>
            </xs:choice>
            <xs:element maxOccurs="1" minOccurs="0" name="PaymentType" type="xspg:PaymentType"/>
            <xs:element maxOccurs="1" minOccurs="1" name="TransactionType" type="xspg:TransactionType"/>
            <xs:element maxOccurs="unbounded" minOccurs="0" name="UserDefinedFields" type="xspg:KeyValueType"/>
        </xs:sequence>
    </xs:complexType>

    <!-- Void Transaction Response -->
    <xs:complexType name="VoidResponseType">
        <xs:sequence>
            <xs:sequence>
                <xs:element name="Status" type="xspg:StatusType"/>
                <xs:element maxOccurs="unbounded" minOccurs="0" name="UserDefinedFields" type="xspg:KeyValueType"/>
            </xs:sequence>
        </xs:sequence>
    </xs:complexType>

	<!-- Web Payment Request -->
	<xs:complexType name="WebPaymentRequestType">
		<xs:sequence>
			<xs:element name="Account" type="xspg:PayGateAccountType"/>
			<xs:element maxOccurs="1" minOccurs="1" name="Customer" type="xspg:PersonType"/>
			<xs:element default="false" maxOccurs="1" minOccurs="0" name="Vault" type="xs:boolean"/>
			<xs:element maxOccurs="1" minOccurs="0" name="VaultId" type="xs:token"/>
			<xs:element maxOccurs="unbounded" minOccurs="0" name="PaymentType" type="xspg:PaymentType"/>
			<xs:element name="Redirect" type="xspg:RedirectRequestType"/>
			<xs:element name="Order" type="xspg:OrderType"/>
			<xs:element maxOccurs="1" minOccurs="0" name="ThreeDSecure" type="xspg:ThreeDSecureType"/>
			<xs:element maxOccurs="1" minOccurs="0" name="Risk" type="xspg:RiskType"/>
			<xs:element maxOccurs="unbounded" minOccurs="0" name="UserDefinedFields" type="xspg:KeyValueType"/>
			<xs:element maxOccurs="1" minOccurs="0" name="BillingDescriptor" type="xs:token"/>
			<xs:element maxOccurs="1" minOccurs="0" name="Facilitator" type="xspg:FacilitatorType"/>
			<xs:element maxOccurs="1" minOccurs="0" name="Geolocation" type="xspg:GeolocationType"/>
			<xs:element maxOccurs="1" minOccurs="0" name="ServiceGeolocation" type="xspg:GeolocationType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="AcquirerInfo" type="xspg:AcquirerInfoType"/>
			<xs:element maxOccurs="1" minOccurs="0" name="Recurring" type="xspg:RecurringType"/>
			<xs:element maxOccurs="1" minOccurs="0" name="BudgetPeriod" type="xspg:BudgetPeriodType"/>
		</xs:sequence>
	</xs:complexType>

    <!-- Web Payment Response -->
    <xs:complexType name="WebPaymentResponseType">
        <xs:sequence>
            <xs:element name="Status" type="xspg:StatusType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="Redirect" type="xspg:RedirectResponseType"/>
            <xs:element maxOccurs="unbounded" minOccurs="0" name="UserDefinedFields" type="xspg:KeyValueType"/>
        </xs:sequence>
    </xs:complexType>

    <!-- Token Payment Request -->
    <xs:complexType name="TokenPaymentRequestType">
        <xs:sequence>
            <xs:element name="Account" type="xspg:PayGateAccountType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="Customer" type="xspg:PersonType"/>
            <xs:element maxOccurs="1" minOccurs="1" name="Token" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="1" name="TokenDetail" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="VirtualCard" type="xspg:VirtualCardType"/>
            <xs:element default="false" maxOccurs="1" minOccurs="0" name="Vault" type="xs:boolean"/>
            <xs:element maxOccurs="1" minOccurs="0" name="Redirect" type="xspg:RedirectRequestType"/>
            <xs:element name="Order" type="xspg:OrderType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="ThreeDSecure" type="xspg:ThreeDSecureType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="Risk" type="xspg:RiskType"/>
            <xs:element maxOccurs="unbounded" minOccurs="0" name="UserDefinedFields" type="xspg:KeyValueType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="BillingDescriptor" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="Reference" type="xs:string"/>
            <xs:element maxOccurs="1" minOccurs="0" name="Facilitator" type="xspg:FacilitatorType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="Geolocation" type="xspg:GeolocationType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="ServiceGeolocation" type="xspg:GeolocationType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="AcquirerInfo" type="xspg:AcquirerInfoType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="Recurring" type="xspg:RecurringType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="TokenizationInfo" type="xspg:TokenizationInfoType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="CVV" type="xspg:CvvType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="BudgetPeriod" type="xspg:BudgetPeriodType"/>
        </xs:sequence>
    </xs:complexType>

    <!--  Tokenization Info Object  -->
    <xs:complexType name="TokenizationInfoType">
        <xs:sequence>
            <xs:element maxOccurs="1" minOccurs="1" name="TokenRequestorId" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="1" name="TokenExpiryDate" type="xspg:CardDateType"/>
            <xs:element maxOccurs="1" minOccurs="1" name="TokenCryptogram" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="TokenEci" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="1" name="MaskedCardNumber" type="xspg:MaskedCardNumberType"/>
            <xs:element maxOccurs="1" minOccurs="1" name="CardExpiryDate" type="xspg:CardDateType"/>
        </xs:sequence>
    </xs:complexType>

    <!--  Masked Card Number Type -->
    <xs:simpleType name="MaskedCardNumberType">
        <xs:restriction base="xs:string">
            <xs:pattern value="\d{6}[\*]{6}\d{4}"/>
        </xs:restriction>
    </xs:simpleType>

    <!-- Token Payment Response -->
    <xs:complexType name="TokenPaymentResponseType">
        <xs:sequence>
            <xs:element name="Status" type="xspg:StatusType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="Redirect" type="xspg:RedirectResponseType"/>
            <xs:element maxOccurs="unbounded" minOccurs="0" name="UserDefinedFields" type="xspg:KeyValueType"/>
        </xs:sequence>
    </xs:complexType>

    <!-- Card Payout Request -->
    <xs:complexType name="CardPayoutRequestType">
        <xs:sequence>
            <xs:element name="Account" type="xspg:PayGateAccountType"/>
            <xs:element maxOccurs="1" minOccurs="1" name="Customer" type="xspg:PersonType"/>
            <xs:element maxOccurs="1" minOccurs="1" name="CardNumber" type="xspg:CardNumberType"/>
            <xs:element maxOccurs="1" minOccurs="1" name="CardExpiryDate" type="xspg:CardDateType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="CVV" type="xspg:CvvType"/>
            <xs:element name="Order" type="xspg:OrderType"/>
            <xs:element maxOccurs="unbounded" minOccurs="0" name="UserDefinedFields" type="xspg:KeyValueType"/>
        </xs:sequence>
    </xs:complexType>

    <!-- Card Payout Response -->
    <xs:complexType name="CardPayoutResponseType">
        <xs:sequence>
            <xs:element name="Status" type="xspg:StatusType"/>
            <xs:element maxOccurs="unbounded" minOccurs="0" name="UserDefinedFields" type="xspg:KeyValueType"/>
        </xs:sequence>
    </xs:complexType>

    <!-- Bank Payout Request -->
    <xs:complexType name="BankPayoutRequestType">
        <xs:sequence>
            <xs:element name="Account" type="xspg:PayGateAccountType"/>
            <xs:element maxOccurs="1" minOccurs="1" name="Customer" type="xspg:PersonType"/>
            <xs:element maxOccurs="1" minOccurs="1" name="AccountHolder" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="1" name="AccountNumber" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="BankAccountType" type="xspg:BankAccountType"/>
            <xs:element maxOccurs="1" minOccurs="1" name="BankCode" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="BankName" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="BIC" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="IBAN" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="Country" type="xspg:CountryType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="Reference" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="PayoutType" type="xspg:PayoutType"/>
            <xs:element name="Order" type="xspg:OrderType"/>
            <xs:element maxOccurs="unbounded" minOccurs="0" name="UserDefinedFields" type="xspg:KeyValueType"/>
        </xs:sequence>
    </xs:complexType>

    <!-- Bank Payout Response -->
    <xs:complexType name="BankPayoutResponseType">
        <xs:sequence>
            <xs:element name="Status" type="xspg:StatusType"/>
            <xs:element maxOccurs="unbounded" minOccurs="0" name="UserDefinedFields" type="xspg:KeyValueType"/>
        </xs:sequence>
    </xs:complexType>

    <!-- Wallet Payout Request -->
    <xs:complexType name="WalletPayoutRequestType">
        <xs:sequence>
            <xs:element name="Account" type="xspg:PayGateAccountType"/>
            <xs:element maxOccurs="1" minOccurs="1" name="Customer" type="xspg:PersonType"/>
            <xs:element maxOccurs="1" minOccurs="0" name="AccountHolder" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="1" name="AccountNumber" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="1" name="WalletType" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="Country" type="xspg:CountryType"/>
            <xs:element name="Order" type="xspg:OrderType"/>
            <xs:element maxOccurs="unbounded" minOccurs="0" name="UserDefinedFields" type="xspg:KeyValueType"/>
        </xs:sequence>
    </xs:complexType>

    <!-- Wallet Payout Response -->
    <xs:complexType name="WalletPayoutResponseType">
        <xs:sequence>
            <xs:element name="Status" type="xspg:StatusType"/>
            <xs:element maxOccurs="unbounded" minOccurs="0" name="UserDefinedFields" type="xspg:KeyValueType"/>
        </xs:sequence>
    </xs:complexType>

    <!-- Card vault Request -->
    <xs:complexType name="CardVaultRequestType">
        <xs:sequence>
            <xs:element name="Account" type="xspg:PayGateAccountType"/>
            <xs:element maxOccurs="1" minOccurs="1" name="CardNumber" type="xspg:CardNumberType"/>
            <xs:element name="CardExpiryDate" type="xspg:CardDateType"/>
            <xs:element maxOccurs="unbounded" minOccurs="0" name="UserDefinedFields" type="xspg:KeyValueType"/>
        </xs:sequence>
    </xs:complexType>

    <!-- Card vault Response -->
    <xs:complexType name="CardVaultResponseType">
        <xs:sequence>
            <xs:element name="Status" type="xspg:StatusType"/>
            <xs:element maxOccurs="unbounded" minOccurs="0" name="UserDefinedFields" type="xspg:KeyValueType"/>
        </xs:sequence>
    </xs:complexType>

    <!-- Wallet vault Request -->
    <xs:complexType name="WalletVaultRequestType">
        <xs:sequence>
            <xs:element name="Account" type="xspg:PayGateAccountType"/>
            <xs:element maxOccurs="1" minOccurs="1" name="WalletAccount" type="xs:token"/>
            <xs:element maxOccurs="1" minOccurs="0" name="WalletPassword" type="xs:token"/>
            <xs:element maxOccurs="unbounded" minOccurs="0" name="UserDefinedFields" type="xspg:KeyValueType"/>
        </xs:sequence>
    </xs:complexType>

    <!-- Wallet vault Response -->
    <xs:complexType name="WalletVaultResponseType">
        <xs:sequence>
            <xs:element name="Status" type="xspg:StatusType"/>
            <xs:element maxOccurs="unbounded" minOccurs="0" name="UserDefinedFields" type="xspg:KeyValueType"/>
        </xs:sequence>
    </xs:complexType>

    <!-- Vault look up Request -->
    <xs:complexType name="LookUpVaultRequestType">
        <xs:sequence>
            <xs:element name="Account" type="xspg:PayGateAccountType"/>
            <xs:element maxOccurs="1" minOccurs="1" name="VaultId" type="xs:token"/>
            <xs:element maxOccurs="unbounded" minOccurs="0" name="UserDefinedFields" type="xspg:KeyValueType"/>
        </xs:sequence>
    </xs:complexType>

    <!-- Vault look up Response -->
    <xs:complexType name="LookUpVaultResponseType">
        <xs:sequence>
            <xs:element name="Status" type="xspg:StatusType"/>
            <xs:element maxOccurs="unbounded" minOccurs="0" name="UserDefinedFields" type="xspg:KeyValueType"/>
        </xs:sequence>
    </xs:complexType>

    <!-- Vault delete Request -->
    <xs:complexType name="DeleteVaultRequestType">
        <xs:sequence>
            <xs:element name="Account" type="xspg:PayGateAccountType"/>
            <xs:element maxOccurs="1" minOccurs="1" name="VaultId" type="xs:token"/>
            <xs:element maxOccurs="unbounded" minOccurs="0" name="UserDefinedFields" type="xspg:KeyValueType"/>
        </xs:sequence>
    </xs:complexType>

    <!-- Vault delete Response -->
    <xs:complexType name="DeleteVaultResponseType">
        <xs:sequence>
            <xs:element name="Status" type="xspg:StatusType"/>
            <xs:element maxOccurs="unbounded" minOccurs="0" name="UserDefinedFields" type="xspg:KeyValueType"/>
        </xs:sequence>
    </xs:complexType>


    <!-- ++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
    <!-- ++++++++++++ Request Response Elements +++++++++++++ -->
    <!-- ++++++++++++++++++++++++++++++++++++++++++++++++++++ -->

    <xs:element name="PingRequest">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="Account" type="xspg:PayGateAccountType"/>
                <xs:element name="Identifier" type="xs:token"/>
                <xs:element maxOccurs="unbounded" minOccurs="0" name="UserDefinedFields" type="xspg:KeyValueType"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="PingResponse">
        <xs:complexType>
            <xs:sequence>
                <xs:element maxOccurs="unbounded" minOccurs="0" name="PingFields" type="xspg:KeyValueType"/>
                <xs:element maxOccurs="unbounded" minOccurs="0" name="UserDefinedFields" type="xspg:KeyValueType"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="SinglePaymentRequest">
        <xs:complexType>
            <xs:sequence>
                <xs:choice>
                    <xs:element name="CardPaymentRequest" type="xspg:CardPaymentRequestType"/>
                    <xs:element name="WebPaymentRequest" type="xspg:WebPaymentRequestType"/>
                    <xs:element name="TokenPaymentRequest" type="xspg:TokenPaymentRequestType"/>
                    <xs:element name="BankPaymentRequest" type="xspg:BankPaymentRequestType"/>
                    <!-- TODO add vault web payments -->
                </xs:choice>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="SinglePaymentResponse">
        <xs:complexType>
            <xs:sequence>
                <xs:choice>
                    <xs:element name="CardPaymentResponse" type="xspg:CardPaymentResponseType"/>
                    <xs:element name="WebPaymentResponse" type="xspg:WebPaymentResponseType"/>
                    <xs:element name="TokenPaymentResponse" type="xspg:TokenPaymentResponseType"/>
                    <xs:element name="BankPaymentResponse" type="xspg:BankPaymentResponseType"/>
                    <!-- TODO add vault web payments -->
                </xs:choice>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="SingleInquiryRequest">
        <xs:complexType>
            <xs:sequence>
                    <xs:element name="AccountStatusInquiryRequest" type="xspg:AccountStatusInquiryRequestType"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="SingleInquiryResponse">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="AccountStatusInquiryResponse" type="xspg:AccountStatusInquiryResponseType"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="SinglePayoutRequest">
        <xs:complexType>
            <xs:sequence>
                <xs:choice>
                    <xs:element name="CardPayoutRequest" type="xspg:CardPayoutRequestType"/>
                    <xs:element name="BankPayoutRequest" type="xspg:BankPayoutRequestType"/>
                    <xs:element name="WalletPayoutRequest" type="xspg:WalletPayoutRequestType"/>
                </xs:choice>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="SinglePayoutResponse">
        <xs:complexType>
            <xs:sequence>
                <xs:choice>
                    <xs:element name="CardPayoutResponse" type="xspg:CardPayoutResponseType"/>
                    <xs:element name="BankPayoutResponse" type="xspg:BankPayoutResponseType"/>
                    <xs:element name="WalletPayoutResponse" type="xspg:WalletPayoutResponseType"/>
                </xs:choice>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="SingleFollowUpRequest">
        <xs:complexType>
            <xs:sequence>
                <xs:choice>
                    <xs:element name="QueryRequest" type="xspg:QueryRequestType"/>
                    <xs:element name="SettlementRequest" type="xspg:SettleRequestType"/>
                    <xs:element name="RefundRequest" type="xspg:RefundRequestType"/>
                    <xs:element name="VoidRequest" type="xspg:VoidRequestType"/>
                </xs:choice>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="SingleFollowUpResponse">
        <xs:complexType>
            <xs:sequence>
                <xs:choice>
                    <xs:element maxOccurs="unbounded" minOccurs="1" name="QueryResponse" type="xspg:QueryResponseType"/>
                    <xs:element name="SettlementResponse" type="xspg:SettleResponseType"/>
                    <xs:element name="RefundResponse" type="xspg:RefundResponseType"/>
                    <xs:element name="VoidResponse" type="xspg:VoidResponseType"/>
                </xs:choice>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <!-- Vault service -->
    <xs:element name="SingleVaultRequest">
        <xs:complexType>
            <xs:sequence>
                <xs:choice>
                    <xs:element name="CardVaultRequest" type="xspg:CardVaultRequestType"/>
                    <xs:element name="WalletVaultRequest" type="xspg:WalletVaultRequestType"/>
                    <!-- TODO Banking details -->
                    <xs:element name="LookUpVaultRequest" type="xspg:LookUpVaultRequestType"/>
                    <xs:element name="DeleteVaultRequest" type="xspg:DeleteVaultRequestType"/>
                </xs:choice>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="SingleVaultResponse">
        <xs:complexType>
            <xs:sequence>
                <xs:choice>
                    <xs:element name="CardVaultResponse" type="xspg:CardVaultResponseType"/>
                    <xs:element name="WalletVaultResponse" type="xspg:WalletVaultResponseType"/>
                    <!-- TODO Banking details -->
                    <xs:element name="LookUpVaultResponse" type="xspg:LookUpVaultResponseType"/>
                    <xs:element name="DeleteVaultResponse" type="xspg:DeleteVaultResponseType"/>
                </xs:choice>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

</xs:schema>
  </wsdl:types>
  <wsdl:message name="PingResponse">
    <wsdl:part element="tns:PingResponse" name="PingResponse">
    </wsdl:part>
  </wsdl:message>
  <wsdl:message name="SinglePayoutRequest">
    <wsdl:part element="tns:SinglePayoutRequest" name="SinglePayoutRequest">
    </wsdl:part>
  </wsdl:message>
  <wsdl:message name="SinglePayoutResponse">
    <wsdl:part element="tns:SinglePayoutResponse" name="SinglePayoutResponse">
    </wsdl:part>
  </wsdl:message>
  <wsdl:message name="SinglePaymentRequest">
    <wsdl:part element="tns:SinglePaymentRequest" name="SinglePaymentRequest">
    </wsdl:part>
  </wsdl:message>
  <wsdl:message name="SingleInquiryRequest">
    <wsdl:part element="tns:SingleInquiryRequest" name="SingleInquiryRequest">
    </wsdl:part>
  </wsdl:message>
  <wsdl:message name="SingleInquiryResponse">
    <wsdl:part element="tns:SingleInquiryResponse" name="SingleInquiryResponse">
    </wsdl:part>
  </wsdl:message>
  <wsdl:message name="PingRequest">
    <wsdl:part element="tns:PingRequest" name="PingRequest">
    </wsdl:part>
  </wsdl:message>
  <wsdl:message name="SingleFollowUpRequest">
    <wsdl:part element="tns:SingleFollowUpRequest" name="SingleFollowUpRequest">
    </wsdl:part>
  </wsdl:message>
  <wsdl:message name="SingleFollowUpResponse">
    <wsdl:part element="tns:SingleFollowUpResponse" name="SingleFollowUpResponse">
    </wsdl:part>
  </wsdl:message>
  <wsdl:message name="SingleVaultRequest">
    <wsdl:part element="tns:SingleVaultRequest" name="SingleVaultRequest">
    </wsdl:part>
  </wsdl:message>
  <wsdl:message name="SinglePaymentResponse">
    <wsdl:part element="tns:SinglePaymentResponse" name="SinglePaymentResponse">
    </wsdl:part>
  </wsdl:message>
  <wsdl:message name="SingleVaultResponse">
    <wsdl:part element="tns:SingleVaultResponse" name="SingleVaultResponse">
    </wsdl:part>
  </wsdl:message>
  <wsdl:portType name="PayHOST">
    <wsdl:operation name="Ping">
      <wsdl:input message="tns:PingRequest" name="PingRequest">
    </wsdl:input>
      <wsdl:output message="tns:PingResponse" name="PingResponse">
    </wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="SinglePayout">
      <wsdl:input message="tns:SinglePayoutRequest" name="SinglePayoutRequest">
    </wsdl:input>
      <wsdl:output message="tns:SinglePayoutResponse" name="SinglePayoutResponse">
    </wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="SinglePayment">
      <wsdl:input message="tns:SinglePaymentRequest" name="SinglePaymentRequest">
    </wsdl:input>
      <wsdl:output message="tns:SinglePaymentResponse" name="SinglePaymentResponse">
    </wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="SingleInquiry">
      <wsdl:input message="tns:SingleInquiryRequest" name="SingleInquiryRequest">
    </wsdl:input>
      <wsdl:output message="tns:SingleInquiryResponse" name="SingleInquiryResponse">
    </wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="SingleFollowUp">
      <wsdl:input message="tns:SingleFollowUpRequest" name="SingleFollowUpRequest">
    </wsdl:input>
      <wsdl:output message="tns:SingleFollowUpResponse" name="SingleFollowUpResponse">
    </wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="SingleVault">
      <wsdl:input message="tns:SingleVaultRequest" name="SingleVaultRequest">
    </wsdl:input>
      <wsdl:output message="tns:SingleVaultResponse" name="SingleVaultResponse">
    </wsdl:output>
    </wsdl:operation>
  </wsdl:portType>
  <wsdl:binding name="PayHOSTSoap11" type="tns:PayHOST">
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="Ping">
      <soap:operation soapAction=""/>
      <wsdl:input name="PingRequest">
        <soap:body use="literal"/>
      </wsdl:input>
      <wsdl:output name="PingResponse">
        <soap:body use="literal"/>
      </wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="SinglePayout">
      <soap:operation soapAction=""/>
      <wsdl:input name="SinglePayoutRequest">
        <soap:body use="literal"/>
      </wsdl:input>
      <wsdl:output name="SinglePayoutResponse">
        <soap:body use="literal"/>
      </wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="SinglePayment">
      <soap:operation soapAction=""/>
      <wsdl:input name="SinglePaymentRequest">
        <soap:body use="literal"/>
      </wsdl:input>
      <wsdl:output name="SinglePaymentResponse">
        <soap:body use="literal"/>
      </wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="SingleInquiry">
      <soap:operation soapAction=""/>
      <wsdl:input name="SingleInquiryRequest">
        <soap:body use="literal"/>
      </wsdl:input>
      <wsdl:output name="SingleInquiryResponse">
        <soap:body use="literal"/>
      </wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="SingleFollowUp">
      <soap:operation soapAction=""/>
      <wsdl:input name="SingleFollowUpRequest">
        <soap:body use="literal"/>
      </wsdl:input>
      <wsdl:output name="SingleFollowUpResponse">
        <soap:body use="literal"/>
      </wsdl:output>
    </wsdl:operation>
    <wsdl:operation name="SingleVault">
      <soap:operation soapAction=""/>
      <wsdl:input name="SingleVaultRequest">
        <soap:body use="literal"/>
      </wsdl:input>
      <wsdl:output name="SingleVaultResponse">
        <soap:body use="literal"/>
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>
  <wsdl:service name="PayHOSTService">
    <wsdl:port binding="tns:PayHOSTSoap11" name="PayHOSTSoap11">
      <soap:address location="https://secure.paygate.co.za/PayHost/process.trans"/>
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>