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