SoapClient падключэнне да SoapServer

Мне трэба падлучыцца да SOAP-серверу з PHP, я чытаў шмат дакументацыі, прыклады і падручнікі, але я да гэтага часу не можа зрабіць праверку сапраўднасці на маім сэрвэры. Я зрабіў ніжэй працы:

 $agencyNumber = 7818619810;
    $fullTransmission = false;
    //$context = array('header' => 'Content-type: application/soap+xml; charset=utf-8');
    $params = array( 'agencyNumber'     => 7818619810, 'fullTransmission' => 0/*,$context*/);

    $client = new SoapClient("http://link/to/server?wsdl");
   $test =  $client->__getFunctions();
    var_dump($test );// returns the functions my supplier provides, as well __getTypes() gives a bunch of variable arrays ect..
    $response = $client->__soapCall('GetTransmissionTicket',array($params) );//line 16 which is mentioned on error print
    var_dump($response);

Нават калі я ўсталёўваю $ кантэкстнай , калі я спрабую запусціць, я атрымліваю памылку ніжэй:

Fatal error: Uncaught SoapFault exception: [HTTP] Cannot process the message because the content type 'text/xml; charset=utf-8' was not the expected type 'application/soap+xml; charset=utf-8'. in C:\xampp\htdocs\xml\inc\connection_test.php:16 Stack trace: #0 [internal function]: SoapClient->__doRequest('http://interfac...', '..//my-provider...', 1, 0) #1 C:..path..test.php(16): SoapClient->__soapCall('GetTransmission...', Array) #2 {main} thrown in C:..path..test.php on line 16

Аддалены метад, які я спрабую патэлефанаваць называецца GetTransmissionTicket , які прымае два параметру, (цэлае) agencyNumber і fullTransmission (BOOL) ..

Я хачу падкрэсліць, што ёсць шмат патокаў на гэтую тэму, некаторыя з якіх вельмі блізкія да майго пытання ( 1 , 2 , 3 і гэтак далей. .), але я сапраўды не мог вырашыць гэтую праблему. Калі ласка, дайце руку .. З найлепшымі пажаданнямі ..

1

6 адказы

Try $params = array( 'agencyNumber' => 7818619810, 'fullTransmission' => false);

instead of $params = array( 'agencyNumber' => 7818619810, 'fullTransmission' => 0);

<�Моцны> АБО </моцны>

Use $client = new SoapClient("http://link/to/server?wsdl", array('soap_version' => SOAP_1_1));

таму што <�Код> прыкладання/мыла + xml гэта тып змесціва перадаецца пры выкарыстанні SOAP 1.2, Тэкст/XML выкарыстоўваецца з SOAP 1.1,

Reference : how to change content-type of request?

9
дададзена

Просты прыклад з мылам і PHP можа быць

$url="your WSDL url";
$method = "Method you are calling";
$error=0;
$client = new SoapClient($url);

 try
  { 
    $info = $client->__call($method, array($param));
  } 
  catch (SoapFault $fault) 
 { 
    $error = 1; 
    errorReport($fault->faultcode,$fault->faultstring);
    die;
    /*echo '<script type="text/javascript">alert("Sorry,App Returne the following ERROR:'.$fault->faultcode."-".$fault->faultstring.'  We will now take you back to our homepage."); window.location = "'.$_SERVER['PHP_SELF'].'";</script> '; */

         }

     if($error==1)
      {
         $xml=$fault->faultstring;
     }else{
        $xml = $info;
     }
    return $xml;

Паспрабуйце яго рэалізацыі і дайце мне ведаць. калі ён працуе для вас.

2
дададзена
дзякуй за ўвагу, але нявызначанай функцыі errorReport. Акрамя таго, я не мог зразумець, што вы спрабавалі зрабіць. Ці з'яўляецца гэта функцыя або, што вы «вяртанне»?
дададзена аўтар ilhnctn, крыніца
Actuly гэта была функцыя, створаная ў маім кодзе я выбраў толькі важную ролю. Тут errorReport з'яўляецца метадам SoapFault які дасць вам памылку, калі які-небудзь адбыўся пры выкліку WSDL я якое вяртае мыла responcse тады і толькі тады дыяпазоны рэжымаў $ памылак == 0, што азначае, што я атрымаў значэнне метад вяртання ў $ XML; Прайдзіце праз код зноў парадкова вы атрымаеце ведаць ... Калі ў яшчэ ёсць пытанне Калі ласка, не саромейцеся пытаць.
дададзена аўтар Tarun Gupta, крыніца

Shouldn't the last line be var_dump($response); instead of var_dump($client);

У любым выпадку, вы можаце таксама паспрабаваць выкарыстоўваць гэта, каб атрымаць вынік:

$response = $client->GetTransmissionTicket(array($params) );
var_dump($response);
1
дададзена
ды гэта павінна быць адказ, я Editted дзякуй за папярэджанне. Але зноў-такі гэта дае памылку: Uncaught SoapFault выключэнне: [HTTP] Немагчыма апрацаваць паведамленне, так як тып змесціва «тэкст/XML; кадоўка = UTF-8 'ня чаканы тып «дадатку/мыла + XML; кадоўка = UTF-8 '. у ...
дададзена аўтар ilhnctn, крыніца
Я думаю, то праблема сапраўды гэтак жа, як гэта - спасылка Гэта адказ па гэтым пытанні - сервер SOAP выкарыстоўваецца не скарга са стандартам 1.2.
дададзена аўтар abhi191, крыніца

Я resloved гэтыя праблемы за кошт пераходу ад SOAP 1.2 да SOAP 1.1

$this->client = new SoapClient(
    $url,
    array(
        "trace" => TRUE,
        "exception" => 0,
        "soap_version" => SOAP_1_1,
        "cache_wsdl" => WSDL_CACHE_MEMORY,
        "local_cert" => 'mycert.pem',
    )
);
1
дададзена

Я адкажу на сваё пытанне так, што гэта дапамагае каму-то адзін дзень. Я выкарыстаў NuSOAP і змяніў кадыроўку UTF-8. Фрагмент кода ніжэй:

require_once "nusoap.php";
$client = new nusoap_client("http://interface.--Serivce-Supplier-Link/Service.svc?wsdl", "wsdl");
$client->soap_defencoding = 'UTF-8';

$result = $client->call("GetTransmissionTicket", array( 'agencyNumber'     => 13155, 'fullTransmission' => false));
var_dump($result);

З найлепшымі пажаданнямі

0
дададзена

можа быць трохі позна, але можа дапамагчы іншым. дык вось ён ідзе: <�Код> $ PARAMS ўжо масіў, таму вам не прыйдзецца выкарыстоўваць масіў ($ Params) у

$response = $client->__soapCall('GetTransmissionTicket',array($params) );

замест таго, каб выкарыстоўваць просты $ Params у той час як calling.check гэта так

$response = $client->GetTransmissionTicket($params);

also use $client->__getTypes(); to verify params to be passed. use catch to good effect to trace faultstringand faultactor. at the end if still not getting solution check it with soapUI(a software).

0
дададзена
Я вырашыў гэтую праблему з дапамогай NuSOAP, але так як на форумах кажуць, NuSOAP ня Пераважней solusion, я не падзяляў мой адказ. Дзякуючы.
дададзена аўтар ilhnctn, крыніца
на жаль, ваша рашэнне не зрабілі якую-небудзь рэч, я б запусціць свой уласны (NuSOAP) рашэнне пры спробе паспрабаваць ваш ..
дададзена аўтар ilhnctn, крыніца
@Duli тут маё рашэнне, ён працаваў я.
дададзена аўтар ilhnctn, крыніца
@ İlhanÇetin Калі ласка, вы можаце размясціць сваё рашэнне
дададзена аўтар Duli, крыніца