Dies ist mein erstes Mal SOAP auf PHP (Ich bin ein Anfänger tatsächlich), und ich stecke in diesem Problem seit Monaten.PHP SOAP mit WSDL und 2-Wege-SSL
https://wstest.oriongateway.com:22837/willani/services/oglws?wsdl
Dies ist die Webservice-URL, fordern sie 2-Wege-SSL auf der Produktion, und sie haben mir eine Reihe von privaten Schlüsseln zur Verfügung stellen und die öffentlichen cert auf meinem Server zu installieren.
Ich kann die URL durch die Installation eines privaten Schlüssels in meinem Browser anzeigen.
In diesem Moment habe ich erfolgreich die Antwort von Webservice durch No-Way-SSL und One-Way-SSL erhalten, aber Zwei-Wege-SSL kann einfach nicht funktionieren.
Fehlermeldung, wenn ich eine Zwei-Wege-SSL von SOAP einreichen.
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
Meine SOAP-Request-Datei
<?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;
?>
Meine WebService-Klasse
<?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' => ''
)
);
}
}
?>
Meine WSDL-Datei
<?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>
Jeder Kommentar wird für mich nützlich sein.
UPDATE: Ich habe Post gesehen, dass wir ein Zertifikat zur Webservice-Site zur Authentifizierung übergeben können, aber wie kombiniere ich .cer und .p12 in eine .pem-Datei? – poiseberry
es ist 3 Monate, immer noch keine Antwort :( – poiseberry
versuchen Sie dies: "openssl pkcs12 -in key.p12-out key.pem -clcerts" und Sie müssen das Passwort der PEM-Datei zu SOAP wie hinzufügen: 'Passphrase' => "yourpassword" – sertaconay