2016-07-05 3 views
2

Я пытаюсь реализовать SOAP API. Но я не получаю, как отправить запрос на указанный URL.Отправить XML в запрос на мыло и сертификат подключения PHP

У меня нет поддержки для этого API, у вас мало строк в качестве инструкции.

Я раньше не использовал SOAP, может кто-нибудь помочь понять, как создать и отправить запрос в формате XML с помощью сертификата.

Вот инструкции, чтобы использовать API

Test API Link 
https://202.82.66.148:8443/ptms4541/ws/CksServices 

Worksite:BST-API 
Account:BST-API01 

Response to connect (Have to set header of the following) 

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">  
<soap:Header>  
<tns:RequestSOAPHeader xmlns:tns="https://202.82.66.148:8443/ptms4541/ws/CksServices">  
<tns:account xmlns="https://202.82.66.148:8443/ptms4541/ws/CksServices">BST-API01</tns:account>  
<tns:timestamp xmlns="https://202.82.66.148:8443/ptms4541/ws/CksServices">201606211538</tns:timestamp>  
<tns:pwd xmlns="https://202.82.66.148:8443/ptms4541/ws/CksServices">***********</tns:pwd>  
<tns:worksite xmlns="https://202.82.66.148:8443/ptms4541/ws/CksServices">BST-API</tns:worksite>  
<tns:discount_id xmlns="https://202.82.66.148:8443/ptms4541/ws/CksServices"/></tns:RequestSOAPHeader>  
</soap:Header>  
<soap:Body>  
<ns2:getShippingLine xmlns:ns2="http://ws.service.gen.cks.com/"/> </soap:Body>  
</soap:Envelope> 

Certificates to installed attached in Email 

getShippingLine()  

Наряду с этим у меня есть файл, который есть .crt расширение

Я попытался CURL (отсюда: PHP & XML - How to generate a soap request in PHP from this XML?), а также SoapClient (не понял, как создать запрос в требуемом формате: Sending XML input to WSDL using SoapClient), чтобы реализовать это, но не повезло.

Фактически я не могу понять, как отправить запрос и что нужно отправить в этом запросе, каким образом.

Пожалуйста, помогите мне разобраться в этом.

Благодаря

ответ

0
библиотека SOAP

Php не поддерживает сертификаты и закрытый ключ утверждение, а WSE-PHP отнимают ричард библиотека сделали так хорошо для этого случая, я бы прийти такое решение после долгого времени:

function Curl_Soap_Request($request, $url) 
{ 
    /** 
    * @param request is your xml for soap request 
    * @param url is location of soap where your request with hit 
    */ 

    $keyFile = getcwd() . "\\privatekey.pem"; // 
    $caFile = getcwd() . "\\certificate.pem"; // 
    $certPass = "test123"; 
    // xml post structure 

    $xml_post_string = $request; // data from the form, e.g. some ID number 

    $headers = array(
     "Content-type: application/soap+xml; charset=\"utf-8\"", 
     "Accept: text/xml", 
     "Cache-Control: no-cache", 
     "Pragma: no-cache", 
     // "SOAPAction: '/Imp1/ApplicantEligibilityService", 
     "Content-length: " . strlen($xml_post_string), 
     ); //SOAPAction: your op URL 

    //$url = $soapUrl; 

    // PHP cURL for https connection with auth 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    //curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    // The --key option - If your key file has a password, you will need to set 
    // this with CURLOPT_SSLKEYPASSWD 
    // curl_setopt($ch, CURLOPT_SSLKEY, $keyFile); 
    curl_setopt($ch, CURLOPT_SSLKEY, $keyFile); 

    // The --cacert option 
    curl_setopt($ch, CURLOPT_SSLCERT, $caFile); 

    // The --cert option 
    //curl_setopt($ch, CURLOPT_SSLCERT, $certFile); 
    curl_setopt($ch, CURLOPT_SSLCERTPASSWD, $certPass); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    // curl_setopt($ch, CURLOPT_USERPWD, $soapUser.":".$soapPassword); // username and password - declared at the top of the doc 
    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 180); 
    curl_setopt($ch, CURLOPT_POST, true); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $xml_post_string); // the SOAP request 
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 

    // converting 
    $response = curl_exec($ch); 
    curl_close($ch); 
    return $response; 

} 
+0

также вы можете решить эту проблему, перейдя по этой ссылке: http://zrashwani.com/wcf-ssl-service-with-php/#.V8Ato6KN2tY –

Смежные вопросы