用肥皂改变magento密码

时间:2014-08-22 08:53:46

标签: php magento soap magento-1.9

我正在连接其他应用程序,以使用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);

1 个答案:

答案 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