php soapclient 乱码,接上一篇,php的soapclient的问题

之前请求通过curl实现了,但是我还是想研究下,为什么PHP原生的soapclient构造出来的请求不行。

通过对比:

echo "请求头:\n" . $client->__getLastRequestHeaders() . "\n";

echo "请求体:\n" . htmlspecialchars_decode($client->__getLastRequest()) . "\n";

echo "返回头:\n" . $client->__getLastResponseHeaders() . "\n";

echo "返回内容:\n" . $client->__getLastResponse() . "\n";

对比这四个值与在soapui中调试请求的内容的对比,发现请求的xml始终不一致,而如何构造也毫无头绪。

于是又看了下对方的wsdl文件。看到这样一段代码:

巧合下,我去查看了以下这个

complexType

于是找到这样一篇文章:http://blog.sina.com.cn/s/blog_61bafc5a0100mki2.html

文章告诉我们,php在调用这种webservice的时候,不能直接给参数赋值,而是应该使用stdclass

这时我们要传入的参数为对象类型,就要构造这么一个对象。

具体实现如下:

$p=new StdClass();

$p->Name="adolf";

$p->Age=22;

这个对象构造完成,把此对象实例作为参数传入即可。

就这样,原生的soapclient也解决了我的问题。附代码:

$client = new SoapClient("http://192.168.1.168:8080/center/services/HIPMessageServer?wsdl", array('trace' => 1));

$tmp=new stdClass();

$tmp->action='PatientRegistryFindCandidatesQuery';

//这里不再需要cdata的实体符号了

$tmp->message=iconv('gb2312','utf-8','./a.txt');

$result = $client->HIPMessageServer($tmp);

echo "请求头:\n" . $client->__getLastRequestHeaders() . "\n";

echo "请求体:\n" . htmlspecialchars_decode($client->__getLastRequest()) . "\n";

echo "返回头:\n" . $client->__getLastResponseHeaders() . "\n";

echo "返回内容:\n" . $client->__getLastResponse() . "\n";

var_dump((get_object_vars($result)));

------------正 文 已 结 束, 感 谢 您 的 阅 读 (折雨的天空)--------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值