2015-05-13 2 views
12

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.

+0

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

+0

es ist 3 Monate, immer noch keine Antwort :( – poiseberry

+0

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

Antwort

6

können Sie diese Schritte ausführen zu generieren, was Sie brauchen:

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 

dann können Sie .jks Datei für SOAPUI, P12-Datei für Browsers. Ich hoffe das hilft.

1

ich sehen kann Ihr nicht Soapclient mit SSL zu schaffen, schlage ich diese allgemeine exemple folgen:

$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 
    ) 
); 

für weitere Details zu sehen [hier] [1]

Beachten Sie, dass

$local_cert & certsClient (FULL_PATH_TO_MY_CERT)