Сбой аутентификации с использованием Android ksoap2 - PullRequest
0 голосов
/ 03 июля 2019

Привет, я использую ksoap2 для анализа данных в Android. Я не могу понять точную проблему с моим кодом. Мне нужно проанализировать данные в ksoap2. Может ли кто-нибудь помочь мне решить эту проблему. всякий раз, когда я пытался разобрать, в моем ответе выдается «Ошибка аутентификации», я уже проверял, что в своем заголовке я правильно передаю имя пользователя и пароль. Ниже приведен мой код, пожалуйста, дайте мне знать любое решение

Это формат для мыла api.

POST /Wt/webtask.asmx HTTP/1.1
Host: www.myweb.co.ke
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://tempuri.org/AddItem"

<?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:Header>
    <UserCredential xmlns="http://tempuri.org/">
      <userName>string</userName>
      <password>string</password>
    </UserCredential>
  </soap:Header>
  <soap:Body>
    <AddItem xmlns="http://tempuri.org/">
      <UserName>string</UserName>
      <ItemCode>string</ItemCode>
      <Description>string</Description>
      <Packaging>string</Packaging>
      <Unit>string</Unit>
      <Photo>string</Photo>
    </AddItem>
  </soap:Body>
</soap:Envelope>

Java-код

private static final String METHOD_NAME = "AddItem";
    private static final String NAMESPACE = "https://www.myweb.co.ke/Wt/";
    private static final String SOAP_ACTION = "http://tempuri.org/AddItem";
    private static final String URL = "https://www.aspiresoft.co.ke/Wt/webtask.asmx";
    private String resultString;

    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.test_demo);

        Button btnClick = (Button) findViewById(R.id.bt);
        btnClick.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                SOAP_WebService.AsyncCallWS task = new SOAP_WebService.AsyncCallWS();
                task.execute();
            }
        });
    }



    public void soapAddItem() {
        try {


            //Prepare the header with the authentication data.
            Element headers = new Element().createElement(SOAP_WebService.NAMESPACE, "UserCredential");

            Element username = new Element().createElement(SOAP_WebService.NAMESPACE, "userName");
            username.addChild(Node.TEXT, "1234");
            headers.addChild(Node.ELEMENT, username);

            Element pass = new Element().createElement(SOAP_WebService.NAMESPACE, "password");
            pass.addChild(Node.TEXT, "4321");
            headers.addChild(Node.ELEMENT, pass);

            // Soap Request
            final SoapObject request = new SoapObject(SOAP_WebService.NAMESPACE, SOAP_WebService.METHOD_NAME);
                     /*   request.addProperty("UserName", "John");
                        request.addProperty("ItemCode", "102120");
                        request.addProperty("Description", "FLOUR EXE 2kg");
                        request.addProperty("Packaging", "1ct x 12pc");
                        request.addProperty("Unit", "PC");
                        request.addProperty("Photo", "aksdjflksjdlfksjdl99389-sdfd=/kdkflsk");*/

            SoapObject avsdf = new SoapObject(SOAP_WebService.NAMESPACE, "UserName");
            avsdf.setInnerText("John");
            request.addSoapObject(avsdf);

            avsdf = new SoapObject(SOAP_WebService.NAMESPACE, "ItemCode");
            avsdf.setInnerText("102120");
            request.addSoapObject(avsdf);

            avsdf = new SoapObject(SOAP_WebService.NAMESPACE, "Description");
            avsdf.setInnerText("FLOUR EXE 2kg");
            request.addSoapObject(avsdf);

            avsdf = new SoapObject(SOAP_WebService.NAMESPACE, "Unit");
            avsdf.setInnerText("PC");
            request.addSoapObject(avsdf);

            avsdf = new SoapObject(SOAP_WebService.NAMESPACE, "Packaging");
            avsdf.setInnerText("1ct x 12pc");
            request.addSoapObject(avsdf);

            avsdf = new SoapObject(SOAP_WebService.NAMESPACE, "Photo");
            avsdf.setInnerText("aksdjflksjdlfksjdl99389-sdfd=/kdkflsk");
            request.addSoapObject(avsdf);

            final SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
            // add header to envelope
            envelope.headerOut = new Element[1];
            envelope.headerOut[0] = headers;
            envelope.setOutputSoapObject(request);

            //Add the header to the envelope.
            final HttpTransportSE androidHttpTransport = new HttpTransportSE(SOAP_WebService.URL);
            androidHttpTransport.debug = true;
            androidHttpTransport.call(SOAP_WebService.SOAP_ACTION, envelope);
            Log.d("Login Request", "Request:- " + androidHttpTransport.requestDump);

            final SoapPrimitive result = (SoapPrimitive) envelope.getResponse();
            Log.d("Login Response", "Response:- " + androidHttpTransport.responseDump);
            // final SoapObject result = (SoapObject) envelope.getResponse();
            String response = result.toString();
            resultString = result.toString();
            Log.d("Login Responsed", "Responsed:- " + response);
        } catch (Exception ex) {
            Log.e("Login", "soapLogin:- " + ex.getMessage());
        }

    }

    private class AsyncCallWS extends AsyncTask<Void, Void, Void> {

        @Override
        protected void onPreExecute() {
            Log.i("", "onPreExecute");
        }

        @Override
        protected Void doInBackground(Void... params) {
            Log.i("", "doInBackground");
            soapAddItem();
            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            Log.i("", "onPostExecute");
            Toast.makeText(SOAP_WebService.this, "Response" + resultString.toString(), Toast.LENGTH_LONG).show();
        }

    }
...