PHP调用C#Webservice传数组参数的问题

ron_xin 2014-06-13 07:41:10
POST /xxxxxxxxxxxx/ws/commonservice.asmx HTTP/1.1
Host: 202.82.66.147
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://xxxxxxxxxxxxxx/webservices/queryVoyageRoute_onWeb"

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<queryVoyageRoute_onWeb xmlns="http://xxxxxxxxxx/webservices/">
<parameters>
<ArrayOfString>
<string>string</string>
<string>string</string>
</ArrayOfString>
<ArrayOfString>
<string>string</string>
<string>string</string>
</ArrayOfString>
</parameters>
<portcompanyCode>string</portcompanyCode>
<lang>string</lang>
</queryVoyageRoute_onWeb>
</soap:Body>
</soap:Envelope>
---------------------------------------------------------------------------------------
返回:

HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<queryVoyageRoute_onWebResponse xmlns="http://XXXXXXXXXXXXXX/webservices/">
<queryVoyageRoute_onWebResult>
<xsd:schema>schema</xsd:schema>xml</queryVoyageRoute_onWebResult>
</queryVoyageRoute_onWebResponse>
</soap:Body>
</soap:Envelope>
-----------------------------------------------------------------------------------

<?php
$client = new SoapClient('http://xxxxxxxxxxxxx/ws/commonservice.asmx?WSDL');//这个SOAP地址要换成你自己的
$client->soap_defencoding = 'utf-8';
$client->decode_utf8 = false;
$client->xml_encoding = 'utf-8';
$setoffdate=array(0=>"setoffdate",1=>"2014-02-10");
$fromportcode=array(0=>"fromportcode",1=>"SK");
$toportcode=array(0=>"toportcode",1=>"ZH");
$parameters=array(0=>$setoffdate,1=>$fromportcode,2=>$toportcode);
$param = array(0=>$parameters,1=>"SKG",2=>"E");
//$param["param1"]="01";
//$param["param2"]="02";
//$result = $client->__soapCall("GetArticle", array( $param ));
$result = $client->__Call("queryVoyageRoute_onWeb", array( $param ));
if (is_soap_fault($result))
{
trigger_error("SOAP Fault: (faultcode: {$result->faultcode}, faultstring: {$result->faultstring})", E_USER_ERROR);
}
else
{
$data = $result->queryVoyageRoute_onWebResult ; //这里返回的是类,必须使用->得到元素的值
print_r($data);
//$city_xml = simplexml_load_string($city);
}
?>

提示错误:
Notice: Undefined property: stdClass::$queryVoyageRoute_onWebResult in D:\xampp\htdocs\WS\index.php on line 21

如何传参数过去类型不对?要怎么传过去呢?
...全文
290 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
ron_xin 2014-06-13
  • 打赏
  • 举报
回复
引用 14 楼 xuzuning 的回复:
$key = array('FROMPORT', 'TOPORT', 'SETOFFTIME');
foreach($obj_xml->NewDataSet->Table as $item) {
  foreach($key as $k) {
    $t[$k] = strval($item->$k);
  }
  $res[] = $t;
}
print_r($res);
Array
(
    [0] => Array
        (
            [FROMPORT] => 蛇口港
            [TOPORT] => 氹仔客运码头
            [SETOFFTIME] => 2014-02-10 09:30
        )

    [1] => Array
        (
            [FROMPORT] => 蛇口港
            [TOPORT] => 氹仔客运码头
            [SETOFFTIME] => 2014-02-10 09:30
        )

    [2] => Array
        (
            [FROMPORT] => 蛇口港
            [TOPORT] => 氹仔客运码头
            [SETOFFTIME] => 2014-02-10 11:00
        )

    [3] => Array
        (
            [FROMPORT] => 蛇口港
            [TOPORT] => 氹仔客运码头
            [SETOFFTIME] => 2014-02-10 11:00
        )

    [4] => Array
        (
            [FROMPORT] => 蛇口港
            [TOPORT] => 氹仔客运码头
            [SETOFFTIME] => 2014-02-10 19:00
        )

)
谢谢版主,麻烦版主把8楼的回复给删除,我一会结贴。
xuzuning 2014-06-13
  • 打赏
  • 举报
回复
$key = array('FROMPORT', 'TOPORT', 'SETOFFTIME');
foreach($obj_xml->NewDataSet->Table as $item) {
  foreach($key as $k) {
    $t[$k] = strval($item->$k);
  }
  $res[] = $t;
}
print_r($res);
Array
(
    [0] => Array
        (
            [FROMPORT] => 蛇口港
            [TOPORT] => 氹仔客运码头
            [SETOFFTIME] => 2014-02-10 09:30
        )

    [1] => Array
        (
            [FROMPORT] => 蛇口港
            [TOPORT] => 氹仔客运码头
            [SETOFFTIME] => 2014-02-10 09:30
        )

    [2] => Array
        (
            [FROMPORT] => 蛇口港
            [TOPORT] => 氹仔客运码头
            [SETOFFTIME] => 2014-02-10 11:00
        )

    [3] => Array
        (
            [FROMPORT] => 蛇口港
            [TOPORT] => 氹仔客运码头
            [SETOFFTIME] => 2014-02-10 11:00
        )

    [4] => Array
        (
            [FROMPORT] => 蛇口港
            [TOPORT] => 氹仔客运码头
            [SETOFFTIME] => 2014-02-10 19:00
        )

)
ron_xin 2014-06-13
  • 打赏
  • 举报
回复
引用 10 楼 xuzuning 的回复:
用 simplexml_load_string 加载得到的都是 SimpleXMLElement 对象 具体要如何分析要是具体的数据而定 你可以贴出 $result 并说明需求
我只想print_r:FROMPORT、TOPORT、SETOFFTIME的字段信息
ron_xin 2014-06-13
  • 打赏
  • 举报
回复
结果源文件:

<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1"><NewDataSet xmlns=""><Table diffgr:id="Table1" msdata:rowOrder="0"><FROMPORT>蛇口港</FROMPORT><TOPORT>氹仔客运码头</TOPORT><FPORTCODE>SK</FPORTCODE><TPORTCODE>MAC</TPORTCODE><SHIP>金星</SHIP><SHIPCODE>JX</SHIPCODE><SETOFFTIME>2014-02-10 09:30</SETOFFTIME><SELLSTATUS>M</SELLSTATUS><LINECODE>SK-MAC</LINECODE><TICKETNUM>普通位(28)头等位(5)特等位(8)</TICKETNUM><CLIENTCODE>SKG</CLIENTCODE></Table><Table diffgr:id="Table2" msdata:rowOrder="1"><FROMPORT>蛇口港</FROMPORT><TOPORT>氹仔客运码头</TOPORT><FPORTCODE>SK</FPORTCODE><TPORTCODE>MAC</TPORTCODE><SHIP>金星</SHIP><SHIPCODE>JX</SHIPCODE><SETOFFTIME>2014-02-10 09:30</SETOFFTIME><SELLSTATUS>M</SELLSTATUS><LINECODE>SK-MAC</LINECODE><TICKETNUM>普通位(28)头等位(5)特等位(8)</TICKETNUM><CLIENTCODE>XYLC</CLIENTCODE></Table><Table diffgr:id="Table3" msdata:rowOrder="2"><FROMPORT>蛇口港</FROMPORT><TOPORT>氹仔客运码头</TOPORT><FPORTCODE>SK</FPORTCODE><TPORTCODE>MAC</TPORTCODE><SHIP>金星</SHIP><SHIPCODE>JX</SHIPCODE><SETOFFTIME>2014-02-10 11:00</SETOFFTIME><SELLSTATUS>M</SELLSTATUS><LINECODE>SK-MAC</LINECODE><TICKETNUM>普通位(42)头等位(31)特等位(0)</TICKETNUM><CLIENTCODE>YJGY</CLIENTCODE></Table><Table diffgr:id="Table43" msdata:rowOrder="42"><FROMPORT>蛇口港</FROMPORT><TOPORT>氹仔客运码头</TOPORT><FPORTCODE>SK</FPORTCODE><TPORTCODE>MAC</TPORTCODE><SHIP>迅隆5</SHIP><SHIPCODE>XL5</SHIPCODE><SETOFFTIME>2014-02-10 11:00</SETOFFTIME><SELLSTATUS>M</SELLSTATUS><LINECODE>SK-MAC</LINECODE><TICKETNUM>普通位(42)头等位(31)特等位(0)</TICKETNUM><CLIENTCODE>SKXRD</CLIENTCODE></Table><Table diffgr:id="Table44" msdata:rowOrder="43"><FROMPORT>蛇口港</FROMPORT><TOPORT>氹仔客运码头</TOPORT><FPORTCODE>SK</FPORTCODE><TPORTCODE>MAC</TPORTCODE><SHIP>迅隆5</SHIP><SHIPCODE>XL5</SHIPCODE><SETOFFTIME>2014-02-10 19:00</SETOFFTIME><SELLSTATUS>M</SELLSTATUS><LINECODE>SK-MAC</LINECODE><TICKETNUM>普通位(148)头等位(7)特等位(8)</TICKETNUM><CLIENTCODE>SCP</CLIENTCODE></Table></NewDataSet></diffgr:diffgram>
ron_xin 2014-06-13
  • 打赏
  • 举报
回复
页面结果:
蛇口港氹仔客运码头SKMAC金星JX2014-02-10 09:30MSK-MAC普通位(28)头等位(5)特等位(8)SKG
蛇口港氹仔客运码头SKMAC金星JX2014-02-10 09:30MSK-MAC普通位(28)头等位(5)特等位(8)XYLC
蛇口港氹仔客运码头SKMAC金星JX2014-02-10 09:30MSK-MAC普通位(28)头等位(5)特等位(8)SHYG
蛇口港氹仔客运码头SKMAC金星JX2014-02-10 09:30MSK-MAC普通位(28)头等位(5)特等位(8)SJCD
蛇口港氹仔客运码头SKMAC金星JX2014-02-10 09:30MSK-MAC普通位(28)头等位(5)特等位(8)BAKY
蛇口港氹仔客运码头SKMAC金星JX2014-02-10 09:30MSK-MAC普通位(28)头等位(5)特等位(8)ZYJD
蛇口港氹仔客运码头SKMAC金星JX2014-02-10 09:30MSK-MAC普通位(28)头等位(5)特等位(8)YJGY
xuzuning 2014-06-13
  • 打赏
  • 举报
回复
用 simplexml_load_string 加载得到的都是 SimpleXMLElement 对象 具体要如何分析要是具体的数据而定 你可以贴出 $result 并说明需求
ron_xin 2014-06-13
  • 打赏
  • 举报
回复
上面的多了一个.

print_r($child->toport).;
ron_xin 2014-06-13
  • 打赏
  • 举报
回复
引用 7 楼 xuzuning 的回复:
没错,是 utf-8 的


你当 gbk 显示当然就乱码了


版主,麻烦你再看看,为何,我想print_r个别的列的表值不行呢?全部是SimpleXMLElement Object ( )


<?php
header("content-type:text/html;charset=utf-8");
..........
?>

xuzuning 2014-06-13
  • 打赏
  • 举报
回复
没错,是 utf-8 的


你当 gbk 显示当然就乱码了
ron_xin 2014-06-13
  • 打赏
  • 举报
回复
引用 4 楼 xuzuning 的回复:
SOAP 嘛,当然是 utf-8 的啦 航班信息?
搞定了,请版本帮我把3楼的回复给删除,谢谢。

header("content-type:text/html;charset=utf-8");
ron_xin 2014-06-13
  • 打赏
  • 举报
回复
引用 4 楼 xuzuning 的回复:
SOAP 嘛,当然是 utf-8 的啦 航班信息?
$client->xml_encoding = 'utf-8'; 此处不是已经xml_encoding = 'utf-8'; 了吗?为何还是乱码?
xuzuning 2014-06-13
  • 打赏
  • 举报
回复
SOAP 嘛,当然是 utf-8 的啦 航班信息?
ron_xin 2014-06-13
  • 打赏
  • 举报
回复
我已经搞定了,把参数名加进去就可以。

$param = array('parameters'=>$parameters,'portcompanyCode'=>"SKG",'lang'=>"C");
但是,中文调出来的出现一片乱码,怎么能知道,他是用哪种编码呢?

铔囧彛娓�鐝犳捣涔濇床娓�SKZH娴� 閽�KKJ2014-02-10 07:30MSK-ZH鏅€氳埍(65)缍撴繜鑹�(27)闋瓑鑹�(0)璐靛鑸�(12)JLFZ
铔囧彛娓�鐝犳捣涔濇床娓�SKZH娴� 閽�KKJ2014-02-10 07:30MSK-ZH鏅€氳埍(65)缍撴繜鑹�(27)闋瓑鑹�(0)璐靛鑸�(12)SJCD
铔囧彛娓�鐝犳捣涔濇床娓�SKZH娴� 閽�KKJ2014-02-10 07:30MSK-ZH鏅€氳埍(65)缍撴繜鑹�(27)闋瓑鑹�(0)璐靛鑸�(12)XYLC
铔囧彛娓�鐝犳捣涔濇床娓�SKZH娴� 閽�KKJ2014-02-10 07:30MSK-ZH鏅€氳埍(65)缍撴繜鑹�(27)闋瓑鑹�(0)璐靛鑸�(12)SKWEB
铔囧彛娓�鐝犳捣涔濇床娓�SKZH娴� 閽�KKJ2014-02-10 07:30MSK-ZH鏅€氳埍(65)缍撴繜鑹�(27)闋瓑鑹�(0)璐靛鑸�(12)AYGJ
铔囧彛娓�鐝犳捣涔濇床娓�SKZH娴� 閽�KKJ2014-02-10 07:30MSK-ZH鏅€氳埍(65)缍撴繜鑹�(27)闋瓑鑹�(0)璐靛鑸�(12)SHYG
铔囧彛娓�鐝犳捣涔濇床娓�SKZH娴� 閽�KKJ2014-02-10 07:30MSK-ZH鏅€氳埍(65)缍撴繜鑹�(27)闋瓑鑹�(0)璐靛鑸�(12)BZLY
铔囧彛娓�鐝犳捣涔濇床娓�SKZH娴� 閽�KKJ2014-02-10 07:30MSK-ZH鏅€氳埍(65)缍撴繜鑹�(27)闋瓑鑹�(0)璐靛鑸�(12)LHMT
铔囧彛娓�鐝犳捣涔濇床娓�SKZH娴� 閽�KKJ2014-02-10 07:30MSK-ZH鏅€氳埍(65)缍撴繜鑹�(27)闋瓑鑹�(0)璐靛鑸�(12)STSJD
铔囧彛娓�鐝犳捣涔濇床娓�SKZH娴� 閽�KKJ2014-02-10 07:30MSK-ZH鏅€氳埍(65)缍撴繜鑹�(27)闋瓑鑹�(0)璐靛鑸�(12)QSHK
铔囧彛娓�鐝犳捣涔濇床娓�SKZH娴� 閽�KKJ2014-02-10 07:30MSK-ZH鏅€氳埍(65)缍撴繜鑹�(27)闋瓑鑹�(0)璐靛鑸�(12)KBSJ
铔囧彛娓�鐝犳捣涔濇床娓�SKZH娴� 閽�KKJ2014-02-10 07:30MSK-ZH鏅€氳埍(65)缍撴繜鑹�(27)闋瓑鑹�(0)璐靛鑸�(12)YGJD
铔囧彛娓�鐝犳捣涔濇床娓�SKZH娴� 閽�KKJ2014-02-10 07:30MSK-ZH鏅€氳埍(65)缍撴繜鑹�(27)闋瓑鑹�(0)璐靛鑸�(12)WYN
铔囧彛娓�鐝犳捣涔濇床娓�SKZH娴� 閽�KKJ2014-02-10 07:30MSK-ZH鏅€氳埍(65)缍撴繜鑹�(27)闋瓑鑹�(0)璐靛鑸�(12)HGJD
铔囧彛娓�鐝犳捣涔濇床娓�SKZH娴� 閽�KKJ2014-02-10 07:30MSK-ZH鏅€氳埍(65)缍撴繜鑹�(27)闋瓑鑹�(0)璐靛鑸�(12)TGGY
铔囧彛娓�鐝犳捣涔濇床娓�SKZH娴� 閽�KKJ2014-02-10 07:30MSK-ZH鏅€氳埍(65)缍撴繜鑹�(27)闋瓑鑹�(0)璐靛鑸�(12)ZNHY
铔囧彛娓�鐝犳捣涔濇床娓�SKZH娴� 閽�KKJ2014-02-10 07:30MSK-ZH鏅€氳埍(65)缍撴繜鑹�(27)闋瓑鑹�(0)璐靛鑸�(12)MHZX
xuzuning 2014-06-13
  • 打赏
  • 举报
回复
你先检查 queryVoyageRoute_onWebResult 是否拼写错误 没错则: print_r($result); 看看结果 如果结果不包含期望内容 则检查传递的参数是否正确 由于没有看到你的 WSDL,所以不知道正确的参数该如何写 参数应是一个关联数组(关联键是WSDL),可能还是多维的 而你的是一个多维的下标数组

21,886

社区成员

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

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