2017-08-15 78 views
0

,我有以下的Perl代碼通過的Prestashop 1.6 Web服務創建一個新的客戶時的工作原理:通過PUT的Prestashop web服務更新客戶禁止客戶登錄

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); 

OK,如此反覆,工程。創建客戶時,表單輸入中沒有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]),想抓哈希密碼了DB中的ps_customer表和傳遞,試圖在註冊和更新時給每個客戶相同的密碼,嘗試了一些我不記得的東西...

結果是一樣的:除非觸發錯誤,更新看起來像它發生,但客戶無法登錄。

我在計算我缺少的東西 - 要麼PUT請求在某些方面不夠或我不應該使用的方法。任何有識之士將不勝感激。

回答

0

首先,我會檢查客戶數據,以確保地址信息是什麼?

其次prestashop正在更新他的密碼加密。嘗試更新您的商店,然後在每個帳戶上使用「忘記密碼」來設置新密碼。

這種變化是1.5 - 1.7

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

要通過web服務檢查密碼,您可以在php中使用password_verify。看下面的例子。

$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

我從很久以前就從這裏開始,剛剛看到了你的答案。不知道這是否回答我的問題。如果有人可以評論這是一個很好的答案,我會將其標記爲已接受。 – cbmckay

+0

@cbmckay我一直在使用這段代碼一段時間,所以是的,它正在工作(; – Deathstorm