如何发送SOAP方法-Codeigniter



我有一个http请求的示例:

<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">
<Body>
    <SVARCHAR2-RMTO_WEB_SERVICESInput xmlns="http://xmlns.oracle.com/orawsv/TR_PUBLIC_WS/PKG_RMTO_WS">
        <IN_USERNAME-VARCHAR2-IN>test</IN_USERNAME-VARCHAR2-IN>
        <IN_SERVICEID-NUMBER-IN>2</IN_SERVICEID-NUMBER-IN>
        <IN_PASSWORD-VARCHAR2-IN>test123</IN_PASSWORD-VARCHAR2-IN>
        <IN_PARAM_9-VARCHAR2-IN>""</IN_PARAM_9-VARCHAR2-IN>
        <IN_PARAM_8-VARCHAR2-IN>""</IN_PARAM_8-VARCHAR2-IN>
        <IN_PARAM_7-VARCHAR2-IN>""</IN_PARAM_7-VARCHAR2-IN>
        <IN_PARAM_6-VARCHAR2-IN>""</IN_PARAM_6-VARCHAR2-IN>
        <IN_PARAM_5-VARCHAR2-IN>""</IN_PARAM_5-VARCHAR2-IN>
        <IN_PARAM_4-VARCHAR2-IN>""</IN_PARAM_4-VARCHAR2-IN>
        <IN_PARAM_3-VARCHAR2-IN>""</IN_PARAM_3-VARCHAR2-IN>
        <IN_PARAM_2-VARCHAR2-IN>""</IN_PARAM_2-VARCHAR2-IN>
        <IN_PARAM_10-VARCHAR2-IN>""</IN_PARAM_10-VARCHAR2-IN>
        <IN_PARAM_1-VARCHAR2-IN>111100002</IN_PARAM_1-VARCHAR2-IN>
    </SVARCHAR2-RMTO_WEB_SERVICESInput>
</Body>
</Envelope>

我写了此功能,它不会返回任何内容:

 public function sendP($params = array()  , $debug = false ){
 error_reporting(0);
$client = new SoapClient("http://smartcard.rmto.ir:9090/orawsv/TR_PUBLIC_WS/PKG_RMTO_WS?wsdl");
$parameters['USERNAME']     = 'test' ;
$parameters['SERVICEID']    = 2;
$parameters['PASSWORD']     = 'test123';
$parameters['PARAM_1']      = '111100002';
//$parameters['text']         = iconv("UTF-8", 'UTF-8//TRANSLIT',$params['title']);
try{
  $status = $client->RETURN($parameters);}
  catch(SoapFault $e){
  1;
}
if($debug)
return $status;

}

sendP(array()):

我的问题在哪里?我不知道RETURN功能是否正确。

正如我在WSDL文件中看到的那样,您必须调用" XSD:element"的名称:svarchar2-rmto_web_servicesInput(这是您必须调用以发送所需信息的方法(。您没有"返回"方法,您在代码中提到。

也不要忘记复制要发送的参数的精确名称。尝试此示例,我认为它应该起作用。

祝你好运:(

public function sendP($params = array()  , $debug = false ){
$client = new SoapClient("http://smartcard.rmto.ir:9090/orawsv/TR_PUBLIC_WS/PKG_RMTO_WS?wsdl");
$parameters['IN_USERNAME-VARCHAR2-IN'] = 'test' ;
$parameters['IN_SERVICEID-NUMBER-IN'] = 2;
$parameters['IN_PASSWORD-VARCHAR2-IN'] = 'test123';
$parameters['IN_PARAM_1-VARCHAR2-IN'] = '111100002';
try{
  $status = $client->SVARCHAR2-RMTO_WEB_SERVICESInput($parameters);}
  catch(SoapFault $e){
  1;
}
if($debug)
return $status;

如果您不知道自己的功能,则有一个非常有用的功能,称为__getFunctions-您将看到一个输出,例如

0 => string 'RMTO_WEB_SERVICESOutput RMTO_WEB_SERVICES(SVARCHAR2-RMTO_WEB_SERVICESInput $parameters)' (length=87)

基本上您需要尝试做类似的事情

try
    {
        $client = new SoapClient("http://smartcard.rmto.ir:9090/orawsv/TR_PUBLIC_WS/PKG_RMTO_WS?wsdl", ['trace' => 1]);
        var_dump($client->__getFunctions());
        $parameters = [];
        //two alternatives here 
        $client->__soapCall('RMTO_WEB_SERVICES', $parameters);
        //or
        $client->RMTO_WEB_SERVICES($parameters);
    }
    catch (SoapFault $e)
    {
        echo '<h2>Exception Error</h2>';
        echo $e->getMessage();
    }

最新更新