Android:通过SOAP API在magento中创建客户

时间:2013-12-29 06:46:50

标签: java android api magento soap

我试图通过Android应用程序中的SOAP API(customerCustomerCreate(SOAP V2))在magento中创建客户,但是我收到此错误:

  

SoapFault - faultcode:'100'faultstring:'需要客户电子邮件'faultactor:'null'detail:null

我使用以下代码设置电子邮件地址:

 request = new SoapObject(NAMESPACE, "customerCustomerCreate");
        request.addProperty("sessionId", sessionId);

        SoapObject value = new SoapObject(NAMESPACE, "associativeEntity");
        value.addProperty("key", "in");
        value.addProperty("value", "xxxxx@xxxxx.com");

        SoapObject complexFilter = new SoapObject(NAMESPACE,
                "complexFilter");
        complexFilter.addProperty("key", "email");
        complexFilter.addProperty("value", value);
                    SoapObject filterArray = new SoapObject(NAMESPACE,
                "complexFilterArray");
        filterArray.addProperty("item", complexFilter);

        SoapObject filters = new SoapObject(NAMESPACE, "filters");
        filters.addProperty("complex_filter", filterArray);

        request.addProperty("filters", filters);

        env.setOutputSoapObject(request);

        androidHttpTransport.call("", env);
        result = env.getResponse();

有谁知道我在这里做错了什么? 感谢

2 个答案:

答案 0 :(得分:4)

如果你没有得到答案,直到你可以使用它..

public void CreateNewCustomer(String email, String firstname, String lastname, String password) {


            try {
                env.dotNet = false;
                env.xsd = SoapSerializationEnvelope.XSD;
                env.enc = SoapSerializationEnvelope.ENC;
                request = new SoapObject(NAMESPACE, "login");
                request.addProperty("username", "+++++");
                request.addProperty("apiKey", "+++++");
                env.setOutputSoapObject(request);

               public static HttpTransportSE androidHttpTransport = new HttpTransportSE(URL)
                androidHttpTransport.call("", env);
                session = env.getResponse();
                sessionId = session.toString();

                Log.d("sessionId", sessionId.toString()); 

                Log.d("Create "," Creating......");
                request = new SoapObject(NAMESPACE,"customerCustomerCreate");
                request.addProperty("sessionId", sessionId);
//              request.addProperty("product", product_id);

                //-----use Kvm Serializable class to serialize the key value data-------

                CreateCustomerKVMserialize createcustomerkvm = new CreateCustomerKVMserialize();

                createcustomerkvm.Email = email;
                createcustomerkvm.Firstname = firstname;
                createcustomerkvm.Lastname = lastname;
                createcustomerkvm.Password = password;

                PropertyInfo pi = new PropertyInfo();
                pi.setName("customerData");
                pi.setValue(createcustomerkvm);
                pi.setType(createcustomerkvm.getClass());
                request.addProperty(pi);

                env.setOutputSoapObject(request);
                env.addMapping(NAMESPACE, "customerData",new CreateCustomerKVMserialize().getClass());

                androidHttpTransport.call("", env);
                Object customer_create = env.getResponse();
                Log.d("mainactivity "," "+customer_create.toString());


            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (XmlPullParserException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

    }       

--------- CreateCustomerKVM序列化类-----------

public class CreateCustomerKVMserialize implements KvmSerializable{

    public String Email;
    public String Firstname;
    public String Lastname;
    public String Password;
//    public String Websiteid;
//    public String Storeid;
//    public String Groupid;

    public CreateCustomerKVMserialize(){}

    public CreateCustomerKVMserialize(String email, String firstname, String lastname,String password) {

        Email = email;
        Firstname = firstname;
        Lastname = lastname;
        Password = password;
    }

    @Override
    public Object getProperty(int arg0) {
        // TODO Auto-generated method stub
         switch(arg0)
            {
            case 0:
                return Email;
            case 1:
                return Firstname;
            case 2:
                return Lastname;
            case 3:
                return Password;    

            }

            return null;

    }

    @Override
    public int getPropertyCount() {
        // TODO Auto-generated method stub
        return 4;
    }

    @Override
    public void getPropertyInfo(int index, Hashtable arg1, PropertyInfo info) {
        // TODO Auto-generated method stub

         switch(index)
            {
            case 0:
                info.type = PropertyInfo.STRING_CLASS;
                info.name = "email";
                break;
            case 1:
                info.type = PropertyInfo.STRING_CLASS;
                info.name = "firstname";
                break;
            case 2:
                 info.type = PropertyInfo.STRING_CLASS;
                 info.name = "lastname";
                break;
            case 3:
                 info.type = PropertyInfo.STRING_CLASS;
                 info.name = "password";
                break;
            default:break;
            }
    }

    @Override
    public void setProperty(int index, Object value) {
        // TODO Auto-generated method stub

        switch(index)
        {
        case 0:
            Email = value.toString();
            break;
        case 1:
            Firstname = value.toString();
            break;
        case 2:
            Lastname = value.toString();
            break;
        case 3:
            Password = value.toString();
            break;

        default:
            break;
        }
    }

}

答案 1 :(得分:0)

使用以下代码:

 SoapObject request = new SoapObject(NAMESPACE, "customerCustomerCreate");
                    request.addProperty("sessionId", sessionId);

                    SoapObject customerEntity = new SoapObject(NAMESPACE, "customerCustomerEntityToCreate");


                    customerEntity.addProperty("email", "abqpo@120.com");
                    customerEntity.addProperty("firstname", "firstname");
                    customerEntity.addProperty("lastname", "lastname");

                    request.addProperty("customerData", customerEntity);


                    env.setOutputSoapObject(request);

                    androidHttpTransport.call("", env);
                    Object result = env.getResponse();
                    String custId  = result.toString();

其中 env SoapSerializationEnvelope