PHP如何向.NET接口webservice发送xml请求

SICTXK 2010-10-26 03:19:05
请教各位:
首先,我明白PHP可以使用soapclient 生成实例 调用.NET中暴露的接口方法。PHP代码如下:
$client = new soapclient("http://123.456.78.9/websvclient/Service.asmx?WSDL",'wsdl');
$aryPara = array('strAccount'=>'admin' ,'strPassword'=>'pass');
/*
* @return: webservice result
* @param 1: webservice method
* @param 2: Account and password
*/
$result = $client->call('OfferList', $aryPara);

上述代码对应的.NET写法是(本人不懂.NET)
        
// 实例化对象 并获取订单的XML字符串
ServiceReference1.CollectionServiceSoapClient obj = new ServiceReference1.CollectionServiceSoapClient();
System.Xml.XmlElement xml = obj.OfferList("admin".ToString(), "pass".ToString());

PHP向.NET的webservice发送请求,.NET中接口方法的参数是分别写的,PHP中需要将参数当做一个数组。但如果.NET中某个参数是xml字符串,在PHP中怎么写才能正确发送请求呢?
.NET的客户端请求代码如下:

......................//此处省去dsNew内容代码若干行
string strXdoc = "";
// 把Dataset转换成XML字符串
strXdoc = dsNew.GetXml();

XmlDocument Xdoc = new XmlDocument();
Xdoc.LoadXml(strXdoc);

//发送XMl到Webservice,找返回一个XML
XmlElement xmlSaveStatus = obj.OfferSave("admin".ToString(), "pass".ToString(),txtContactEmail.Value, Xdoc.DocumentElement);



请教一下上述代码用PHP实现应该如何写,最关键的就是最后一个参数xml,PHP传参数时必写入数组,但是xml作为数组元素
却没有对应的键名,如
$aryPara = array('strAccount'=>'admin' ,'strPassword'=>'pass','txtContactEmail'=>'aa@gamil.com','?'=>'?');

望各位大牛 不吝赐教 拜谢!
...全文
344 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
rznqp 2011-12-29
  • 打赏
  • 举报
回复
我也受此问题困扰!!

跪求高手给解决一下!

我的也是.net的服务器, 给出的第三个参数名为 Query
<Query>xml</Query>


传递参数时用
$xml = simplexml_load_file('a.xml');
"Query"=>$xml

不报错,但服务器上接受不到内容。。。郁闷了。如果把"Query"=>"" 就会报错
blue44sky 2010-10-29
  • 打赏
  • 举报
回复
好像nusoap.serv.php类,传参数都是用数组的
服务端假如有两个参数($int,$xml)
客户端直接传参(array('1','<?xml ... ?>'))就可以了
SICTXK 2010-10-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xuzuning 的回复:]
给出 WSDL 文本
即直接访问 http://123.456.78.9/websvclient/Service.asmx?WSDL 得到的页面内容
[/Quote]
显示如下:
<soap:Body>
<OfferSave xmlns="http://tempuri.org/">
<strEmail>string</strEmail>
<strPassword>string</strPassword>
<strOtherEmail>string</strOtherEmail>
<strcontactPhone>string</strcontactPhone>
<strPaymentCondition>string</strPaymentCondition>
<strComment>string</strComment>
<xml>xml</xml>
</OfferSave>
</soap:Body>
我把最后一个数组元素写为: 'xml'=>$xml
报错如下:

Array ( [faultcode] => soap:Server [faultstring] => Server was unable to process request. ---> Object reference not set to an instance of an object. [detail] => )
SICTXK 2010-10-28
  • 打赏
  • 举报
回复
.NET 里面的 Xdoc.DocumentElement 与PHP里面的$xml 可以划等号吗?

var_dump($xml);结果如下:

object(SimpleXMLElement)#22 (1) {
["ds"]=>
array(3) {
[0]=>
object(SimpleXMLElement)#23 (3) {
["stone"]=>
string(7) "SH04778"
["discount"]=>
string(3) "-25"
["Status"]=>
object(SimpleXMLElement)#26 (1) {
[0]=>
string(1) " "
}
}
[1]=>
object(SimpleXMLElement)#24 (3) {
["stone"]=>
string(7) "SH04785"
["discount"]=>
string(3) "-17"
["Status"]=>
object(SimpleXMLElement)#27 (1) {
[0]=>
string(1) " "
}
}
[2]=>
object(SimpleXMLElement)#25 (3) {
["stone"]=>
string(7) "SH04790"
["discount"]=>
string(3) "-25"
["Status"]=>
object(SimpleXMLElement)#28 (1) {
[0]=>
string(1) " "
}
}
}
}


求解!谢谢!
gumwzg 2010-10-26
  • 打赏
  • 举报
回复
用Xdoc 做键名试试
xuzuning 2010-10-26
  • 打赏
  • 举报
回复
给出 WSDL 文本
即直接访问 http://123.456.78.9/websvclient/Service.asmx?WSDL 得到的页面内容

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧