如何发送肥皂方法 - codeigniter

时间:2018-02-24 13:15:22

标签: php codeigniter soap

我有一个来自肥皂的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功能是否正确。

2 个答案:

答案 0 :(得分:0)

正如我在WSDL文件中看到的那样,您必须调用名称“xsd:element”:SVARCHAR2-RMTO_WEB_SERVICESInput(这是您必须调用以发送所需信息的方法)。你已经在代码中提到过没有“RETURN”方法。

并且不要忘记复制要发送的参数的确切名称。 试试这个例子,我认为它应该可行。

祝你好运:)

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;

答案 1 :(得分:0)

如果你不了解你的功能,那么有一个非常有用的功能叫__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();
    }