문제

저는 ASP.NET(C#)을 사용하여 웹 서비스를 작성했으며 NuSOAP를 사용하여 예제 PHP 클라이언트를 작성하려고 합니다.제가 실수한 부분은 이를 수행하는 방법에 대한 예입니다.어떤 쇼 soapval 사용 중입니다(그리고 매개변수를 잘 이해하지 못합니다. 예를 들어 통과) false ~처럼 string 유형 등), 다른 사람들은 그냥 직선을 사용하는 반면 array에스.보고된 대로 내 웹 서비스에 대한 WSDL을 가정해 보겠습니다. http://localhost:3333/Service.asmx?wsdl 다음과 같이 보입니다:

POST /Service.asmx HTTP/1.1
Host: localhost
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://tempuri.org/webservices/DoSomething"

<?xml version="1.0" encoding="utf-8"?>
<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/">
  <soap:Body>
    <DoSomething xmlns="http://tempuri.org/webservices">
      <anId>int</anId>
      <action>string</action>
      <parameters>
        <Param>
          <Value>string</Value>
          <Name>string</Name>
        </Param>
        <Param>
          <Value>string</Value>
          <Name>string</Name>
        </Param>
      </parameters>
    </DoSomething>
  </soap:Body>
</soap:Envelope>

내 첫 번째 PHP 시도는 다음과 같습니다.

<?php
require_once('lib/nusoap.php');
$client = new nusoap_client('http://localhost:3333/Service.asmx?wsdl');

$params = array(
    'anId' => 3, //new soapval('anId', 'int', 3),
    'action' => 'OMNOMNOMNOM',
    'parameters' => array(
        'firstName' => 'Scott',
        'lastName' => 'Smith'
    )
);
$result = $client->call('DoSomething', $params, 'http://tempuri.org/webservices/DoSomething', 'http://tempuri.org/webservices/DoSomething');
print_r($result);
?>

이제 Param 유형이 복잡한 유형이라는 점을 제외하면 내 단순함은 확실합니다. $array 시도가 자동으로 작동하지 않습니다. 웹 서비스에서 중단점을 지정하고 다음과 같이 표시한 메서드를 확인합니다. WebMethod (이름을 바꾸지 않고 말 그대로 DoSomething) 인수를 보는 것은 모두 기본값입니다( int ~이다 0, string ~이다 null, 등.).

내 PHP 구문은 어떤 모습이어야 하며, PHP 구문을 통과하려면 어떻게 해야 합니까? Param 올바르게 입력하셨나요?

도움이 되었습니까?

해결책

당신은 물건을 많은 중첩 어레이로 감아 야합니다.

<?php
require_once('lib/nusoap.php');
$client = new nusoap_client('http://localhost:3333/Service.asmx?wsdl');

$params = array(
      'anId' => 3,
      'action' => 'OMNOMNOMNOM',
      'parameters' => array(
              'Param' => array(
                  array('Name' => 'firstName', 'Value' => 'Scott'),
                  array('Name' => 'lastName', 'Value' => 'Smith')
                       )
      )
);
$result = $client->call('DoSomething', array($params), 
                'http://tempuri.org/webservices/DoSomething', 
                'http://tempuri.org/webservices/DoSomething');
print_r($result);
?>

다른 팁

관련이 없지만 PHP5부터 SOAP를 기본적으로 지원합니다.

$client = new SoapClient("some.wsdl");
$client->DoSomething($params);

그게 좀 더 편할 수도 있어요.

http://se.php.net/soap

여기에서 네이티브 비누 지지대가있는 샘플 :

    // Create a new soap client based on the service's metadata (WSDL)
    $client = new SoapClient("http://some.wsdl",
        array('location' => 'http://127.0.0.100:80/IntegrationService/php'));

    $params = array();
    $params['lead']['Firstname']    = $user->firstname;
    $params['lead']['Lastname']     = $user->lastname;
    $params['lead']['Product']      = $product;
    $params['lead']['JobTitle']     = $user->job_title;
    $params['lead']['Email']        = $user->mail;
    $params['lead']['Phone']        = $user->phone;
    $params['lead']['CompanyName']  = $user->company_name;
    $params['lead']['City']         = $user->city;
    $params['lead']['Industry']     = $user->industry;

    $client->SubmitLead($params);

Soapclient 설명의 '.../integrationservice/php'는 wcf의 엔드 포인트입니다.

<endpoint
            address="php"
            binding="basicHttpBinding"
            contract="Integration.Service.IDrupalIntegrationService" />
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top