This is an unofficial API Wrapper for Kenya Power Eazzy Pay Customers. Customers who seek to Integrate with kenya power for real time Payments via their Secure API. The API consists of 3 endpoints;
NB: Please Note that to use this API your IP address needs to be whitelisted by Kenya Power to make all requests to the Below endpoints
- Access Token Generation Endpoint. ( Endpoint to Generate Access Token http://197.248.29.94:8281/token )
- Payment Registration API Endpoint.( This Endpoint action is referrenced on the WSDL file and allows Developers to pass Payment information to register payment to Customers account) https://197.248.29.94:8244/incmsPayments/2.0.1/
- Account Balance API Endpoint. ( This Endpoint action is referrenced on the WSDL file and accepts Account Number to Fetch Customers Account Balance Details) https://197.248.29.94:8244/incmsAccountBalance/2.0.1
Sample Payment Register Soap Server. We will create a file called PaymentRegisterServe.php to handle our Payment Register Soap Server
/*
WSDL Web Service Call: http://<you_server_name/IP Address>/PaymentRegisterServe.php?wsdl
Endpoint Action: https://197.248.29.94:8244/incmsPayments/2.0.1
*/
try {
ini_set("soap.wsdl_cache_enabled", "0"); // disabling WSDL cache
//Load the wsdl file here.
$server = new SoapServer("admin--IncmsPayment1.0.0.wsdl",array('soap_version'=>SOAP_1_2,'STYLE'=>SOAP_RPC,'use'=>SOAP_LITERAL));
$server->addFunction("PaymentRegister");
$server->handle();
}
catch (Exception $e) {
$server->fault('Sender', $e->getMessage());
}
Your SoapServer URL will be as below. You will now need this inorder to pass the WebService Parameter Request to KPLC when calling your SoapClient Class.
https://<your_server_name/IP address>/PaymentRegisterServe.php?wsdl
$cs_key = ''; //Supplied by Kenya Power
$cs_sec = ''; //Supplied by Kenya Power
$basicAuthHeader = base64_encode($cs_key.':'.$cs_sec);
$params = array('grant_type' => 'password',
'username' => '', //supplied by Kenya Power
'password' => '', //Supplied by Kenya Power
'scope' =>'apim:subscribe'
);
- Account Balance API Endpoint.
- Payment Registration API Endpoint.
- PaymentCenterCode = Supplied by KPLC
- PaymentSubAgencyCode = 0
- CheckNumber = 0
- RecordType = C
- Date Format = Y-m-d\Th:i:s
SAMPLE PAYMENT REGISTRATION REQUEST
<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' xmlns:inc='http://incms.indra.es/IncmsPayment/'>
<soapenv:Header/>
<soapenv:Body>
<inc:PaymentRegister>
<PaymentCenterCode>0075</PaymentCenterCode>
<PaymentSubAgencyCode>0</PaymentSubAgencyCode>
<ReferenceNumber>$accountno</ReferenceNumber>
<PaymentDate>$date</PaymentDate>
<PaymentAmount>$amount</PaymentAmount>
<CheckNumber>0</CheckNumber>
<AuxData>$payment_ref</AuxData>
<PaymentEmail>0</PaymentEmail>
<RecordType>C</RecordType>
<ExternalData>$msisdn</ExternalData>
<ListData>
<Data>
<Code>Payment_type</Code>
<Value>$payment_type</Value>
</Data>
</ListData>
</inc:PaymentRegister>
</soapenv:Body>
</soapenv:Envelope>
Sending the Above request XML via SoapClient
//New instance of your Extended Soap Client class..
$soapClient = new MySoapClient("http://<path_to_your_soapserver/servewsdlkplc/PaymentRegisterServe.php?WSDL", $params);
$PostTransaction = $soapClient->PaymentRegister($orderRequest);
if($PostTransaction==''){
echo 'No Response From Host..Please Check with your Admin';
exit;
}
//Store the data on an XML file to be used to read later
file_put_contents('data.xml', $PostTransaction); //capture the response from Kenya Power in a file then use it to parse
$data = file_get_contents('data.xml');
//load the stored XML
$xml = load_invalid_xml($data);
$ns = $xml->getNamespaces(true);
$soap = $xml->children($ns['soapenv']);
$response_Body = $soap->children($ns['ns1']);
Response gotten from a Successful SoapClient call to the webservice call to KPLC
The Below response shows the request is a duplicate Transaction.
<?xml version='1.0' encoding='utf-8'?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:inc="http://incms.indra.es/IncmsPayment/">
<soapenv:Body>
<ns1:RegistryPaymentResponse xmlns:ns1="http://incms.indra.es/IncmsPayment/">
<ns1:code>-1</ns1:code>
<ns1:message>Error registering payment</ns1:message>
<ns1:description>Duplicated payment</ns1:description>
<ns1:system>INCMS</ns1:system>
<ns1:transactionId>12300989</ns1:transactionId>
<ns1:aux>S10400-54504761312</ns1:aux>
<ns1:accountNumber>41307543</ns1:accountNumber>
<ns1:amount>2000</ns1:amount>
<ns1:paymentDate>2018-11-27 11:10:13.0</ns1:paymentDate>
</ns1:RegistryPaymentResponse>
</soapenv:Body>
</soapenv:Envelope>
//Include the functions class below.
include('classfunctions.php');
try{
//function that generates the token
$token = GenerateToken();
//pass headers to the web service call
$httpheaders = array('http'=>array('protocol_version'=>1.1));
$context = stream_context_create($httpheaders);
$params = array('stream_context'=>$context,'trace'=>true,'exceptions'=>true,"stream_context" => stream_context_create(
array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
),'http' => [
'header' => "Authorization: Bearer ".$token,
],
)));
/*-------------------------XML Request to Be Sent.--------------------------------
Some values in the XML are constant eg
PaymentCenterCode = Supplied by KPLC
PaymentSubAgencyCode = 0
CheckNumber = 0
RecordType = C
date format should be Sent in the below format Y-m-d\Th:i:s
---------------------------------------------------------------------------------*/
//payment register sample request
$orderRequest ="<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' xmlns:inc='http://incms.indra.es/IncmsPayment/'>
<soapenv:Header/>
<soapenv:Body>
<inc:PaymentRegister>
<PaymentCenterCode>0075</PaymentCenterCode>
<PaymentSubAgencyCode>0</PaymentSubAgencyCode>
<ReferenceNumber>$accountno</ReferenceNumber>
<PaymentDate>$date</PaymentDate>
<PaymentAmount>$amount</PaymentAmount>
<CheckNumber>0</CheckNumber>
<AuxData>$payment_ref</AuxData>
<PaymentEmail>0</PaymentEmail>
<RecordType>C</RecordType>
<ExternalData>$cleanMSISDN</ExternalData>
<ListData>
<Data>
<Code>Payment_type</Code>
<Value>$payment_type</Value>
</Data>
</ListData>
</inc:PaymentRegister>
</soapenv:Body>
</soapenv:Envelope>";
//New instance of your Extended Soap Client class..
$soapClient = new MySoapClient("http://<path_to_your_soapserver/servewsdlkplc/PaymentRegisterServe.php?WSDL", $params);
$PostTransaction = $soapClient->PaymentRegister($orderRequest);
if($PostTransaction==''){
echo 'No Response From Host..Please Check with your Admin';
exit;
}
//Store the data on an XML file to be used to read later
file_put_contents('data.xml', $PostTransaction); //capture the response from Kenya Power in a file then use it to parse
$data = file_get_contents('data.xml');
//load the stored XML
$xml = load_invalid_xml($data);
$ns = $xml->getNamespaces(true);
$soap = $xml->children($ns['soapenv']);
$response_Body = $soap->children($ns['ns1']);
//Transaction ID Generated from KenyaPower
$transactionID = $response_Body->RegistryPaymentResponse->transactionId;
/*---------------------------------------------------------------------
SUCCESSFULL TRANSACTIONS WILL BE VALIDATED HERE BEFORE DATABASE
-----------------------------------------------------------------------*/
if($response_Body->RegistryPaymentResponse->code =='0'){
//store the payment here on a database and do your logic here
}else{
/*-----------------------------------------------------------------------------------------
DUPLICATED TRANSACTIONS WILL BE VALIDATED HERE AND DATABASE UPDATING WILL BE DONE HERE ALSO.
-------------------------------------------------------------------------------------------*/
if($response_Body->RegistryPaymentResponse->description=='Duplicated payment' || $response_Body->RegistryPaymentResponse->message=='Error registering payment'){
//Duplicate Transactions. A duplicate transaction is one where the payment ref has been repeated..
}else{
if($response_Body->RegistryPaymentResponse->message=='Account number doesn´t exist' || $response_Body->RegistryPaymentResponse->description=='Please review the data provided'){
//Account Number doest exist here..
}else{
if($response_Body->RegistryPaymentResponse->description=='The resource is not available'){
//Resource is unavailable.
}else{
/*----Aged transactions 3 months transactionscannot be captured in the system---*/
if($response_Body->RegistryPaymentResponse->description=='Payment was made more than 3 months ago'){
//Aged transactions. Those are payments whose date captured were more than 3 months ago
}else{
if($response_Body->RegistryPaymentResponse->message=="Payment date can not be greater than today's date"){
//Doesnt allow future dates..
}
}
/*------------------------------------------------------------------------------------*/
}
}
}
}
}catch(SoapFault $fault){
//capture your soap faults here..
$faultcode = $fault->faultcode;
$errormsg = $fault->faultstring;
}