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

问题描述 投票:0回答:2

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

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表中获取哈希密码并传递,试图给每个人客户在注册和更新时使用相同的密码,尝试了一些我记不住的东西......

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

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

web-services prestashop
2个回答
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);
        }

0
投票

我有同样的问题并修复它发送字段<id_shop>和<id_shop_group> :)

© www.soinside.com 2019 - 2024. All rights reserved.