Использование PHP Soap - PullRequest
4 голосов
/ 22 марта 2011

Я пытаюсь вставить данные на удаленный сервер через SOAP.Но получил ошибку ниже:

object (stdClass) # 3 (1) {["DataInsertResult"] => string (51) "Hata: DI - значение не может быть нулевым. Имя параметра: s"}

Здесь вы можете найти мой код ниже:

<?php
$client = new SoapClient("http://www.posta-tr.com/MassDataAccepter/MassDataAccepter.asmx?wsdl");
$connect = $client->Authenticate("accountname", "password");

$send = $client->DataInsert(array(
"idRoot" => array (
    "DataToDb" => array(
        "Drow" => array (
            "FName" => "George",
            "LName" => "Houston",
            "Email" => "gerorge@emailprovider.com",
            "InvitedBy" => "Mary J",
            "Job" => "Architect",
            "City" => "Newyork",
        )
    ) 
)

));
var_dump($send);
echo $client->DataInsertResponse;
?>

Как мне решить эту проблему?

Привет, Здесь вы можете увидеть.net (?) код моего провайдера веб-услуг.Как я могу использовать это как php-код?

Webservice Url: http://www.posta-tr.com/MassDataAccepter/MassDataAccepter.asmx?wsdl

protected void btn_Save_Click(object sender, EventArgs e)
    {
        PwebS.MassDataAccepter mda = new PwebS.MassDataAccepter();
        string Result = "Error!";
        string Token = mda.Authenticate("user", "pass");
        string data = @"<idRoot>
<DataToDb>
<Drow>
<FName>George</FName>
<LName>Houston</LName>
<Email>gerorge@emailprovider.com</Email>
<InvitedBy>Mary J</InvitedBy>
<Job>Architect</Job>
<City>Newyork</City>
</Drow>
</DataToDb>
</idRoot>";

        if (Token.Length > 30)
        {
            Result = mda.DataInsert(Token, data);
        }
        if (Result.Contains("Inserted : 1"))
            lbl_Info.Text = "Data Inserted!";
        else if (Result.Contains("Updated : 1"))
            lbl_Info.Text = "There is same data in db! Duplicate Data!";
        else
            lbl_Info.Text = "Error!";
    }

Привет, через несколько дней я получил интересные новости ... php_soap не может подключиться к веб-сервису, но nusoap работает отлично!Ниже вы можете увидеть мой код, но я получил новую ошибку, вы можете увидеть ошибку после кода:)

<code><?PHP
require_once('includes/nusoap/nusoap.php');
$client = new nusoap_client("http://www.posta-tr.com/MassDataAccepter/MassDataAccepter.asmx?wsdl", "wsdl","", "", "", "");
$err = $client->getError();
if ($err) {
echo "<h2>Constructor error</h2><pre>" . $err . "
";} $ params = array ('Username' => 'my_username', 'Password' =>'my_password'); $ result = $ client-> call ("Authenticate", $ params, "", "", false, true); if ($ client-> fault) {echo "

Fault

";
print_r($result);
echo "
";} else {// Проверка на ошибки $ err = $ client-> getError (); if ($ err) {// Отображение эха ошибки"

Error

" . $err . "
";}else {// Показать результат echo "

Result

";
print_r($result);
$tokenkey = $result['AuthenticateResult'];
echo $tokenkey;
echo "
";}} $ veri = " George Houston gerorge@emailprovider.com Мэри Дж Архитектор Нью-Йорк "; эхо""; $ send = $ client-> call (" DataInsert ", $ tokenkey, $ veri); var_dump ($ send);?>

Результат:

Result

    Array
    (
        [AuthenticateResult] => 92528146-183B-4651-B852-6A1C97F1E908
    )

92528146-183B-4651-B852-6A1C97F1E908 //This means we connect the webservice and we got "token"
bool(false) //This means there is an error in data

Ответы [ 2 ]

1 голос
/ 22 марта 2011

Это похоже на ошибку .NET, вы не можете решить ее на стороне php.но, возможно, отсутствующий параметр.

Например: если моя функция как

public void DataInsert (строка test1, строка s)

, если s передано как ноль.ошибка: «Значение не может быть нулевым. Имя параметра: s»} «

http://www.posta -tr.com / MassDataAccepter / MassDataAccepter.asmx? op = DataInsert

 <DataInsert xmlns="http://tempuri.org/">
      <Token>string</Token>
      <Data>string</Data>
    </DataInsert>

я думаю, что Data или Token равен NULL, вы передали только 1 параметр, а теперь Data имеет значение NULL, попробуйте отправить 2 параметра, сначала Token, а Second - Data.

<?php
$client = new SoapClient("http://www.posta-tr.com/MassDataAccepter/MassDataAccepter.asmx?wsdl");
$connect = $client->Authenticate("accountname", "password");

$data = "<idRoot>
            <DataToDb>
            <Drow>
            <FName>George</FName>
            <LName>Houston</LName>
            <Email>gerorge@emailprovider.com</Email>
            <InvitedBy>Mary J</InvitedBy>
            <Job>Architect</Job>
            <City>Newyork</City>
            </Drow>
            </DataToDb>
            </idRoot>";

$send = $client->DataInsert($connect->AuthenticateResult,$data);
var_dump($send);

?>

Selamlar (:

0 голосов
/ 31 мая 2011

Я думаю, что параметры, переданные в DataInsert, неверны, это должно быть так:

/* Get token key here */
$token = $tokenKey;

$data = array(
  "idRoot" => array (
      "DataToDb" => array(
          "Drow" => array (
              "FName" => "George",
              "LName" => "Houston",
              "Email" => "gerorge@emailprovider.com",
              "InvitedBy" => "Mary J",
              "Job" => "Architect",
              "City" => "Newyork",
          )
      )
  )
);

$params = array(
  'Data' => $data,
  'Token' => $token
);

$client = new SoapClient( /* wsdl */ );
$response = $client->DataInsert($params);
...