如何構(gòu)建店面并顯示商品 ![]() |
![]() |
![]() |
級別: 中級 Tyler Anderson , 自由撰稿人, Stexar 公司 2005 年 12 月 19 日 這是使用 PHP 和 Amazon 電子商務(wù)服務(wù)(ECS)建設(shè) Amazon 店面的兩部分教程的第一部分。建設(shè)的店面允許購物者查看列表中顯示的商品,或者在商店中搜索特定商品。第 2 部分將介紹購物車、推薦服務(wù)以及建設(shè)專賣店。 開始之前 這個教程面向的是對于創(chuàng)建店面、自動連接 Amazon Web 服務(wù)并顯示結(jié)果有興趣的程序員。這個教程假設(shè)讀者熟悉基本的 PHP 概念,包括 您應(yīng)當(dāng)熟悉 Amazon Web 服務(wù),在 developerWorks 的 “Boost application development with Amazon Web Service” 系列文章中介紹了它(請參閱 參考資料)。 在這個兩部分的系列中,我們要用 PHP 創(chuàng)建一個 Amazon 購物車。第 1 部分將討論店面的架構(gòu),通過商品搜索請求與 Amazon Web 服務(wù)通信,顯示選項并瀏覽商品分類。我們還將創(chuàng)建一個搜索框。 第 2 部分將討論購物車的創(chuàng)建、添加商品和修改,這個購物車將使用叫作購物車請求的技術(shù)完全保存在 Amazon 的服務(wù)器上。我們將介紹構(gòu)建藏品商店和向購物者提供瀏覽類似商品的能力。
我們將構(gòu)建一個 Amazon 店面,包含分類鏈接和搜索框,允許購物者瀏覽商店中的商品目錄。與多數(shù) PHP 應(yīng)用程序不同,這個程序不需要本地數(shù)據(jù)庫,因為數(shù)據(jù)庫保存在 Amazon 的服務(wù)器上。所以,這個教程嚴(yán)重地依賴簡單對象訪問協(xié)議(SOAP),這個 Web 服務(wù)協(xié)議用 XML 組織信息。Web 服務(wù)是應(yīng)用程序(例如在這個教程中要構(gòu)建的 PHP 應(yīng)用程序)與中央服務(wù)器通信以獲取信息的一種方式。 通過 Amazon 電子商務(wù)服務(wù)(ECS),可以從購物者選擇的分類中獲得和顯示內(nèi)容。當(dāng)選中一個分類時,將創(chuàng)建參數(shù),指明這個分類,收集相關(guān)信息,并啟動 SOAP 客戶。SOAP 客戶會接受參數(shù),形成 XML 文檔,并把 XML 文檔轉(zhuǎn)交給 SOAP 服務(wù)器。Amazon 服務(wù)器訪問自己的數(shù)據(jù)庫,生成 XML 文檔,里面包含的商品與參數(shù)匹配。最后,服務(wù)器把 XML 文檔返回給 SOAP 客戶,SOAP 客戶再把文檔解析成數(shù)據(jù)結(jié)構(gòu),從數(shù)據(jù)結(jié)構(gòu)中可以提取出請求的數(shù)據(jù)。 |
獲得內(nèi)容如何構(gòu)建店面并顯示商品 ![]() |
![]() |
![]() |
概述 Amazon 電子商務(wù)服務(wù)(ECS)允許任何人連接到它巨大的商品目錄,在 Web 站點(diǎn)上顯示商品,把購物者引導(dǎo)到 Amazon 進(jìn)行銷售,并得到銷售的傭金。任何人都可以做這件事。需要做的只是遵守 Amazon 的應(yīng)用程序編程接口(API)。就像 Amazon 說的“這就行了”。您的程序?qū)⒊蔀橐粋€Web 站點(diǎn),在一個或多個分類中為 Amazon 的產(chǎn)品做廣告、銷售它的產(chǎn)品,得到每筆介紹成交的傭金。您不需要屯積商品或處理訂單,唯一的責(zé)任就是維護(hù)好您的代碼。 在這篇教程中,除了通過 PHP 使用 Amazon ECS,還將設(shè)計店面的架構(gòu),并向它添加功能,允許在分類中進(jìn)行瀏覽和搜索特定商品。
我們將使用 PHP 和 Web 服務(wù),通過 SOAP 與 Amazon 通信。Web 服務(wù)(例如 Amazon ECS)允許程序員訪問服務(wù)。在這個示例中,我們將連接到 Amazon ECS 去獲取關(guān)于產(chǎn)品的信息。清單 1 顯示了一條示例 SOAP 消息。 清單 1. 示例 SOAP 消息
SOAP 消息看起來就是這個樣子。在 PHP 和 Web 服務(wù) 一節(jié)中,將學(xué)習(xí)如何使用 SOAP 消息制作到 SOAP 服務(wù)器的請求和接收來自 SOAP 服務(wù)器的請求。
流行的店面擁有干凈、簡單的布局。在這份教程中,我們將設(shè)計一個基本的店面,在樣式上比較樸素,這樣就可以把精力集中在使店面運(yùn)行的機(jī)械部分了。完成的產(chǎn)品將有一個容納分類和搜索框的側(cè)面板,在右側(cè)的主內(nèi)容區(qū)顯示商品(請參閱圖 1)。 圖 1. 最后的應(yīng)用程序 ![]()
多數(shù)在線商店只有一個或很少的分類。這份教程的店面將包含較少幾個分類,但是在構(gòu)建自己的店面時,可以喜歡多少分類就建立多少。分類被作為向 Amazon ECS 發(fā)送的 SOAP 請求中的信息,ECS 會返回與選中的分類匹配的商品。 可用的分類如圖 2 所示。 圖 2. 可用的分類 ![]() 上面顯示的分類是
默認(rèn)情況下,Amazon 的分類包含充滿商品的數(shù)百頁。購物者需要縮小他們的搜索范圍,以便找到他們想要的東西。我們將要設(shè)計的商品搜索功能會在分類內(nèi)搜索商品,并把結(jié)果顯示給購物者,顯示的結(jié)果與 Amazon 上顯示的商品類似。請參閱圖 3 和圖 4。 圖 3. 最終應(yīng)用程序在 Baby 分類中顯示的商品 ![]() 圖 4. Amazon 上在 Baby 分類中顯示的商品 ![]() 請注意在圖 4 中的前三項是相同的。不是所有商品都完全以同樣順序出現(xiàn)。但是,顯示的商品是一樣的。 |
獲得內(nèi)容如何構(gòu)建店面并顯示商品 ![]() |
![]() |
![]() |
什么是 Amazon ECS? Amazon 電子商務(wù)服務(wù)(ECS)允許得到 Amazon 信息的訪問權(quán),所有的信息與瀏覽 Amazon 時發(fā)現(xiàn)的信息一樣。這一節(jié)將研究從 Amazon 檢索信息的方法。 搜索商品或其他內(nèi)容有多種方法。在這里,我們只集中在 下面是所有可能的請求的列表:
每個請求都要求有合適的參數(shù),好讓 Amazon ECS 正確地處理請求。這個系列中使用的參數(shù)和它們的說明是:
下面是一些可用的響應(yīng)組:
服務(wù)器為每個請求類型返回的數(shù)據(jù)都是相同的。但是,請求的設(shè)置和使用都有不同。 另一方面,SOAP 請求更復(fù)雜,因此也就更強(qiáng)大。它們是通過 HTTP 傳遞給 SOAP 服務(wù)器的 XML 文檔。SOAP 請求比 在這份教程中將使用
在這里將執(zhí)行 服務(wù)的值是 清單 2. REST 請求的 URL
Amazon ECS 現(xiàn)在會返回包含搜索的商品信息的 XML 文檔。
因為響應(yīng)太大,所以在這里只能顯示一部分。但是,自己可以把瀏覽器指向清單 2 中的 URL,查看完整的響應(yīng)。清單 3 顯示了 這就是商品數(shù)組開始的地方。它把搜索商品的內(nèi)容傳回發(fā)送者。第一個
Web 服務(wù)描述語言(WSDL)文件定義了 Web 服務(wù)需要的信息以及它應(yīng)當(dāng)返回的信息。這樣,不需要去琢磨需要發(fā)送什么信息、向哪兒發(fā)送信息、從響應(yīng)中能得到什么,就可以構(gòu)建自己的應(yīng)用程序。 Amazon 的 WSDL 文件 描述了可用的命令以及可能的查詢和搜索語法。 請考慮上面文件中的 對于 清單 5. ItemSearchRequest 項
WSDL 文件定義了 SOAP 請求和響應(yīng)以及 |
獲得內(nèi)容如何構(gòu)建店面并顯示商品 ![]() |
![]() |
![]() |
PHP 和 Web 服務(wù) 在這一節(jié),將學(xué)習(xí)如何通過 PHP 發(fā)送和接收簡單 SOAP 請求,以及如何 PHP 從響應(yīng)中提取數(shù)據(jù)。 要創(chuàng)建 SOAP 請求,需要設(shè)置參數(shù)。因為 SOAP 比 清單 6. 產(chǎn)品庫存檢查器的 XML 格式的 SOAP 請求
清單 6 中的代碼是 SOAP 請求在 XML 中看起來的樣子。它指定了一個帶有空
要創(chuàng)建 SOAP 客戶,可以利用 PHP 內(nèi)置的 SOAP 功能:
然后,把請求傳遞給 SOAP 服務(wù)器。
現(xiàn)在已經(jīng)創(chuàng)建了客戶,需要設(shè)置 SOAP 參數(shù)并調(diào)用示例函數(shù) 清單 7. 設(shè)置參數(shù)并發(fā)送 SOAP 請求
以上代碼把 SOAP 請求發(fā)送到 WSDL 文件中指定的服務(wù)器,URL 就是
SOAP 響應(yīng)也是 XML 文檔 (請參閱清單 8)。 清單 8. 產(chǎn)品庫存檢查器的 XML 格式的 SOAP 響應(yīng)
生成的數(shù)據(jù)結(jié)構(gòu)在
用 PHP 從響應(yīng)中接收和提取數(shù)據(jù) 用清單 9 中的 PHP 代碼捕獲響應(yīng)。 清單 9. 捕獲響應(yīng)
只要把變量 清單 10. 提取答案
現(xiàn)在了解了如何傳輸和接收簡單 SOAP 請求和響應(yīng)。稍后,將制作帶有層次結(jié)構(gòu)的更復(fù)雜的 SOAP 請求。
故障可能由于各種原因而發(fā)生。要想自行捕捉故障而不使用異常,并把故障顯示到屏幕上,請使用以下 PHP 代碼。 清單 11. 處理 SOAP 故障
如果您這邊或服務(wù)器端發(fā)生了問題,SOAP 響應(yīng)中就會返回故障,那么使用上面的代碼就可以得到通知。故障看起來就像正常的 SOAP 響應(yīng)一樣。但是,變量 |
獲得內(nèi)容如何構(gòu)建店面并顯示商品 ![]() |
![]() |
![]() |
設(shè)計店面架構(gòu) 這一節(jié)將討論店面架構(gòu)的設(shè)計。它將指導(dǎo) Web 站點(diǎn)模板的創(chuàng)建,模板包括:顯示的標(biāo)題,分類使用的側(cè)面板,在分類中進(jìn)行搜索的搜索框,以及頁面底部的頁腳。 既然已經(jīng)介紹了 Web 服務(wù),現(xiàn)在就開始設(shè)計店面。為店面創(chuàng)建一個根目錄,并創(chuàng)建一個文件: 清單 12. 處理請求和顯示店面
上面的代碼介紹店面。隨后當(dāng)選擇了某個分類時,就會調(diào)用方法與 Amazon ECS 連接,并顯示返回的分類商品或與搜索條件對應(yīng)的商品。
清單 13. 主鏈接和標(biāo)題
在這里輸出了標(biāo)題,而且如果需要的話,還會輸出主鏈接。如果 Web 瀏覽器被指向
接下來,需要一些瀏覽用的分類。我們從五個分類開始:Baby、Computers、Outdoor Living、Software 和 Sporting Goods。繼續(xù)處理 清單 14. 顯示分類鏈接
清單 14 創(chuàng)建的側(cè)面板將容納分類鏈接。當(dāng)客戶點(diǎn)擊其中一個分類時,會在 URL 中設(shè)置這個分類和 圖 5 顯示了具有分類鏈接的當(dāng)前店面。 圖 5. 顯示分類鏈接 ![]() 分類鏈接顯示在左側(cè)面板中。現(xiàn)在轉(zhuǎn)到對在分類上點(diǎn)擊的處理。
清單 15. 處理和返回 URL 中編碼的變量
這個函數(shù)把當(dāng)前的所有變量合并成一個變量,用來創(chuàng)建鏈接,這樣就可以把變量的值從一個鏈接傳遞到下一個鏈接。作為參數(shù)傳遞的 請點(diǎn)擊
現(xiàn)在點(diǎn)擊 Computers 分類.
可以看到舊的分類和
現(xiàn)在已經(jīng)設(shè)置了瀏覽分類的功能。接下來,要添加功能,創(chuàng)建一個搜索框,在當(dāng)前分類中進(jìn)行搜索,繼續(xù)使用 清單 16. 顯示搜索框
清單 16 的 HTML 代碼會顯示一個搜索框。一旦按下了 Search 按鈕,就會提交輸入的關(guān)鍵字,同時當(dāng)前 請點(diǎn)擊某個分類鏈接,查看帶有搜索框的當(dāng)前店面,如圖 6 所示。 圖 6. 顯示搜索框 ![]() 搜索框在左側(cè)面板中顯示,有一個按鈕。在 搜索商品 一節(jié)中將介紹在分類中搜索商品?,F(xiàn)在轉(zhuǎn)入主內(nèi)容區(qū)域。
主內(nèi)容區(qū)域:設(shè)置和內(nèi)容 到了教程的這一部分,側(cè)面板即將完成。在第 2 部分中還會添加其他一些東西,所以請一定要閱讀那一部分。 現(xiàn)在,要設(shè)置主內(nèi)容區(qū)域,稍后將在這里顯示從 Amazon 返回的商品。這部分代碼會結(jié)束側(cè)面板并開始主內(nèi)容區(qū)域:
主內(nèi)容區(qū)域的內(nèi)容是用來顯示的。在做這件事之前,需要完成頁腳。
頁腳是一個相當(dāng)簡單的文件,如果日后需要,可以做得更復(fù)雜。創(chuàng)建 清單 17: 顯示站點(diǎn)和版權(quán)信息
可以為自己的應(yīng)用程序調(diào)整站點(diǎn)和版權(quán)信息。這就完成了店面。把瀏覽器指向 圖 7. 完整的店面 ![]() 店面現(xiàn)在應(yīng)當(dāng)包括標(biāo)題、帶有分類鏈接的側(cè)面板,右側(cè)是空的主內(nèi)容區(qū),頁腳顯示站點(diǎn)和版權(quán)信息。搜索框在這里不顯示,因為還沒有選擇分類。 現(xiàn)在轉(zhuǎn)到有趣的部分,開始從 Amazong 檢索內(nèi)容。 |
獲得內(nèi)容如何構(gòu)建店面并顯示商品 ![]() |
![]() |
![]() |
瀏覽分類 既然店面已經(jīng)設(shè)計完成,有了分類鏈接,現(xiàn)在是時候從 Amazon ECS 請求數(shù)據(jù)并顯示返回的商品供客戶瀏覽了。 從 GET 數(shù)據(jù)中檢索當(dāng)前分類 首先需要點(diǎn)擊一個分類。先從點(diǎn)擊 Sporting Goods 分類開始,然后在 清單 18. 處理從 GET 數(shù)組得到的分類變量
這次,不是介紹店面,
已經(jīng)選擇一個分類后,需要做的是檢驗它是否店面中的有效分類。請在 清單 19. 檢驗選中的分類在店面中是否有效
請在 前兩行定義了開發(fā)人員令牌和 Amazon 合伙人 ID。需要用從 Amazon 得到的實(shí)際值替換它們。如果分類無效,方法會返回,并通知客戶。但是,如果分類有效,主內(nèi)容區(qū)的標(biāo)題就會變成用來顯示分類的值,比起傳遞給 Amazon 的分類代碼,這個值更具可讀性。
現(xiàn)在要設(shè)置發(fā)送給 Amazon ECS 的參數(shù)。在分類中搜索商品,要使用清單 20 所示的參數(shù)。 清單 20. 在分類中搜索商品的參數(shù)
這個操作告訴 Amazon 要執(zhí)行的是
請在 清單 21. 向 Amazon ECS 發(fā)送請求并返回結(jié)果
這個函數(shù)獲得一個函數(shù)名(由 WSDL 文件決定)以及一個參數(shù)數(shù)組(是在前面的面板中創(chuàng)建的)。然后就創(chuàng)建一個新 SOAP 客戶,指向 Amazon 的 ECS WSDL 文件。參數(shù)
現(xiàn)在可以通過調(diào)用 清單 22. 調(diào)用 callSOAPFunction 并把結(jié)果保存在 $result 中
結(jié)果現(xiàn)在保存在
如果請求有效,每件事都工作正常,那么可以為客戶顯示商品的信息了。異常處理會在這一節(jié)最后介紹。添加代碼到 清單 23. 判斷請求是否返回了商品,顯示商品,以及頁面導(dǎo)航
首先,需要從返回的 SOAP 構(gòu)造中檢索商品數(shù)組: 現(xiàn)在,需要遍歷 清單 24. 輸出商品區(qū)的標(biāo)題并遍歷所有商品
對于每個商品元素,都調(diào)用 清單 25. 通過從 $i 變量檢索商品數(shù)據(jù),輸出一件商品的信息
首先,顯示 URL 為 圖 8 顯示了目前為止應(yīng)用程序的瀏覽器輸出示例。 圖 8. 顯示 Sporting Goods 分類的第一頁 ![]() 下面,需要導(dǎo)航鏈接,以便在分類的頁面間進(jìn)行導(dǎo)航。
在 清單 23 中,有一個對 清單 26. 為前一頁和下一頁鏈接檢索數(shù)據(jù),并顯示它們
清單 26 中的函數(shù)調(diào)用兩個子函數(shù): 添加函數(shù) 清單 27. 計算前一頁鏈接
清單 28. 計算下一頁鏈接
這兩個清單中的代碼處理前一頁和下一頁鏈接。請注意, 現(xiàn)在介紹顯示導(dǎo)航鏈接的代碼。請參閱圖 9 中顯示導(dǎo)航鏈接的瀏覽器輸出示例。 圖 9. 在 Sporting Goods 分類第一頁的底部顯示導(dǎo)航鏈接 ![]()
既然已經(jīng)制作了請求,現(xiàn)在重要的是檢驗沒有發(fā)生錯誤。首先,創(chuàng)建函數(shù) 清單 29. 顯示出錯信息
這個函數(shù)將顯示出錯信息,表示發(fā)生了錯誤。請修改 清單 30. 測試 $result 判斷是否出錯,如果為真就顯示出錯信息
在返回的 SOAP 構(gòu)造中,有兩個部分需要查看。一個是檢查 應(yīng)用程序運(yùn)行得很好!現(xiàn)在要轉(zhuǎn)到搜索框,以便客戶可以更好地縮小搜索范圍。 |
獲得內(nèi)容如何構(gòu)建店面并顯示商品 ![]() |
![]() |
![]() |
搜索商品 在這一節(jié),將學(xué)習(xí)如何用搜索框設(shè)置正確的 SOAP 請求并在分類中檢索特定商品,這樣客戶就可以把他們的搜索集中于少量商品。這一節(jié)會重用 瀏覽分類 一節(jié)中的許多代碼,所以這一節(jié)的目標(biāo)是展示如何動態(tài)地設(shè)置 Amazon 的商品搜索請求的參數(shù)。 在檢索提交的關(guān)鍵字之前,需要在搜索框中輸入一些關(guān)鍵字。請在搜索框中輸入“golf clubs”,如圖 10 所示。 圖 10. 在搜索框中輸入關(guān)鍵字“golf clubs” ![]() 現(xiàn)在按下回車或點(diǎn)擊 Search 按鈕?,F(xiàn)在可以添加 清單 31. 從 GET 數(shù)組檢索關(guān)鍵字變量
這將可以確定發(fā)送到 Amazon 的請求的參數(shù)。
要確定 清單 32. 確定用來構(gòu)造發(fā)送給 Amazon 的請求的 $array 參數(shù)
通過 清單 33. 根據(jù)是否設(shè)置了 $keyword,返回需要的關(guān)鍵字
這樣,如果設(shè)置了 這就是動態(tài)地修改商品搜索請求輸入?yún)?shù)所要做的全部工作。請參閱圖 11 中在 Sporting Goods 分類中搜索 golf clubs 的示例輸出。 圖 11. 在 Sporting Goods 分類中搜索 golf clubs 的結(jié)果 ![]() 請注意,搜索的結(jié)果與搜索框中輸入的內(nèi)容匹配!現(xiàn)在有了一個可以工作的 Web 站點(diǎn),用戶可以瀏覽 Amazon 特定分類中的商品,還可以在這些分類中搜索商品。 |
結(jié)束語
在這篇教程中,用 PHP 創(chuàng)建了 Amazon 店面,允許客戶瀏覽分類,在這些分類中搜索特定商品。應(yīng)用程序成功地向 Amazon ECS 提交請求并從 Amazon ECS 接收請求,允許在這個 Web 站點(diǎn)上顯示產(chǎn)品。在這個系列的第 2 部分中,將為應(yīng)用程序創(chuàng)建購物車,允許客戶在 Amazon 上安全地購買商品 —— 并為您提供傭金。
描述 | 文件名稱 | 文件大小 | 下載方法 |
---|---|---|---|
Source code for the Amazon store, Part 1 | os-amazonphpstore1.zip | 3.5 KB | FTP |
![]() |