• 1 رای - 5 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
یک تابع برای انجام عملیات SOAP
#1
سلام،
یک تابع ساده برای انجام عملیات SOAP:
کد پی‌اچ‌پی:
<?php

// simple function to call a soap operation
//   without the new php5 soap objects
// martin kouba - 24.01.2005 
//   updated for ssl connections - 12.08.2005
//   updated for multiline results - 04.04.2006
// parameters:
//   host .... address of the server that is running the webservice
//   port .... port to access the webservice; http => 80 
//   url ..... url of the webservice; where shall be posted to
//   action .. the soap action; including the namespace
//   vars .... the arguments of the webservice in an associative array
function soap_operation($host$port$url$action$vars)
{
    
// define eol that is used by the server 
    // windows webservices seem to need a \r\n 
    
$eol"\r\n"
    
// extract namespace from soap action 
    
preg_match('/(https?:\/\/.*\/)(.*)/', &$action, &$matches) or exit('Invalid SOAP action'); 
    
$soap_ns= &$matches[1]; 
    
$soap_action= &$matches[2]; 
    
// create soap envelope 
    // convert to utf8 and get the content length 
    
$content"<?xml version=\"1.0\" encoding=\"utf-8\"?>" $eol 
    
"<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">".$eol
    
"  <soap:Body>" $eol 
    
"    <" $soap_action " xmlns=\"" $soap_ns "\">" $eol
    while(list(
$key$value) = each(&$vars)): $content.= "      <" $key ">" $value "</" $key ">" $eol
    endwhile;
    
$content.=  "    </" $soap_action ">" $eol 
    
"  </soap:Body>" $eol 
    
"</soap:Envelope>"
    
$content= &utf8_encode(&$content); 
    
$content_length= &strlen(&$content); 
    
// create soap header 
    // the connection should be closed right after the response 
    // since HTTP 1.1 connections are Keep-Alive per default 
    // we set "Connection: close" 
    
$headers"POST " $url " HTTP/1.1" $eol 
    
"Host: " str_replace('ssl://''', &$host) . "" $eol 
    
"Connection: close" $eol 
    
"Content-Type: text/xml; charset=utf-8" $eol
    
"Content-Length: " $content_length "" $eol 
    
"SOAPAction: \"" $soap_ns $soap_action "\"" $eol $eol
    
// debug 
    #echo("<pre>{$headers}{$content}</pre>"); 
    // make connection to server and post header and the soap envelope 
    
$fp= &fsockopen(&$host, &$port, &$errno, &$errstr10); 
    
    if(!
$fp): return(false);
    endif;
    
fputs(&$fp, &$headers); 
    
fputs(&$fp, &$content); 
    
// the connection should be closed after the response 
    // yet, we want to set a timeout to react before the php script timeout comes in 
    
stream_set_timeout(&$fp20); 
    
$data''
    
$status= &socket_get_status(&$fp); 

        while(!
feof(&$fp) && !$status['timed_out'])
        { 
            
$data.= fgets(&$fp1024); 
            
$status= &socket_get_status(&$fp); 
        };

    
fclose(&$fp);
    
// extract the soap result 
    
preg_match('/<' $soap_action 'Result>(.*)<\/' $soap_action 'Result>/is', &$data, &$matches) or exit('Invalid SOAP response'); 
    return(
$matches[1]);
}

#$soap_parameter= array('Username'=>'abc', 'OldPassword'=>12345, 'NewPassword'=>54321);
#print_r(soap_operation('127.0.0.1', 80, 'http://127.0.0.1/soap.asmx', 'http://127.0.0.1/webservice/xxxxx', &$soap_parameter));
?>
وبلاگ: Yousha.Blog.ir


کد کمتر => خطای کمتر => قابل فهمتر => خوانایی بیشتر => نگهداری بهتر
  پاسخ
تشکر شده توسط : zoghal hamid_80386


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان