我有以下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请求在某种程度上不够,要么我不应该使用的方法。任何见解将不胜感激。
答案 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)
我遇到了同样的问题,并修复了该问题,并发送了