php soap 数组,PHP SOAP client pass array to C# SOAP webservice(PHP SOAP 数组参数传递)

由于前面同事是用C#实现soap webservice的,有一个函数中用到了数组变量byte [] buffer,这个用C#的soap client是可以毫无压力的实现的,且功能正常。

但是现版本中client需用php来实现,在这个数组变量传递部分卡住了,传递过去的感觉是数组的地址,而非数组内容。

以下是错误代码!!!!

$arybuff =array(1,2,3,4,5,6);

$aryPara = array('site'=>5,'cmd'=>2,'buffer'=>$arybuff,'IP'=>'192.168.1.64');

$result1 = $soap->YSSocketSend20($aryPara);

php会产生告警,提示将数组转换成了字符串。传递过去的buffer是错误的,并非1,2,3……更像是一个地址值。

OK,这时候软件对SOAP进行抓包,以下信息眼前一亮。

base64Binary,这个是buffer传递的数据类型,知道传递的是什么东西后,接下来的问题就是要将传递的数组转换成base64Binary类型的数据。

但是接下来的代码也是错误的!!!!!

$arybuff =array(1,2,3,4,5,6);

$text ="";

$i=0;

for ( $i=0; $i

$text .= chr($arybuff[$i]);

}

$text = base64_encode($text);

$aryPara = array('site'=>5,'cmd'=>2,'buffer'=>$text,'IP'=>'192.168.1.64');

$result1 = $soap->YSSocketSend20($aryPara);

If your WSDL file containts a parameter with a base64Binary type, you should not use base64_encode() when passing along your soap vars. When doing the request,the SOAP library automatically base64 encodes your data, so otherwise you'll be encoding it twice.

$string = 'data_you_want_to_send___like_xml_in_soap';

$soap_data = array(

'foo' => 'bar',

//'content' => base64_encode($string ) // don't do this

'content' => $string //do this

);

$response = $client->Send($soap_data);

?>

所以正确的代码应该是这样的:

$arybuff =array(1,2,3,4,5,6);

$text ="";

$i=0;

for ( $i=0; $i

$text .= chr($arybuff[$i]);

}

//$text = base64_encode($text);

$aryPara = array('site'=>5,'cmd'=>2,'buffer'=>$text,'IP'=>'192.168.1.64');

$result1 = $soap->YSSocketSend20($aryPara);        花了差不多一天时间才搞定这个问题,简单写了篇博客记录下解决问题的过程,还是得多看php官方的PHP Manual才行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值