#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();