2009-08-12 75 views
0

對於Web服務來說,我是一個陌生人,我需要將Web服務集成到現有的應用程序中。要傳遞的信息的Web服務是PHP中的Web服務

  • 唯一的參考
  • 金額
  • 狀態
  • 狀態說明

此Web服務將更新在網站上交易的狀態。

什麼是最好的開始?我從哪裏出發?

+1

有很多方法可以做到這一點。您可能希望在您的問題中包含更多信息 - 甚至可能包含特定的Web服務,因爲它們也可能有自己的特質。 – 2009-08-12 16:38:27

回答

1

雖然有許多不同類型的Web服務和將它們集成到任何東西中的模式,但現在很多服務都與類似的步驟集成在一起。既然你以抽象的形式提出了問題,我會提供一個抽象的答案 - 也許會引發更多的問題。

我將以付款爲例。

  1. 用戶在機器上做了些什麼(訂購一件T恤衫)。他們的行爲更新數據庫,會話或某種存儲(或操作鏈)。

  2. 如果合適,用戶動作(1)的結果之一也會觸發系統將推送到Web服務(如PayPal)。通常用XML格式化,你會發送一個嵌套參數的響應。您的商店將發送T恤價格和數量。

  3. 的服務接收XML請求(經常包含一個「API密鑰」或此類)並處理它。在PayPal用戶完成T恤訂單後,它會將您重定向到您自己的網站以及訂單信息。 (同步)

  4. 服務任選完成處理(或執行一些異步動作),然後發送的XML請求到服務器。你用PHP解析請求,然後處理數據。例如,該請求可能有一個屬性,如'order_status'。該物業可能包含'complete','pending', 'failed'。然後你可以使用PHP來更新你的數據庫來反映這一點。

  5. 您的網站反映了服務對用戶所做的數據庫更改。例如,有關「訂單狀態」或「近期訂單」頁面的信息。

有許多不錯的庫和許多以前爲許多不同的Web服務創建的PHP類。你甚至可以嘗試搜索GitHub。並且:如果您願意/需要,UPS,PayPal,Google Checkout,Facebook以及其他許多人都有實例和API文檔來編寫您自己的實現。

編輯:貝特定信息 當PayPal發送的(異步)IPN響應時,它是在POST數據,其可以讀取,並根據其規格驗證。

我發現處理IPN最簡單的方法(以避免修補時間)是Micah Carrick的PayPal class。我不喜歡命名,並想拋光等待屏幕(以防萬一),您可以在this gist上看到我的更改。

+0

非常感謝。該區域似乎符合我想要的是你解釋的第4部分。我將需要您在第4部分詳細解釋。 用戶單擊支付鏈接,支付鏈接將支付鏈接發送給支付處理器,支付處理器然後處理支付,然後將支付狀態發送到我的Web服務。 我的webserivce會通過querystring或xml接收付款詳細信息。如果它在xml中,我如何讀取xml的內容。謝謝。 – 2009-08-12 19:56:56

+0

我添加了一些關於PayPal的信息,我假設您正在尋找。至於解析XML,PHP有幾種選擇。你應該可以通過Google找到可以工作的東西,但PayPal實際上只是POST數據。 – arbales 2009-08-16 04:52:45

0

在PHP中,restful ajax驅動的webservices幾乎非常容易編寫,尤其是如果你使用jQuery。你有一個像在服務器上的代碼:

// index.php: 
if (isset($_GET['transact'])) { 
    $ref = $_POST['ref']; 
    $amount = $_POST['amount']; 
    $status = $_POST['status']; 
    $description = $_POST['description']; 
    $result = transact($ref, $amount, $status, $description); 

    header('Content-Type: application/json'); 
    return json_encode(array(status => 'success', result => $result)); 
} 

和您的客戶端的Web應用程序可以是:

// webapp.js 
.... 
var data = { ref:4343, amount:'12.34', status:'pending', description:'deduction' }; 
$.post('?transact', data, function(result) { 
    if (result.status == 'success') { 
     var thing = result.thing; //etc..