This is my first time doing SOAP on PHP (Im a rookie actually), and im stuck in this problem for months.
https://wstest.oriongateway.com:22837/willani/services/oglws?wsdl
This is the webservice URL, they request 2-way SSL on production, and they have provide me a set of private key and public cert to install on my server.
I able to view the URL by install a private key on my browser.
At this moment, I've successfully get the respond from webservice by no-way SSL and one-way SSL, but two-way SSL just cant work.
Error message when I submit a two-way SSL by SOAP.
Warning: SoapClient::__doRequest(): SSL operation failed with code 1. OpenSSL Error messages: error:14094412:SSL routines:SSL3_READ_BYTES:sslv3 alert bad certificate in /home/loadme/domains/loadme.my/public_html/system/OglWsService_noservice.php on line 124
Warning: SoapClient::__doRequest(): Failed to enable crypto in /home/loadme/domains/loadme.my/public_html/system/OglWsService_noservice.php on line 124
Warning: SoapClient::__doRequest(): connect() failed: Unspecified error in /home/loadme/domains/loadme.my/public_html/system/OglWsService_noservice.php on line 124
My SOAP request file
<?php
require_once 'OglWsService.php';
$requestMsg = new RequestMsg;
$requestMsg->amount="1000";
$requestMsg->merchantId="620055";
$requestMsg->operatorId="IBS";
$requestMsg->retTransRef="102182ABCqw1238";
$requestMsg->terminalId="10000102";
$requestMsg->productCode="DIGI";
$requestMsg->transDateTime=date("YmdHis");
$requestMsg->transTraceId = (int)"123212321";
$in0 = new onlinePIN();
$in0->in0=$requestMsg;
$oglWsService = new OglWsService();
$reponseMsg = $oglWsService->onlinePIN($in0);
$arr=get_object_vars($reponseMsg);
print_r($arr);
echo $arr['onlinePINReturn']->transRef;
?>
My Webservice class
<?php
class RequestMsg {
public $amount; // string
public $merchantId; // string
public $operatorId; // string
public $orgTransRef; // string
public $retTransRef; // string
public $terminalId; // string
public $productCode; // string
public $msisdn; // string
public $transDateTime; // string
public $transTraceId; // int
public $customField1; // string
public $customField2; // string
public $customField3; // string
public $customField4; // string
public $customField5; // string
}
class ResponseMsg {
public $amount; // string
public $pin; // string
public $pinExpiryDate; // string
public $productCode; // string
public $responseCode; // string
public $responseMsg; // string
public $retTransRef; // string
public $terminalId; // string
public $transRef; // string
public $customField1; // string
public $customField2; // string
public $customField3; // string
public $customField4; // string
public $customField5; // string
}
class onlinePIN {
public $in0; // RequestMsg
}
class onlinePINResponse {
public $onlinePINReturn; // ResponseMsg
}
class onlinePINReversal {
public $in0; // RequestMsg
}
class onlinePINReversalResponse {
public $onlinePINReversalReturn; // ResponseMsg
}
class etopup {
public $in0; // RequestMsg
}
class etopupResponse {
public $etopupReturn; // ResponseMsg
}
class etopupReversal {
public $in0; // RequestMsg
}
class etopupReversalResponse {
public $etopupReversalReturn; // ResponseMsg
}
class networkCheck {
public $in0; // RequestMsg
}
class networkCheckResponse {
public $networkCheck; // ResponseMsg
}
/**
* OglWsService class
*
*
*
* @author {author}
* @copyright {copyright}
* @package {package}
*/
class OglWsService extends SoapClient {
private static $classmap = array(
'RequestMsg' => 'RequestMsg',
'ResponseMsg' => 'ResponseMsg',
'onlinePIN' => 'onlinePIN',
'onlinePINResponse' => 'onlinePINResponse',
'onlinePINReversal' => 'onlinePINReversal',
'onlinePINReversalResponse' => 'onlinePINReversalResponse',
'etopup' => 'etopup',
'etopupResponse' => 'etopupResponse',
'etopupReversal' => 'etopupReversal',
'etopupReversalResponse' => 'etopupReversalResponse',
'networkCheck' => 'networkCheck',
'networkCheckResponse' => 'networkCheckResponse',
);
public function OglWsService($wsdl = "oglws_ver2_4_doc_literal.wsdl", $options = array()) {
foreach(self::$classmap as $key => $value) {
if(!isset($options['classmap'][$key])) {
$options['classmap'][$key] = $value;
}
}
parent::__construct($wsdl, $options);
}
/**
*
*
* @param onlinePIN $parameters
* @return onlinePINResponse
*/
public function onlinePIN(onlinePIN $parameters) {
return $this->__soapCall('onlinePIN', array($parameters), array(
'uri' => 'urn:EPAYIBWS',
'soapaction' => ''
)
);
}
/**
*
*
* @param onlinePINReversal $parameters
* @return onlinePINReversalResponse
*/
public function onlinePINReversal(onlinePINReversal $parameters) {
return $this->__soapCall('onlinePINReversal', array($parameters), array(
'uri' => 'urn:EPAYIBWS',
'soapaction' => ''
)
);
}
/**
*
*
* @param etopup $parameters
* @return etopupResponse
*/
public function etopup(etopup $parameters) {
return $this->__soapCall('etopup', array($parameters), array(
'uri' => 'urn:EPAYIBWS',
'soapaction' => ''
)
);
}
/**
*
*
* @param etopupReversal $parameters
* @return etopupReversalResponse
*/
public function etopupReversal(etopupReversal $parameters) {
return $this->__soapCall('etopupReversal', array($parameters), array(
'uri' => 'urn:EPAYIBWS',
'soapaction' => ''
)
);
}
/**
*
*
* @param networkCheck $parameters
* @return networkCheckResponse
*/
public function networkCheck(networkCheck $parameters) {
return $this->__soapCall('networkCheck', array($parameters), array(
'uri' => 'urn:EPAYIBWS',
'soapaction' => ''
)
);
}
}
?>
My WSDL file
<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions
targetNamespace="urn:EPAYIBWS"
xmlns:apachesoap="http://xml.apache.org/xml-soap"
xmlns:impl="urn:EPAYIBWS"
xmlns:intf="urn:EPAYIBWS"
xmlns:tns1="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:tns2="http://axis.apache.org"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<wsdl:types>
<schema elementFormDefault="qualified" targetNamespace="urn:EPAYIBWS" xmlns="http://www.w3.org/2001/XMLSchema">
<complexType name="RequestMsg">
<sequence>
<element name="amount" nillable="true" type="tns1:string"/>
<element name="merchantId" nillable="true" type="tns1:string"/>
<element name="operatorId" nillable="true" type="tns1:string"/>
<element name="orgTransRef" nillable="true" type="tns1:string"/>
<element name="retTransRef" nillable="true" type="tns1:string"/>
<element name="terminalId" nillable="true" type="tns1:string"/>
<element name="productCode" nillable="true" type="tns1:string"/>
<element name="msisdn" nillable="true" type="tns1:string"/>
<element name="transDateTime" nillable="true" type="tns1:string"/>
<element name="transTraceId" type="xsd:int"/>
<element name="customField1" nillable="true" type="tns1:string"/>
<element name="customField2" nillable="true" type="tns1:string"/>
<element name="customField3" nillable="true" type="tns1:string"/>
<element name="customField4" nillable="true" type="tns1:string"/>
<element name="customField5" nillable="true" type="tns1:string"/>
</sequence>
</complexType>
<complexType name="ResponseMsg">
<sequence>
<element name="amount" nillable="true" type="tns1:string"/>
<element name="pin" nillable="true" type="tns1:string"/>
<element name="pinExpiryDate" nillable="true" type="tns1:string"/>
<element name="productCode" nillable="true" type="tns1:string"/>
<element name="responseCode" nillable="true" type="tns1:string"/>
<element name="responseMsg" nillable="true" type="tns1:string"/>
<element name="retTransRef" nillable="true" type="tns1:string"/>
<element name="terminalId" nillable="true" type="tns1:string"/>
<element name="transRef" nillable="true" type="tns1:string"/>
<element maxOccurs="1" minOccurs="0" name="customField1" nillable="true" type="tns1:string"/>
<element maxOccurs="1" minOccurs="0" name="customField2" nillable="true" type="tns1:string"/>
<element maxOccurs="1" minOccurs="0" name="customField3" nillable="true" type="tns1:string"/>
<element maxOccurs="1" minOccurs="0" name="customField4" nillable="true" type="tns1:string"/>
<element maxOccurs="1" minOccurs="0" name="customField5" nillable="true" type="tns1:string"/>
</sequence>
</complexType>
<element name="fault" type="xsd:anyType"/>
<element name="onlinePIN">
<complexType>
<sequence>
<element name="in0" type="impl:RequestMsg"/>
</sequence>
</complexType>
</element>
<element name="onlinePINResponse">
<complexType>
<sequence>
<element name="onlinePINReturn" type="impl:ResponseMsg"/>
</sequence>
</complexType>
</element>
<element name="onlinePINReversal">
<complexType>
<sequence>
<element name="in0" type="impl:RequestMsg"/>
</sequence>
</complexType>
</element>
<element name="onlinePINReversalResponse">
<complexType>
<sequence>
<element name="onlinePINReversalReturn" type="impl:ResponseMsg"/>
</sequence>
</complexType>
</element>
<element name="etopup">
<complexType>
<sequence>
<element name="in0" type="impl:RequestMsg"/>
</sequence>
</complexType>
</element>
<element name="etopupResponse">
<complexType>
<sequence>
<element name="etopupReturn" type="impl:ResponseMsg"/>
</sequence>
</complexType>
</element>
<element name="etopupReversal">
<complexType>
<sequence>
<element name="in0" type="impl:RequestMsg"/>
</sequence>
</complexType>
</element>
<element name="etopupReversalResponse">
<complexType>
<sequence>
<element name="etopupReversalReturn" type="impl:ResponseMsg"/>
</sequence>
</complexType>
</element>
<element name="networkCheck">
<complexType>
<sequence>
<element name="in0" type="impl:RequestMsg"/>
</sequence>
</complexType>
</element>
<element name="networkCheckResponse">
<complexType>
<sequence>
<element name="networkCheck" type="impl:ResponseMsg"/>
</sequence>
</complexType>
</element>
</schema>
</wsdl:types>
<wsdl:message name="etopupRequest">
<wsdl:part element="impl:etopup" name="parameters"/>
</wsdl:message>
<wsdl:message name="networkCheckResponse">
<wsdl:part element="impl:networkCheckResponse" name="parameters"/>
</wsdl:message>
<wsdl:message name="etopupReversalRequest">
<wsdl:part element="impl:etopupReversal" name="parameters"/>
</wsdl:message>
<wsdl:message name="etopupResponse">
<wsdl:part element="impl:etopupResponse" name="parameters"/>
</wsdl:message>
<wsdl:message name="networkCheckRequest">
<wsdl:part element="impl:networkCheck" name="parameters"/>
</wsdl:message>
<wsdl:message name="onlinePINReversalResponse">
<wsdl:part element="impl:onlinePINReversalResponse" name="parameters"/>
</wsdl:message>
<wsdl:message name="onlinePINReversalRequest">
<wsdl:part element="impl:onlinePINReversal" name="parameters"/>
</wsdl:message>
<wsdl:message name="onlinePINRequest">
<wsdl:part element="impl:onlinePIN" name="parameters"/>
</wsdl:message>
<wsdl:message name="onlinePINResponse">
<wsdl:part element="impl:onlinePINResponse" name="parameters"/>
</wsdl:message>
<wsdl:message name="etopupReversalResponse">
<wsdl:part element="impl:etopupReversalResponse" name="parameters"/>
</wsdl:message>
<wsdl:message name="ConfigurationException">
<wsdl:part element="impl:fault" name="fault"/>
</wsdl:message>
<wsdl:portType name="oglws">
<wsdl:operation name="onlinePIN">
<wsdl:input message="impl:onlinePINRequest" name="onlinePINRequest"/>
<wsdl:output message="impl:onlinePINResponse" name="onlinePINResponse"/>
<wsdl:fault message="impl:ConfigurationException" name="ConfigurationException"/>
</wsdl:operation>
<wsdl:operation name="onlinePINReversal">
<wsdl:input message="impl:onlinePINReversalRequest" name="onlinePINReversalRequest"/>
<wsdl:output message="impl:onlinePINReversalResponse" name="onlinePINReversalResponse"/>
<wsdl:fault message="impl:ConfigurationException" name="ConfigurationException"/>
</wsdl:operation>
<wsdl:operation name="etopup">
<wsdl:input message="impl:etopupRequest" name="etopupRequest"/>
<wsdl:output message="impl:etopupResponse" name="etopupResponse"/>
<wsdl:fault message="impl:ConfigurationException" name="ConfigurationException"/>
</wsdl:operation>
<wsdl:operation name="etopupReversal">
<wsdl:input message="impl:etopupReversalRequest" name="etopupReversalRequest"/>
<wsdl:output message="impl:etopupReversalResponse" name="etopupReversalResponse"/>
<wsdl:fault message="impl:ConfigurationException" name="ConfigurationException"/>
</wsdl:operation>
<wsdl:operation name="networkCheck">
<wsdl:input message="impl:networkCheckRequest" name="networkCheckRequest"/>
<wsdl:output message="impl:networkCheckResponse" name="networkCheckResponse"/>
<wsdl:fault message="impl:ConfigurationException" name="ConfigurationException"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="oglwsSoapBinding" type="impl:oglws">
<wsdlsoap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="onlinePIN">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="onlinePINRequest">
<wsdlsoap:body use="literal"/>
</wsdl:input>
<wsdl:output name="onlinePINResponse">
<wsdlsoap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="ConfigurationException">
<wsdlsoap:fault name="ConfigurationException" use="literal"/>
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="onlinePINReversal">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="onlinePINReversalRequest">
<wsdlsoap:body use="literal"/>
</wsdl:input>
<wsdl:output name="onlinePINReversalResponse">
<wsdlsoap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="ConfigurationException">
<wsdlsoap:fault name="ConfigurationException" use="literal"/>
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="etopup">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="etopupRequest">
<wsdlsoap:body use="literal"/>
</wsdl:input>
<wsdl:output name="etopupResponse">
<wsdlsoap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="ConfigurationException">
<wsdlsoap:fault name="ConfigurationException" use="literal"/>
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="etopupReversal">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="etopupReversalRequest">
<wsdlsoap:body use="literal"/>
</wsdl:input>
<wsdl:output name="etopupReversalResponse">
<wsdlsoap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="ConfigurationException">
<wsdlsoap:fault name="ConfigurationException" use="literal"/>
</wsdl:fault>
</wsdl:operation>
<wsdl:operation name="networkCheck">
<wsdlsoap:operation soapAction=""/>
<wsdl:input name="networkCheckRequest">
<wsdlsoap:body use="literal"/>
</wsdl:input>
<wsdl:output name="networkCheckResponse">
<wsdlsoap:body use="literal"/>
</wsdl:output>
<wsdl:fault name="ConfigurationException">
<wsdlsoap:fault name="ConfigurationException" use="literal"/>
</wsdl:fault>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="OglWsService">
<wsdl:port binding="impl:oglwsSoapBinding" name="oglws">
<wsdlsoap:address location="https://wstest.oriongateway.com:22837/willani/services/oglws"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
Any comment will be useful for me.
you can follow these steps to generate what you need:
openssl genrsa -out client.key 2048
openssl req -new -key client.key -out something.p10
openssl pkcs7 -in file.p7b -inform PEM -out result.pem -print_certsopenssl pkcs12 -export -inkey client.key -in result.pem -name anyName -out finalCert.p12
keytool -v -importkeystore -srckeystore finalCert.p12 -srcstoretype PKCS12 -destkeystore name.jks -deststoretype JKS
then you can use .jks file for SOAPUI, .p12 file for browser. I hope this helps.
As i can see your are not creating SoapClient with SSL, I suggest to follow this general exemple :
$context = stream_context_create(
array(
"ssl" => array(
"verify_peer" => true,
"cafile" => $certsServeur
)
)
);
$client = new SoapClient(
$wsdl,
array(
"trace" => 1,
"soap_version" => SOAP_1_1
"local_cert" => $certsClient
"stream_context" => $context
)
);
for more details see [here][1]
Note that
$local_cert & certsClient ( FULL_PATH_TO_MY_CERT )
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With