2015-05-13 12 views
12

Bu benim ilk defa PHP'de SOAP yapıyor (aslında bir çaylak) ve bu problemi aylardır sıkıştıyorum.wsdl ve 2 yönlü SSL ile PHP SOAP

https://wstest.oriongateway.com:22837/willani/services/oglws?wsdl 

Bu webservice URL, bunlar üretime 2 yönlü SSL istemek ve onlar benim sunucuda yüklemek için bana özel anahtar ve kamu sertifika kümesi sağlamak var.

Tarayıcımda özel bir anahtar yükleyerek URL'yi görüntüleyebiliyorum.

Şu anda, webservice'den gelen yanıtı hiçbir şekilde SSL ve tek yönlü SSL ile başarıyla aldım, ancak iki yönlü bir SSL çalışamaz.

SOAP tarafından iki yönlü bir SSL gönderdiğimde hata iletisi.

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

Benim SOAP istek dosyası

<?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; 
?> 

Benim Webservice sınıf

<?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' => '' 
      ) 
    ); 
    } 

} 

?> 

Benim WSDL dosyası

<?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> 

Herhangi bir yorum benim için faydalı olacaktır.

+0

UPDATE: Kimlik doğrulama için webservis sitesine bir sertifika verebileceğimiz bir yazı gördüm, ancak .cer ve .p12'yi bir .pem dosyasına nasıl ekleyebilirim? – poiseberry

+0

3 ay oldu, hala cevap yok :( – poiseberry

+0

bunu deneyin: "openssl pkcs12 -in key.p12 -out key.pem -clcerts" ve SOAP 'a pem dosyasının şifresini aşağıdaki gibi eklemelisiniz:' passphrase '=> "Şifreniz" – sertaconay

cevap

6

size ne gerek oluşturmak için şu adımları izleyin:

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 

o zaman SoapUI, tarayıcı için .p12 dosya için .jks dosyasını kullanabilirsiniz. Umarım bu yardımcı olur. i senin SSL ile SoapClient yaratmak değildir görebileceğiniz gibi

1

, bu genel EXEMPLE takip öneriyoruz: Daha fazla ayrıntı için

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

[burada] bakınız [1]

Not olduğunu

$local_cert & certsClient (FULL_PATH_TO_MY_CERT)