本帖最后由 rznqp 于 2011-12-31 09:14:35 编辑

解决方案 »

  1.   

    我觉得你可以试试传递相关xml字符串。因为参数一般只能是数组或字符串。 最后传递都是字符串。但他要求是有xml格式并且是符合xml变量类型的。 你可以看他那query对象的xml定义。
      

  2.   

    定义是:
    <s:element minOccurs="0" maxOccurs="1" name="Query">
    - <s:complexType mixed="true">
    - <s:sequence>
      <s:any />  
      </s:sequence>
      </s:complexType>
      </s:element>
      

  3.   

    1、传递的 XML 应该是 XML 文本,而不是 XML 的二进制对象
    2、对方暴露的方法和参数类型,应该用
    soapClient::__getFunctions() 和 soapClient::__getTypes()
    查看,而不是直接分析 WSDL 来得到。因为实现原因,析出的结果可能不一样
    3、既然是 webservice,那就应该给出目标地址。这样才能让别人帮助你,而不是只是啃你嚼过的馒头
      

  4.   

    刚与盛大做个交接,免费让你看下
    下载个nusoaprequire_once('../co/snda/nusoap/nusoap.php');
        // Create the client instance
       $client = new soapclient('http://jf.sdptest.sdo.com/ExchangeScore/exchangeservice.asmx?WSDL', 'wsdl');
       $client->soap_defencoding = 'utf-8';
       $client->decode_utf8 = false;
       $client->xml_encoding = 'utf-8';
       $err = $client->getError();
       if ($err) {
        echo '<h2>Constructor error</h2><pre>' . $err . '</pre>';
        echo '<h2>Debug</h2><pre>' . htmlspecialchars($client->getDebug(), ENT_QUOTES) . '</pre>';
        exit();
       }
        // Call the SOAP method
              
       $param['merchantId']      = '140007';
       $param['promotionID']     = 'haoyiding001';
       $param['userId']          = 'test';
       $param['merchantOrderId'] = '12045';
       $param['amount']          = 0.01;
       $param['status']          = 2;
       $param['insertTime']      = date('Y-m-d H:i:s',strtotime('20111230140102'));
       $param['re']          = '';     
       
       $param['encryptCode'] = md5($param['merchantId'].'|'.$param['promotionID'].'|'.$param['userId'].'|'.$param['merchantOrderId'].'|'.$param['amount'].'|'.$param['status'].'|'.$param['insertTime'].'|'.$param['re'].'|365hcom');
          
       $result = $client->call('InsertMerchantOrder', $param);
       print_r($result);die;