具体什么个情况也不清楚,但是对方是用java或者c#写的服务端
在文档中,明确说明了,请求的xml内容格式
按照php调用普通webservice接口的办法,始终无法得到结果
在$client->__getLastRequestHeaders() 调试很久以后,得到一个结果,我感觉php原生的soapclient构造的请求结构不符合对方的要求
于是网上找了下,看到一篇文章:http://www.tuicool.com/articles/FfqQ3m
其中,可以通过curl自定义发送请求体,于是,自己构造了请求内容发送过去,成功获取到结果。
这里记录下通过curl自定义请求的代码:
$postAllString = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/"><soapenv:Header/><soapenv:Body>
<tem:Login>
<tem:account>'.$uid.'</tem:account>
<tem:pwd>'.$psw.'</tem:pwd>
</tem:Login>
</soapenv:Body></soapenv:Envelope>';
$soap_do = curl_init();
curl_setopt($soap_do, CURLOPT_URL, $url);
curl_setopt($soap_do, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($soap_do, CURLOPT_TIMEOUT, 10);
curl_setopt($soap_do, CURLOPT_RETURNTRANSFER, true);
curl_setopt($soap_do, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($soap_do, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($soap_do, CURLOPT_POST, true);
curl_setopt($soap_do, CURLOPT_POSTFIELDS, $postAllString);
curl_setopt($soap_do, CURLOPT_HTTPHEADER, array('Content-Type: text/xml; charset=utf-8', 'Content-Length: ' . strlen($postAllString)));
$result = curl_exec($soap_do);
if (curl_errno($soap_do)) {
return false;
}
//对返回的xml内容进行解析
$p = xml_parser_create();
xml_parse_into_struct($p, $result, $vals, $indexs);
xml_parser_free($p);
//打印看下内容吧
print_r($vals);