Проблема с передачей параметров с клиентом веб-сервиса Android и сервером PHP

#php #android #web-services

#php #Android #веб-сервисы

Вопрос:

У меня есть следующий код, который вызывает веб-сервис PHP. Код подключается к сервису, но параметры передаются неправильно. Метод просто возвращает параметры, и для следующего кода он возвращает «mm» (в основном он возвращает первую букву первого параметра дважды).

     String SOAP_ACTION = "urn:server#userAuth"; 
    String METHOD_NAME = "userAuth";

    SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

    PropertyInfo p1 = new PropertyInfo();
    p1.type = PropertyInfo.STRING_CLASS;
    p1.setName("usr");
    p1.setValue("myuser");
    p1.setNamespace(NAMESPACE);
    request.addProperty(p1);

    PropertyInfo p2 = new PropertyInfo();
    p2.type = PropertyInfo.STRING_CLASS;
    p2.setName("pass");
    p2.setValue("xxxxxxxxxxx");
    p2.setNamespace(NAMESPACE);
    request.addProperty(p2);      

    SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);

    envelope.setOutputSoapObject(request);
    HttpTransportSE androidHttpTransport = new HttpTransportSE(URL);
    androidHttpTransport.call(SOAP_ACTION, envelope);

    Object result = (Object)envelope.getResponse();
    return result.toString();
  

И вот код сервера php…

 $server = new nusoap_server;
$server->configureWSDL('server', 'urn:server');
$server->wsdl->schemaTargetNamespace = 'urn:server';
$server->register('userAuth',
            array('usr' => 'xsd:string', 'pass' => 'xsd:string'),
            array('return' => 'xsd:string'),
            'urn:server',
            'urn:server#userAuth');

function userAuth($value){

    $a=$value['usr'].$value['pass'];

        return $a;    
}

$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';

$server->service($HTTP_RAW_POST_DATA);
  

Ответ №1:

Хорошо, я наконец заставил это работать, добавив параметры в другой экземпляр SoapObject, который будет pe вызываться SoapObject запроса.Окончательный код:

Строка SOAP_ACTION = «UserAuth»; Строка METHOD_NAME = «UserAuth»;

     SoapObject Request = new SoapObject(NAMESPACE, METHOD_NAME);

    SoapObject parameters = new SoapObject(NAMESPACE, METHOD_NAME);
    parameters.addProperty("usr",  "myuser");
    parameters.addProperty("pass", "xxxxxxxxxxxxxxx");

    Request.addProperty(METHOD_NAME, parameters); 



    SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
    soapEnvelope.setOutputSoapObject(Request);


    HttpTransportSE androidHttpTransportSE = new HttpTransportSE(URL);
    androidHttpTransportSE.call(SOAP_ACTION, soapEnvelope);


    Object result = (Object)soapEnvelope.getResponse();
    return result.toString(); 
  

Ответ №2:

 SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 

request.addProperty("name1", values1);
request.addProperty("name2", values2);



SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
soapEnvelope.setOutputSoapObject(request);


HttpTransportSE androidHttpTransportSE = new HttpTransportSE(URL);
androidHttpTransportSE.call(SOAP_ACTION, soapEnvelope);
Object result = (Object)soapEnvelope.getResponse();
final String str =  result.toString();