我正在连接另一个应用程序,以使用SOAP在Magento 1.9中创建和更新客户。因为我希望密码保持完全相同,客户将被迫在另一个应用程序中更改密码。更改后,我希望通过SOAP连接在Magento中更改密码,但我无法使其正常工作。在请求之后,我得到了"bool(true)“,但似乎什么都没有改变。
是我做错了什么,还是Magento有限制。
我的代码:
<?php
//ensure you are getting error output for debug
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors',1);
$client = new SoapClient('http://www.mymagentosite.com/api/v2_soap/?wsdl');
// If some stuff requires api authentification,
// then get a session token
$session = $client->login('apiuser', 'apikey');
// CustomerID search
$params = array('complex_filter'=>
array(
array('key'=>'email','value'=>array('key' =>'eq','value' => $email)),
),
);
$result = $client->customerCustomerList($session, $params);
var_dump ($result);
$customerID = $result[0]->customer_id;
// echo $customerID;
// Update Customer
$result2 = $client->customerCustomerUpdate($session, $customerID, array('password' => 'newpassword'));
var_dump ($result2);
发布于 2015-07-30 18:19:36
这很奇怪。文档(和wsdl)希望您传递password
参数。我试着在代码中进行研究(Magento 1.7系列)。在设置通过接口调用传入的值之前,在app/code/core/Mage/Customer/Model/Customer/Api.php
文件的对应update()
函数中,有以下代码:
foreach ($this->getAllowedAttributes($customer) as $attributeCode=>$attribute) {
if (isset($customerData[$attributeCode])) {
$customer->setData($attributeCode, $customerData[$attributeCode]);
}
}
因此,我尝试打印允许的属性,但password
不存在。存在的是password_hash
,但该字段不存在于文档中,更重要的是,它不存在于wsdl中。
为了进行测试,我尝试将密码的md5
值作为password
参数传递,然后,在update
函数中调用的_prepareData
函数中,我添加了下面这行代码:
$data['password_hash'] = $data['password'];
结果是成功更改了密码,我可以使用新密码登录。
现在,当然这不是继续下去的方式。首先,我要更改一个核心文件。然后,可能可以更新允许的属性列表,添加password
属性,但您必须记住构建密码的md5版本,而不是“明文”版本,并在任何情况下将其重命名为password_hash
。另一种解决方案是自定义(同样不是在core/
中)与复杂类型customerCustomerEntityToCreate
相关的wsdl参数,添加password_hash
。
https://stackoverflow.com/questions/25443119
复制相似问题