使用customer.update 方法 ,magento 1.7.0.2 soap api bug

magento 专栏收录该内容
31 篇文章 0 订阅

使用 magento(1.7.0.2) 的soap api 更新用户信息的时候发现不能够更新用户的密码。

我们首先看一下 如何调用api 更新用户信息(参考自:magentocommerce

<?php

$api_url_v1 = "http://192.168.1.162/trunk/index.php/api/soap/?wsdl";
$username = 'moshi';
$password = 'moshiPass';


//连接 SOAP
$client = new SoapClient($api_url_v1);
//获取登入后的 Session ID
$session_id = $client->login($username, $password);
//调用 API 中的方法

$result = $client->call(
          $session_id, 'customer.update', array(
          'customerId' => '70', 'customerData' => array('firstname' => 'mo', 
          'lastname' => 'shi', 'email' => 'moshi@moshi.com', 
          'group_id' => '10', 'password' => '123456')));

var_dump ($result);

?>

但是仅仅这么做更新不了用户的密码。

网上的做法:

找到文件
app\code\core\Mage\Customer\Model\Customer\Api.php
修改 update 方法 在 代码
$customer->save(); 上面添加代码:

if(isset($customerData['password'])){
    $customer->setPassword($customerData['password']);
}

当然最好重写这个模块。

我采用的方法是:
修改 调用api 的 call 函数

把其中的 password 修改为 password_hash 数据即可(当然是加密后的)
我们 可以在 api 调用magento 的update 方法中 找到代码:

foreach ($this->getAllowedAttributes($customer) as $attributeCode=>$attribute) {
            if (isset($customerData[$attributeCode])) {
                $customer->setData($attributeCode, $customerData[$attributeCode]);
            }
        }

这里其实就是根据 被允许的属性来决定哪些属性的值是可以被修改的。
打印 $attributeCode 发现 并没有password 所以直接传送 password 数据这么做是不可行的。
但是我们可以看到 我们是可以修改 pasword_hash 这个值的

当然修改这个值,你首先需要知道 你的magento 系统 加密方式是怎样的。
假设没有更改过,默认的加密方式是 md5(key+password)

所以 你只要在 调用 $client->call() 之前得出 password_hash 值即可。



  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

Simael__Aex

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值