Prestashop Webservice通过PUT更新客户禁用客户登录

时间:2017-08-15 20:56:09

标签: web-services prestashop

我有以下PERL代码,通过Prestashop 1.6 webservice创建新客户时有效:

my $endPoint = 'https://storeURL.com/api/customers?ws_key=MY_KEY';
my $req_XML = qq{
<prestashop xmlns:xlink="http://www.w3.org/1999/xlink">
    <customer>
        <id>$frm{id}</id>
        <passwd required="true" maxSize="32" format="isPasswd">$rndPass</passwd>
        <lastname required="true" maxSize="32" format="isName">$frm{lastname}</lastname>
        <firstname required="true" maxSize="32" format="isName">$frm{firstname}</firstname>
        <email required="true" maxSize="128" format="isEmail">$frm{email}</email>
        <active format="isBool">1</active>
        <id_default_group>$frm{group}</id_default_group>
        <associations>
            <groups nodeType="group" api="groups">
                <group>
                    <id>$frm{group}</id>
                </group>
            </groups>
        </associations>
    </customer>
</prestashop>
};
$xml_resp = $ua->request(POST $endPoint, Content_Type => 'text/xml', Content => $req_XML);

好的,再次,这是有效的。创建客户时,表单输入中没有id - 因此它是一个空白条目。当我使用完全相同的XML来编辑具有PUT请求的客户时:

$xml_resp = $ua->request(PUT $endPoint, Content_Type => 'text/xml', Content => $req_XML);

更新似乎有效,这意味着:当您检查Prestashop后端时,客户就在那里,更改(如更改名称或电子邮件)是可见的,它表示客户处于活动状态且一切看起来都很好。但是,该特定客户无法再登录该商店。

我在登录屏幕上显示:Authentication Error和红色横幅。

所以,我不知道PUT请求在哪里出错。

我试图发出新密码,试图将passwd字段留空,尝试删除passwd字段(错误:[parameter "passwd" required]),试图从ps_customer表中获取哈希密码在DB中传递,尝试在注册和更新时给每个客户提供相同的密码,尝试了一些我不记得的东西......

结果是一样的:除非触发了错误,否则更新看起来就像是发生了但客户无法登录。

我在想我错过了什么 - 要么PUT请求在某种程度上不够,要么我不应该使用的方法。任何见解将不胜感激。

2 个答案:

答案 0 :(得分:0)

首先,我会检查客户数据以确定,以及地址信息如何?

其次prestashop正在更新他的密码加密。尝试更新您的商店,然后使用每个帐户上的“忘记密码”来设置新密码。

此变化介于1.5 - 1.7

之间

blowfish使用更安全的symfony::crypto功能。

要通过网络服务检查密码,您可以在password_verify中使用php。请参阅下面的示例。

$salt = substr($info->passwd, strrpos($info->passwd, ':') + 1, 2);
        $ZCpassword = md5($COOKIE_KEY . $password) . ':' . $salt;

        if (password_verify($password, $info->passwd) == true) {
            session_start();
            $response = array();
            $response['status'] = 'succes';
            $response['message'] = "http://sdwebdesign.nl/wessel/easycheckout/#/productpage";
            setcookie("userId", $info->id);
            header('Content-type: application/json');
            echo json_encode($response);
        } else {
            $response = array();
            $response['status'] = 'error';
            $response['message'] = 'Uw wachtwoord is verkeerd';
            header('Content-type: application/json');
            echo json_encode($response);
        }

答案 1 :(得分:0)

我遇到了同样的问题,并修复了该问题,并发送了字段:)