在soap请求中发送XML并附加证书PHP

时间:2016-07-05 09:13:13

标签: php xml curl soap

我正在尝试实现SOAP API。但我没有得到如何将请求发送到给定的URL。

我对该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)以实现此目的但是没有运气。

实际上我无法理解如何以该方式发送请求以及需要在该请求中发送的内容。

请帮助我理解这一点。

由于

1 个答案:

答案 0 :(得分:0)

Php SOAP库不支持证书和私钥断言以及wse-php rob richard库在这种情况下做得很好,我必须在很长一段时间后来解决这个问题:

 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;

}