PHP调用SOAP接口的GETcotpaq_方法如何正确传递参数?
错误原因
你遇到的Array to string conversion报错核心有两个原因:
- PHP SOAP扩展无法直接将原生数组转为接口要求的
EstCga_复杂类型参数 - 你编写的参数列表遗漏了方法签名里的第二个参数
$sCte_,参数数量和顺序不匹配也会触发解析错误
解决方法
方案1:按方法签名的参数顺序逐个传参(兼容性最好)
首先构造EstCga_类型的对象,再按顺序传入所有参数:
// 构造复杂类型EstCga_的参数 $sDatDet = new stdClass(); $sDatDet->xCntEmp_ = 1; $sDatDet->xPesUni_ = 10; $sDatDet->xVolUni_ = 10; // 按方法签名的参数顺序传入,注意不要遗漏第二个参数$sCte_,请替换为实际业务值 $response = $client->GETcotpaq_( 'FA', // sCid_ '替换为实际的$sCte_业务值', // 你之前的代码漏了这个必填参数 '44250', // sCor_ '37000', // sCds_ '0', // xRec_ 方法签名要求为string类型,显式转字符串 '0', // xEnt_ 同上转字符串 100, // xVld_ $sDatDet // sDatDet_ ); var_dump($response);
方案2:用关联数组+SoapVar封装复杂类型传参
如果你习惯用关联数组传参,可以用__soapCall方法调用,同时用SoapVar指定复杂类型:
$params = [ 'sCid_' => 'FA', 'sCte_' => '替换为实际的$sCte_业务值', // 必须补全缺失的参数 'sCor_' => '44250', 'sCds_' => '37000', 'xRec_' => '0', 'xEnt_' => '0', 'xVld_' => 100, 'sDatDet_' => new SoapVar( [ 'xCntEmp_' => 1, 'xPesUni_' => 10, 'xVolUni_' => 10 ], SOAP_ENC_OBJECT, 'EstCga_' // 显式指定对应的SOAP复杂类型名 ) ]; // 通过__soapCall方法调用 $response = $client->__soapCall('GETcotpaq_', $params); var_dump($response);
内容的提问来源于stack exchange,提问作者cheemsboy
相关产品推荐
相关产品推荐

