Services

he Merchant Services Web-Services Platform enables partner Merchants to integrate with the Paga platform to enable Paga to process automated real-time payment transactions with the Merchant's systems using secure SOAP Web Services. This specification describes the web-services interfaces that the Merchant must implement for automated integration using Web-Services

The services that are described in this specification are:


  • Get Supported Integration Services -This service allows Paga to verify which of the integration services listed here the merchant implementation supports in order to configure subsequent interaction with the merchant platform.. This service is mandatory.
  • Payment Execution -This service provides the mechanism for Paga to submit a payment notification to the merchant systems and receive confirmation of its approval. This service is mandatory.
  • Customer Validation - This service allows Paga to verify the existence of a customer in good standing with the merchant using several customer properties. This service is optional.
  • Query Payments- This service provides the mechanism for Paga to request historical payment(s) records from the biller. This service is optional.
  • Get Merchant Services - This service provides the mechanism for Paga to request a list of named merchant services and associated service properties provide by the merchant. This service is optional.

1. Get Supported Integration Services


This service is mandatory. 
This service allows Paga to verify which of the integration services listed here the merchant implementation supports in order to configure subsequent interaction with the merchant platform. 
The web service must implement this service in order to provide a list of the services that it supports. The response from the server will include a list of any of the string provided by the IntegrationService simple type list.

Service name: getIntegrationServices

Request

Parameters

Argument NameTypeRequiredDescription
isTtestbooleanRequiredIndication whether the service call is a test call (true) or live call (false). Merchant services must honor this flag in order to provide a continuous way of testing merchant services without impacting live systems.


Sample Request
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:mes="http://pagatech.com/merchant/messages"> 
	<soap:Header/> 
	<soap:Body> 
		<mes:getIntegrationServicesRequest> 
		<mes:isTest>false</mes:isTest> 
		</mes:getIntegrationServicesRequest> 
	</soap:Body> 
</soap:Envelope>


Response Parameters
Argument NameTypeRequiredDescription
services

IntegrationService (restricted string) list

Required (0 or more items)

List of IntegrationService types (string) indicating which integration services are supported

Sample Response
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"> 
	<env:Header/> 
	<env:Body> 
		<paga:getIntegrationServicesResponse xmlns:paga="http://pagatech.com/merchant/messages"> 
			<paga:services>SUBMIT_PAYMENT</paga:services> 
			<paga:services>VALIDATE_CUSTOMER</paga:services> 
			<paga:services>QUERY_PAYMENTS</paga:services> 
		</paga:getIntegrationServicesResponse> 
	</env:Body> 
</env:Envelope>



2. Transaction Execution


This service is mandatory. 
This service provides the mechanism for Paga to submit a payment notification to the merchant systems and receive confirmation of its approval. 
Execution of this service should trigger payment logic in merchant system and then provide response including success/fail result and other properties to Paga system.

Service name: submitTransaction

Request Parameters
Argument NameTypeRequiredDescription

Argument Name

Type

Requirement

Description

isTest

boolean

Required

Indication whether the service call is a test call (true) or live call (false). Merchant services must honor this flag in order to provide a continuous way of testing merchant services without impacting live systems.

Transaction

Transaction

Required

The Transaction object providing the payment transaction details. See Transaction object described in the Schema Objects section

Sample Request
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:mes="http://pagatech.com/merchant/messages">
   <soap:Header/>
   <soap:Body>
      <mes:submitTransactionRequest>
         <mes:isTest>?</mes:isTest>
         <mes:transaction>
            <mes:utcTransactionDateTime>2011-05-01T12:40:00.466</mes:utcTransactionDateTime>
            <mes:totalAmount>45000</mes:totalAmount>
            <mes:isCredit>true</mes:isCredit>
            <mes:pagaTransactionId>172a56a0-3dde-4837-986b-bc8965b1d35f</mes:pagaTransactionId>
            <mes:currency>NGN</mes:currency>
            <mes:customerReference>ABC123456</mes:customerReference>
            <mes:period>4</mes:period>
            <mes:customerFirstName>John</mes:customerFirstName>
            <mes:customerLastName>Doe</mes:customerLastName>
            <mes:serviceAmounts>?</mes:serviceAmounts>
            <mes:transactionChannel>SMS</mes:transactionChannel>
         </mes:transaction>
      </mes:submitTransactionRequest>
   </soap:Body>
</soap:Envelope>


Response Parameters

Argument Name

Type

Requirement

Description

status

Status

Required

The status of the payment attempt. See Status object described in the Schema Objects section

uniqueTransactionId

string

Optional

The unique transaction id of the payment transaction. If one is provided as part of the payment request, this must be the same one, otherwise, one can be generated and provided as part of this response by the Merchant system

customerReference

string

Optional

The Merchant's customer reference number for the customer affected by this payment. This may have been provided as part of the request transaction.

merchantStatus

string

Optional

A merchant-specific status code generated by the merchant coding the result of the transaction

message

string

Optional

A transaction result message generated by the Merchant

confirmationCode

string

Optional

A confirmation value or reference to be provided to the customer in reference to a successful transaction



Sample Response
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
   <env:Header/>
   <env:Body>
      <paga:submitPaymentResponse xmlns:paga="http://pagatech.com/merchant/messages">
         <paga:status>SUCCESS</paga:status>
         <paga:pagaTransactionId>172a56a0-3dde-4837-986b-bc8965b1d35f</paga:pagaTransactionId>
         <paga:merchantTransactionId>000000456</paga:merchantTransactionId>
         <paga:merchantStatus>1000</paga:merchantStatus>
         <paga:message>Successfully executed payment</paga:message>
         <paga:confirmationCode>XHSUR-23724-FSR4</paga:confirmationCode>
      </paga:submitPaymentResponse>
   </env:Body>
</env:Envelope>


3. Customer Validation


This service is optional.
This service allows Paga to verify the existence of a customer in good standing with the merchant using several customer properties.

Service Name: validateCustomer

Request Parameters

Argument Name

Type

Requirement

Description

isTest

boolean

Required

Indication whether the service call is a test call (true) or live call (false). Merchant services must honor this flag in order to provide a continuous way of testing merchant services without impacting live systems.

customerReference

string

Optional

A reference number identifying the customer at the merchant

customerFirstName

string

Optional

Customer's first name

customerLastName

string

Optional

Customer's last name


Sample Request
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:mes="http://pagatech.com/merchant/messages">
   <soap:Header/>
   <soap:Body>
      <mes:validateCustomerRequest>
         <mes:isTest>false</mes:isTest>
         <mes:customerReference>AB4839344-01</mes:customerReference>
      </mes:validateCustomerRequest>
   </soap:Body>
</soap:Envelope>
Response Parameters

Argument Name

Type

Requirement

Description

isValid

boolean

Required

Whether the customer information provided represents a valid customer or not

status

Status

Required

The status of the payment attempt. See Status object described in the Schema Objects section

merchantStatus

string

Optional

A merchant-specific status code generated by the merchant coding the result of the validation attempt

Message

string

Optional

A transaction result message generated by the Merchant

firstNamestringOptionalThe customer's first name
lastNamestringOptionalThe customer's last name
lastPaymentDatedateoptionaldate of last payment by customer
accountStatusCustomerAccountStatusoptionalstatus of customer see CustomerAccountStatus object described in the Schema Objects section
paymentDueDatedateoptionaldate of next due payment
isDisplayedbooleanoptionalthis flag allow the system tot display the customer information on the portal
Sample Response
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
   <env:Header/>
   <env:Body>
      <paga:validateCustomerResponse xmlns:paga="http://pagatech.com/merchant/messages">
         <paga:isValid>true</paga:isValid>
         <paga:status>SUCCESS</paga:status>
         <paga:merchantStatus>0</paga:merchantStatus>
         <paga:message>Successfull validated customer</paga:message>
         <paga:firstName>John</paga:message>
         <paga:lastName>Doe</paga:message>
         <paga:lastPaymentDate>2011-05-26T22:46:05.136Z</paga:message>
         <paga:accountStatus>ACTIVE</paga:message>
         <paga:paymentDueDate>2011-05-26T22:46:05.136Z</paga:message>
         <paga:isDisplayed>true</paga:message>
      </paga:validateCustomerResponse>
   </env:Body>
</env:Envelope>


4. Query Payments


This service is optional.
This service provides the mechanism for Paga to request historical payment(s) records from the biller.

Service Name: queryPayments

Request Parameters

Argument Name

Type

Requirement

Description

isTest

boolean

Required

Indication whether the service call is a test call (true) or live call (false). Merchant services must honor this flag in order to provide a continuous way of testing merchant services without impacting live systems.

transaction

Transaction

Required

A Transaction object whose properties specify the filter to be applied to all transaction records. See Transaction object described in the Schema Objects section.

resultsPerRequest

Integer

Optional

For results paination, the suggested results-per-page for the server to return for the results of the query. The server can choose to return fewer results due to implementation details. The server should not return more results.

resultsPage

string

Optional (required if resultsPerPage is set)

For pagination, if results-per-page is provided, this describes the page of results to be returned by the sever.


Sample Request
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:mes="http://pagatech.com/merchant/messages">
   <soap:Header/>
   <soap:Body>
      <mes:queryPaymentsRequest>
         <mes:isTest>false</mes:isTest>
         <mes:transaction>
            <mes:customerReference>AB4839344-01</mes:customerReference>
            <mes:period>2</mes:period>
         </mes:transaction>
         <mes:resultsPerRequest>20</mes:resultsPerRequest>
         <mes:resultsPage>1</mes:resultsPage>
      </mes:queryPaymentsRequest>
   </soap:Body>
</soap:Envelope>
Response Parameters

Argument Name

Type

Requirement

Description

Results

Transaction list

Optional

The list of Transaction objects matching the query (if any). See Transaction object described in the Schema Objects section.

resultsPerRequest

Integer

Optional

If pagination requested, the contains the actual results per page delivered by the server

resultsPage

string

Optional (required if resultsPerPage is set)

If pagination requested, the contains the actual results page delivered by the server

status

Status

Required

The status of the payment attempt. See Status object described in the Schema Objects section

merchantStatus

string

Optional

A merchant-specific status code generated by the merchant coding the result of the validation attempt

Message

string

Optional

A transaction result message generated by the Merchant


Sample Response
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
   <env:Header/>
   <env:Body>
      <paga:queryPaymentsResponse xmlns:paga="http://pagatech.com/merchant/messages">
         <paga:status>SUCCESS</paga:status>
         <paga:results>
            <paga:utcTransactionDateTime>2011-05-26T22:46:05.136Z</paga:utcTransactionDateTime>
            <paga:totalAmount>10000.32</paga:totalAmount>
            <paga:isCredit>false</paga:isCredit>
            <paga:currency>NGN</paga:currency>
            <paga:customerReference>AB4839344-01</paga:customerReference>
            <paga:period>2</paga:period>
         </paga:results>
         <paga:results>
            <paga:utcTransactionDateTime>2011-05-26T22:49:17.136Z</paga:utcTransactionDateTime>
            <paga:totalAmount>2032.1</paga:totalAmount>
            <paga:isCredit>false</paga:isCredit>
            <paga:currency>NGN</paga:currency>
            <paga:customerReference>AB4839344-01</paga:customerReference>
            <paga:period>2</paga:period>
         </paga:results>
      </paga:queryPaymentsResponse>
   </env:Body>
</env:Envelope>


5. Get Merchant Services


This service is optional.
This service provides the mechanism for Paga to request a list of named merchant services and associated service properties provide by the merchant

Service Name: getMerchantServices

Request Parameters

Argument Name

Type

Requirement

Description

isTest

boolean

Required

Indication whether the service call is a test call (true) or live call (false). Merchant services must honor this flag in order to provide a continuous way of testing merchant services without impacting live systems.


Sample Request
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:mes="http://pagatech.com/merchant/messages">
   <soap:Header/>
   <soap:Body>
      <mes:getMerchantServicesRequest>
         <mes:isTest>false</mes:isTest>
      </mes:getMerchantServicesRequest>
   </soap:Body>
</soap:Envelope>
Response Parameters

Argument Name

Type

Requirement

Description

services

MerhantService list

Required (0 or more items)

List of MerchantService objects indicating which merchant service offerings provided by the merchant. See MerchantService object described in the Schema Objects section

status

Status

Required

The status of the payment attempt. See Status object described in the Schema Objects section

merchantStatus

string

Optional

A merchant-specific status code generated by the merchant coding the result of the validation attempt

Message

string

Optional

A transaction result message generated by the Merchant



Sample Response
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
   <env:Header/>
   <env:Body>
      <paga:getMerchantServicesResponse xmlns:paga="http://pagatech.com/merchant/messages">
         <paga:status>SUCCESS</paga:status>
         <paga:services>
            <paga:name>SILVER PLAN</paga:name>
            <paga:price>32000.0</paga:price>
            <paga:shortCode>SP</paga:shortCode>
            <paga:productCode>XS_SP</paga:productCode>
            <paga:isPublic>true</paga:isPublic>
         </paga:services>
         <paga:services>
            <paga:name>GOLD PLAN</paga:name>
            <paga:price>50000.0</paga:price>
            <paga:shortCode>GP</paga:shortCode>
            <paga:productCode>XS_GP</paga:productCode>
            <paga:isPublic>true</paga:isPublic>
         </paga:services>
      </paga:getMerchantServicesResponse>
   </env:Body>
</env:Envelope>


Schema Objects


The following objects are defined as part of the Merchant Services Web Service Platform schema and are used in the execution of the services described above.
Transaction
The transaction object captures all the details of a financ


Property Name

Type

Requirement

Description

utcTransactionDatetime

dateTime

Optional (required for submission)

The date/time stamp of the transaction, in UTC (GMT) time-zone.

transactionType

TransactionType

Optional (required for submission)

The enumerated transaction type

totalAmount

double

Optional (required for submission)

The total amount value of the transaction

pagaAmount

double

Optional (required for submission)

The gross amount paid as fees to Paga for this transaction

agentAmount

double

Optional (required for submission)

The amount paid to the merchant (if applicable) as part of this transaction

merchantAmount

double

Optional (required for submission)

The gross amount paid to the Merchant as part of this transaction

isCredit

boolean

Optional (required for submission)

Whether the transaction credits the sending customer (true) or debits (false) - This will be true for payment transactions

pagaTransactionId

string

Optional (required for submission)

A common Paga transaction id identifying the transaction. As part of a transaction submission this will be provided by the Paga platform to uniquely identify the transaction to the Merchant. This transaction id is shared with all parties involved in this transaction

merchantTransactionId

string

Optional

A unique transaction id identifying the transaction on the Merchant's system. this may be provided by the merchant in response to a transaction submission in order to provide a reference to Paga for the transaction on the Merchant's system

currency

string

Optional

ISO 4217 currency code of currency in which transaction occurs

customerReference

string


A reference number identifying the customer at the merchant. This may be an account number or other merchant-specific identifier

period

integer


The period in which the transaction occurs.

customerFirstName

string


The first name of the customer subject of the transaction

customerLastName

string


The last name of the customer subject of the transaction

services

MerchantService list


A list of the Merchant's services (as provide by the getMerchantServices() operation) for which this transaction is being made. This allows for specific identification of which services the transaction is for. See MerchantService object described in the Schema Objects section.

channel

Channel

Required

The communication channel (eg. SMS, ONLINE etc.) by which the customer initiated the transaction. See Channel object described in the Schema Objects section

agent


Optional

An identifier of the agent at which the transaction was performed, if the transaction was performed at an agent

location


Optional

The descriptive location of the transaction, if applicable.

description



A description of the transaction

methodOfPayment


Optional

The method of payment used by the customer for the transaction, if applicable and any other required payment details



MerchantService
The MerchantService object describes a merchant-specific service offering along with pricing and coding information.
A MerchantService may be made up of other Merchant services (such as when service offerings are grouped and potentially priced differently in their groupings)


Property Name

Type

Requirement

Description

name

string

Required

The displayed human-readable name of the merchant service

price

double

Required

The price for this service

shortCode

string

Required

The short-code for this service offering - this is just an arbitrary code that must be 5 characters or less which will be used to identify the service on some channels (such as SMS). Each short code must be unique for all services provided by the Merchant

productCode

string

Required

This is a product code which identifies the service in the Merchants systems. This provides the merchant-specific code for the service which will be sent to the merchant system as part of the transaction in order to help identify the service on the Merchant systems.

isPublic

boolean

Required

This is a flag identifying whether this service should be exposed to customers for selection or not.

composition

MerchantService list

Optional

For Merchant services which are made up of other Merchant services, this provides the list of 'children' merchant services which define the parent service.



Channel [Enumeration]
The channel enumeration list all the possible channels through which transactions and other service calls may be initiated on the Paga platform. For some service calls, the initiating channel may be submitted to the Merchant platform.


Value

Description

SMS

Service methods initiated by SMS on the Paga platform

ONLINE

Service methods initiated online on the Paga platform

VOICE

Service methods initiated by voice telephony on the Paga platform

EMAIL

Service methods initiated by email on the Paga platform

USSD

Service methods initiated by USSD on the Paga platform

E_WIDGET

Service methods integrated by an integrated e-widget (Paga e-widget integrated in third-party online platform)



Status [Enumeration]
The status enumeration provides a standard set of status codes by which the Merchant system can respond to to indicate the success or failure state of the attempted service call.


Value

Description

SUCCESS

The execution was processed successfully

CLIENT_ERROR

The execution failed due to some invalid parameters or other aspect of information provided by the client in the request

SERVER_EROR

The execution failed due to an error o the Merchant system side (usually accompanied by a merchant error status code and/or a message)



TransactionType [Enumeration]
The status enumeration provides a standard set of transaction type codes by which indicate the type of transaction executed.


Value

Description

BILL_PAY

A bill payment transaction

CustomerAccountStatus [Enumeration]

This status enumeration provides a standard set of status codes by which indicate a customer's account status.


ValueDescription
ACTIVECustomer's account is Active
INACTIVECustomer's account is Inactive




Security


To secure the communications between the Paga platform and the merchant systems, there are several communications layer and web-service security requirements and options.
SSL
All communications between the Paga platform and the merchant must be performed over a secure sockets layer (SSL) HTTP communication channel. This means that the merchant must provide an encrypted SSL HHTP address (HTTPS URL).
Username/Password Digest Token
All merchant web-services integrated with the Paga Merchant Services Web-Services must implement the standard Web-Service Security Web Services Security: SOAP Message Security 1.0 Standard 200401, March 2004 which provides a specification for SOAP web-service header username/token authentication credentials. 
Within this specification, the service will employ the Password Digest authentication MS-WSP password will be provided along with the username to authenticate the merchant. The merchant's username and MS-WSP password credentials will be provided to the Merchant a part of their Merchant Services registration process.
Certificate Authentication
This authentication method is optional
In order to verify that web-service requests are originating from Paga to the Merchant platform, the Merchant can choose to perform public certificate validation. If this is required by the Merchant, during the registration process, Paga will share a public certificate key with the merchant which can be used to validate that the request originated from the Paga platform. 


Web Service Definition - WSDL


The following is the WSDL definition of the web-service: 

WSDL
<wsdl:definitions targetNamespace="http://pagatech.com/merchant/messages" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:sch="http://pagatech.com/merchant/messages" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:tns="http://pagatech.com/merchant/messages">
   <wsdl:types>
      <schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://pagatech.com/merchant/messages" xmlns="http://www.w3.org/2001/XMLSchema">
         <element name="getIntegrationServicesRequest">
            <complexType>
               <sequence>
                  <element name="isTest" type="boolean"/>
               </sequence>
            </complexType>
         </element>
         <element name="getIntegrationServicesResponse">
            <complexType>
               <sequence>
                  <element maxOccurs="unbounded" minOccurs="0" name="services" type="tns:IntegrationService"/>
               </sequence>
            </complexType>
         </element>
         <element name="validateCustomerRequest">
            <complexType>
               <sequence>
                  <element name="isTest" type="boolean"/>
                  <element minOccurs="0" name="customerReference" type="string"/>
                  <element minOccurs="0" name="customerFirstName" type="string"/>
                  <element minOccurs="0" name="customerLastName" type="string"/>
               </sequence>
            </complexType>
         </element>
         <element name="validateCustomerResponse">
   			<complexType>
      			<sequence>
         			<element name="isValid" type="boolean" />
         			<element name="status" type="tns:Status" />
         			<element minOccurs="0" name="merchantStatus" type="string" />
         			<element minOccurs="0" name="message" type="string" />
         			<element name="firstName" type="string" minOccurs="0" maxOccurs="1"/>
         			<element name="lastName" type="string" minOccurs="0" maxOccurs="1" />
         			<element name="lastPaymentDate" type="dateTime" minOccurs="0" maxOccurs="1" />
         			<element name="accountStatus" type="tns:CustomerAccountStatus" minOccurs="0" maxOccurs="1" />
         			<element name="paymentDueDate" type="dateTime" minOccurs="0" maxOccurs="1" />
         			<element name="isDisplayed" type="boolean" minOccurs="0" maxOccurs="1" />
      			</sequence>
   			</complexType>
		</element>
         <element name="submitTransactionRequest">
            <complexType>
               <sequence>
                  <element name="isTest" type="boolean"/>
                  <element name="transaction" type="tns:Transaction"/>
               </sequence>
            </complexType>
         </element>
         <element name="submitTransactionResponse">
            <complexType>
               <sequence>
                  <element name="status" type="tns:Status"/>
                  <element name="uniqueTransactionId" type="string"/>
                  <element minOccurs="0" name="customerReference" type="string"/>
                  <element minOccurs="0" name="merchantStatus" type="string"/>
                  <element minOccurs="0" name="message" type="string"/>
                  <element minOccurs="0" name="confirmationCode" type="string"/>
               </sequence>
            </complexType>
         </element>
         <element name="queryPaymentsRequest">
            <complexType>
               <sequence>
                  <element name="isTest" type="boolean"/>
                  <element name="transaction" type="tns:Transaction"/>
                  <element minOccurs="0" name="resultsPerRequest" type="int"/>
                  <element minOccurs="0" name="resultsPage" type="int"/>
               </sequence>
            </complexType>
         </element>
         <element name="queryPaymentsResponse">
            <complexType>
               <sequence>
                  <element maxOccurs="unbounded" minOccurs="0" name="results" type="tns:Transaction"/>
                  <element minOccurs="0" name="resultsPerRequest" type="int"/>
                  <element minOccurs="0" name="resultsPage" type="int"/>
                  <element name="status" type="tns:Status"/>
                  <element minOccurs="0" name="merchantStatus" type="string"/>
                  <element minOccurs="0" name="message" type="string"/>
               </sequence>
            </complexType>
         </element>
         <element name="getMerchantServicesRequest">
            <complexType>
               <sequence>
                  <element name="isTest" type="boolean"/>
               </sequence>
            </complexType>
         </element>
         <element name="getMerchantServicesResponse">
            <complexType>
               <sequence>
                  <element maxOccurs="unbounded" minOccurs="0" name="services" type="tns:MerchantService"/>
                  <element name="status" type="tns:Status"/>
                  <element minOccurs="0" name="merchantStatus" type="string"/>
                  <element minOccurs="0" name="message" type="string"/>
               </sequence>
            </complexType>
         </element>
         <complexType name="Transaction">
            <sequence>
               <element minOccurs="0" name="utcTransactionDateTime" type="dateTime"/>
               <element minOccurs="0" name="transactionType" type="tns:TransactionType"/>
               <element minOccurs="0" name="totalAmount" type="double"/>
               <element minOccurs="0" name="pagaAmount" type="double"/>
               <element minOccurs="0" name="agentAmount" type="double"/>
               <element minOccurs="0" name="merchantAmount" type="double"/>
               <element minOccurs="0" name="isCredit" type="boolean"/>
               <element minOccurs="0" name="pagaTransactionId" type="string"/>
               <element minOccurs="0" name="merchantTransactionId" type="string"/>
               <element minOccurs="0" name="currency" type="string"/>
               <element minOccurs="0" name="customerReference" type="string"/>
               <element minOccurs="0" name="period" type="int"/>
               <element minOccurs="0" name="customerFirstName" type="string"/>
               <element minOccurs="0" name="customerLastName" type="string"/>
               <element maxOccurs="unbounded" minOccurs="0" name="services" type="tns:MerchantService"/>
               <element minOccurs="0" name="channel" type="tns:Channel"/>
               <element minOccurs="0" name="agent" type="string"/>
               <element minOccurs="0" name="location" type="string"/>
               <element minOccurs="0" name="description" type="string"/>
               <element minOccurs="0" name="methodOfPayment" type="string"/>
            </sequence>
         </complexType>
         <complexType name="MerchantService">
            <sequence>
               <element name="name" type="string"/>
               <element name="price" type="double"/>
               <element name="shortCode" type="string"/>
               <element name="productCode" type="string"/>
               <element name="isPublic" type="boolean"/>
               <element maxOccurs="unbounded" minOccurs="0" name="composition" type="tns:MerchantService"/>
            </sequence>
         </complexType>
         <simpleType name="Channel">
            <restriction base="string">
               <enumeration value="SMS"/>
               <enumeration value="ONLINE"/>
               <enumeration value="VOICE"/>
               <enumeration value="EMAIL"/>
               <enumeration value="USSD"/>
               <enumeration value="E_WIDGET"/>
               <enumeration value="WEB_SERVICE"/>
               <enumeration value="AGENT"/>
            </restriction>
         </simpleType>
         <simpleType name="Status">
            <restriction base="string">
               <enumeration value="SUCCESS"/>
               <enumeration value="CLIENT_ERROR"/>
               <enumeration value="SERVER_ERROR"/>
            </restriction>
         </simpleType>
		<simpleType name="CustomerAccountStatus">
   			<restriction base="string">
      			<enumeration value="ACTIVE"/>
      			<enumeration value="INACTIVE" />
   		</restriction>
		</simpleType>
         <simpleType name="IntegrationService">
            <restriction base="string">
               <enumeration value="VALIDATE_CUSTOMER"/>
               <enumeration value="SUBMIT_PAYMENT"/>
               <enumeration value="QUERY_PAYMENTS"/>
               <enumeration value="GET_MERCHANT_SERVICES"/>
            </restriction>
         </simpleType>
         <simpleType name="TransactionType">
            <restriction base="string">
               <enumeration value="BILL_PAY"/>
            </restriction>
         </simpleType>
      </schema>
   </wsdl:types>
   <wsdl:message name="getMerchantServicesResponse">
      <wsdl:part element="tns:getMerchantServicesResponse" name="getMerchantServicesResponse"></wsdl:part>
   </wsdl:message>
   <wsdl:message name="getIntegrationServicesRequest">
      <wsdl:part element="tns:getIntegrationServicesRequest" name="getIntegrationServicesRequest"></wsdl:part>
   </wsdl:message>
   <wsdl:message name="submitTransactionRequest">
      <wsdl:part element="tns:submitTransactionRequest" name="submitTransactionRequest"></wsdl:part>
   </wsdl:message>
   <wsdl:message name="validateCustomerResponse">
      <wsdl:part element="tns:validateCustomerResponse" name="validateCustomerResponse"></wsdl:part>
   </wsdl:message>
   <wsdl:message name="getMerchantServicesRequest">
      <wsdl:part element="tns:getMerchantServicesRequest" name="getMerchantServicesRequest"></wsdl:part>
   </wsdl:message>
   <wsdl:message name="queryPaymentsRequest">
      <wsdl:part element="tns:queryPaymentsRequest" name="queryPaymentsRequest"></wsdl:part>
   </wsdl:message>
   <wsdl:message name="queryPaymentsResponse">
      <wsdl:part element="tns:queryPaymentsResponse" name="queryPaymentsResponse"></wsdl:part>
   </wsdl:message>
   <wsdl:message name="validateCustomerRequest">
      <wsdl:part element="tns:validateCustomerRequest" name="validateCustomerRequest"></wsdl:part>
   </wsdl:message>
   <wsdl:message name="submitTransactionResponse">
      <wsdl:part element="tns:submitTransactionResponse" name="submitTransactionResponse"></wsdl:part>
   </wsdl:message>
   <wsdl:message name="getIntegrationServicesResponse">
      <wsdl:part element="tns:getIntegrationServicesResponse" name="getIntegrationServicesResponse"></wsdl:part>
   </wsdl:message>
   <wsdl:portType name="MerchantService">
      <wsdl:operation name="getMerchantServices">
         <wsdl:input message="tns:getMerchantServicesRequest" name="getMerchantServicesRequest"></wsdl:input>
         <wsdl:output message="tns:getMerchantServicesResponse" name="getMerchantServicesResponse"></wsdl:output>
      </wsdl:operation>
      <wsdl:operation name="getIntegrationServices">
         <wsdl:input message="tns:getIntegrationServicesRequest" name="getIntegrationServicesRequest"></wsdl:input>
         <wsdl:output message="tns:getIntegrationServicesResponse" name="getIntegrationServicesResponse"></wsdl:output>
      </wsdl:operation>
      <wsdl:operation name="submitTransaction">
         <wsdl:input message="tns:submitTransactionRequest" name="submitTransactionRequest"></wsdl:input>
         <wsdl:output message="tns:submitTransactionResponse" name="submitTransactionResponse"></wsdl:output>
      </wsdl:operation>
      <wsdl:operation name="validateCustomer">
         <wsdl:input message="tns:validateCustomerRequest" name="validateCustomerRequest"></wsdl:input>
         <wsdl:output message="tns:validateCustomerResponse" name="validateCustomerResponse"></wsdl:output>
      </wsdl:operation>
      <wsdl:operation name="queryPayments">
         <wsdl:input message="tns:queryPaymentsRequest" name="queryPaymentsRequest"></wsdl:input>
         <wsdl:output message="tns:queryPaymentsResponse" name="queryPaymentsResponse"></wsdl:output>
      </wsdl:operation>
   </wsdl:portType>
   <wsdl:binding name="MerchantServiceSoap12" type="tns:MerchantService">
      <soap12:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
      <wsdl:operation name="getMerchantServices">
         <soap12:operation soapAction=""/>
         <wsdl:input name="getMerchantServicesRequest">
            <soap12:body use="literal"/>
         </wsdl:input>
         <wsdl:output name="getMerchantServicesResponse">
            <soap12:body use="literal"/>
         </wsdl:output>
      </wsdl:operation>
      <wsdl:operation name="getIntegrationServices">
         <soap12:operation soapAction=""/>
         <wsdl:input name="getIntegrationServicesRequest">
            <soap12:body use="literal"/>
         </wsdl:input>
         <wsdl:output name="getIntegrationServicesResponse">
            <soap12:body use="literal"/>
         </wsdl:output>
      </wsdl:operation>
      <wsdl:operation name="submitTransaction">
         <soap12:operation soapAction=""/>
         <wsdl:input name="submitTransactionRequest">
            <soap12:body use="literal"/>
         </wsdl:input>
         <wsdl:output name="submitTransactionResponse">
            <soap12:body use="literal"/>
         </wsdl:output>
      </wsdl:operation>
      <wsdl:operation name="validateCustomer">
         <soap12:operation soapAction=""/>
         <wsdl:input name="validateCustomerRequest">
            <soap12:body use="literal"/>
         </wsdl:input>
         <wsdl:output name="validateCustomerResponse">
            <soap12:body use="literal"/>
         </wsdl:output>
      </wsdl:operation>
      <wsdl:operation name="queryPayments">
         <soap12:operation soapAction=""/>
         <wsdl:input name="queryPaymentsRequest">
            <soap12:body use="literal"/>
         </wsdl:input>
         <wsdl:output name="queryPaymentsResponse">
            <soap12:body use="literal"/>
         </wsdl:output>
      </wsdl:operation>
   </wsdl:binding>
   <wsdl:service name="MerchantService">
      <wsdl:port binding="tns:MerchantServiceSoap12" name="MerchantServiceSoap12">
         <soap12:address location="http://localhost:8080/paga-test/merchantService/"/>
      </wsdl:port>
   </wsdl:service>
</wsdl:definitions>