我正在连接其他应用程序,以使用SOAP在Magento 1.9中创建和更新客户。因为我希望密码保持完全相同,所以客户将被迫更改其他应用程序中的密码。更改后我希望在Magento中通过SOAP连接更改密码,但我无法使其正常工作。在我提出要求之后" 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);
答案 0 :(得分:1)
这很奇怪。
doc(和wsdl)希望您传递password
参数。
我试图在代码中进行调查(Magento 1.7系列)。
在设置已通过API调用的值之前,在update()
文件的相应app/code/core/Mage/Customer/Model/Customer/Api.php
函数中,有以下代码:
foreach ($this->getAllowedAttributes($customer) as $attributeCode=>$attribute) {
if (isset($customerData[$attributeCode])) {
$customer->setData($attributeCode, $customerData[$attributeCode]);
}
}
因此,我尝试打印允许的属性,password
不存在。现在的内容是password_hash
,但是此字段在doc中不存在,更重要的是,在wsdl中不存在。
为了进行测试,我尝试将md5
我想要传递的密码的值作为password
参数传递,然后在_prepareData
函数中传递我在update
函数中调用了这行代码:
$data['password_hash'] = $data['password'];
结果是密码成功更改,我可以使用新密码登录。
现在,当然这不是继续进行的方式。
首先,我要更改核心文件。
然后,可能会更新添加password
属性的允许属性列表,但您必须记住构建密码的md5版本,而不是&#34;明文&# 34;一,并且在任何情况下将其重命名为password_hash
某处。
另一种解决方案是自定义(不再在core/
中)与复杂类型customerCustomerEntityToCreate
相关的wsdl参数,并添加password_hash
。