简体   繁体   中英

Send XML in soap request and attach certificate PHP

I am trying to implement an SOAP API. But I am not getting how to send request to the given URL.

I do not have any support for that API, just have few lines as an instruction.

I did not used SOAP before, can some one please help to understand how to create and send request as XML using a certificate.

Here is the instructions to use the 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() 

Along with this I have an file that have .crt extension

I have tried CURL (from here : PHP & XML - How to generate a soap request in PHP from this XML? ) and also SoapClient (did not understand how to create request in required format : Sending XML input to WSDL using SoapClient ) to implement this but no luck.

Actually I am unable to understand that how to send request and what need to be send in that request in which manner.

Please help me to understand this.

Thanks

Php SOAP library does not support certificates and private key assertion as well wse-php rob richard library done so well for this case , i have to come this solution after long time :

 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;

}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM