смена пароля magento с помощью мыла

Я подключаю другое приложение для создания и обновления клиентов в Magento 1.9 с помощью SOAP. Поскольку я хочу, чтобы пароли оставались точно такими же, клиенты будут вынуждены изменить пароль в другом приложении. После изменения я хочу, чтобы пароль был изменен в 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);

person Joost    schedule 22.08.2014    source источник


Ответы (1)


Это очень странно. Документ (и 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, но этого поля нет в документе и, что более важно, нет в wsdl.

Просто для проверки я попытался передать значение md5 пароля, который я хотел передать, в качестве аргумента password, а затем в функцию _prepareData, которая вызывается в функции update, я добавил эту строку кода:

$data['password_hash'] = $data['password'];

В результате пароль успешно изменен, и я могу войти с новым паролем.

Теперь, конечно, это не способ продолжить. Прежде всего, я меняю файл ядра. Тогда, наверное, можно обновить список разрешенных атрибутов, добавив атрибут password, но надо не забыть построить md5-версию пароля, а не "открытый текст", и в любом случае переименовать его где-нибудь в password_hash . Другое решение — настроить (опять же не в core/) параметры wsdl, относящиеся к сложному типу customerCustomerEntityToCreate, добавив password_hash.

person Lorenzo S    schedule 30.07.2015