2014-11-26 2 views
2

고객 비밀번호를 업데이트하려고하지만 업데이트 중이 아니며 다른 고객 관련 정보가 사용자 이름 및 이메일처럼 업데이트 중입니다. 나는 패스워드를 업데이트 한 후 응답에 사실을 얻고있다. 아래는 코드입니다.Magento에서 고객 비밀번호 업데이트

env = new SoapSerializationEnvelope(SoapEnvelope.VER11); 
env.dotNet = false; 
env.xsd = SoapSerializationEnvelope.XSD; 
env.enc = SoapSerializationEnvelope.ENC; 
SoapObject customerEntity = new SoapObject(NAMESPACE, "customerCustomerEntityToCreate"); 
customerEntity.addProperty("email",email); 
customerEntity.addProperty("customer_id",customerId); 
customerEntity.addProperty("firstname",firstName); 
customerEntity.addProperty("lastname",lastName); 
customerEntity.addProperty("password",password); 
request = new SoapObject(NAMESPACE, "customerCustomerUpdate"); 
request.addProperty("sessionId", sessionId); 
request.addProperty("customerId", customerId); 
request.addProperty("customerData", customerEntity); 

env.setOutputSoapObject(request); 
androidHttpTransport = new HttpTransportSE(URL); 
androidHttpTransport.debug = true; 
(new MarshalHashtable()).register(env); 
try { 
    androidHttpTransport.call("", env); 
} catch (IOException | XmlPullParserException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
try { 
    result = env.getResponse(); 
    System.out.println(result); 
} catch (SoapFault e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
}                      

답변

1

나는 이것에 대해 이미 연구를 해봤지만 내 지식에 따르면 고객이 API에서 암호를 설정할 수 없다고합니다. Magento에서는 고객이 내부에서 필터를 사용하기 때문에 $data = $validator->filter($data);과 같은 방법을 만듭니다. 여기에 우리가 보낸 암호가 필터링됩니다. 이 문제를 피하려면 필터 전에 암호를 가져오고 아래에 표시된대로 필터 뒤에 설정하십시오. REST API를 사용하고 있습니다. SOAP Api에서 동일한 문제가 있다고 생각합니다. SOAP Api customer create method/customer update method을 magento로 바꾸면 문제가 해결 될 수 있습니다.

protected function _create(array $data) 
    { 
     $password = $data['password']; 
     $validator = Mage::getResourceModel('api2/validator_eav', array('resource' => $this)); 
     $data = $validator->filter($data); 
     $data['password'] = $password; 
     if (!$validator->isValidData($data)) 
     { 
      foreach ($validator->getErrors() as $error) 
      { 
       $this->_error($error, Mage_Api2_Model_Server::HTTP_BAD_REQUEST); 
      } 
      $this->_critical(self::RESOURCE_DATA_PRE_VALIDATION_ERROR); 
     } 

     $customer = Mage::getModel('customer/customer'); 
     $customer->setData($data); 

     try 
     { 
      $customer->setPassword($data['password']);  //added 
      $customer->setWebsiteId(1)->save(); 

     } 
     catch (Mage_Core_Exception $e) 
     { 
      $this->_error($e->getMessage(), Mage_Api2_Model_Server::HTTP_INTERNAL_ERROR); 
     } 
     catch (Exception $e) 
     { 
      $this->_critical(self::RESOURCE_INTERNAL_ERROR); 
     } 
    } 
+0

Remees : 당신의 응답을 주셔서 감사하지만 사실은 내가 또한 나는 우리가 만들고 업데이트 방법을 고객으로 할 필요가 변경 code.what PHP에 익숙하지 않은 나는, 당신의 생각을받지는 무엇입니까? –

+0

게시 한 코드에 문제가 없습니다. 문제는 서버 측에 있습니다. 마젠타를 코딩하는 법을 알고 있습니까? 거기에 magento를 다루는 사람에게 도움을 요청하지 않으면. –

관련 문제