2011-06-24 76 views
0

我試圖在收到序列號後向Google Checkout發送通知確認,以便它知道我已經處理了此序列號並將其保存到我的數據庫中。但我在集成控制檯中不斷收到以下錯誤:Google Checkout通知確認(C#ASP.NET MVC)

我們遇到錯誤處理 您的通知確認。我們得到的 錯誤是:解析 通知確認時出錯。

當我檢查值發送到服務器,似乎一切看起來很好對我說:

<notification-acknowledgement xmlns="http://checkout.google.com/schema/2" serial-number="357304636821412-00001-7" /> 

這裏是我的代碼:

[HttpPost] 
    public EmptyResult Notify() 
    { 
     var serial = Request["serial-number"]; 
     var data = 
      "<notification-history-request xmlns=\"http://checkout.google.com/schema/2\"><serial-number>" + serial + "</serial-number></notification-history-request>"; 
     var serverResponse = _checkoutService.Post(data, GoogleCheckoutConstants.ReportsUri); 

     //Send me email to checkout the response 
     dynamic email = new Email("CheckoutLog"); 
     email.Response = serverResponse; 
     email.Send(); 

     var acknowldgement = 
      "<notification-acknowledgement xmlns=\"http://checkout.google.com/schema/2\" serial-number=\"" + serial + 
      "\" />"; 

     HttpResponse response = System.Web.HttpContext.Current.Response; 
     response.StatusCode = 200; 
     response.ContentType = "text/xml"; 
     response.Write(acknowldgement); 
     return null; 
    } 

而且,爲什麼我不斷收到new-order-notification只?對我來說更重要的是authorization-amount-notification,但它永遠不會發送它,雖然在Documentation Section 2, Step 2.1它說,一段時間後它應該給我這個通知。我在這裏錯過了什麼嗎? (?)

+0

你試過Response.Flush()嗎? –

回答

2

好像你缺少XML聲明

**<?xml version="1.0" encoding="utf-8"?>** 
<notification-acknowledgment serial-number="the-serial-no" xmlns="http://checkout.google.com/schema/2" /> 

其他的東西,也可能會影響到它(猜僅基於以上):

  • 在調用_checkoutService異常。發佈
  • 異常在調用email.Send()

這可能是貝特如果你第一次存儲序列#(所以你「總是」擁有它),然後做你需要做的任何事情(即,發送通知歷史請求,解析,發送電子郵件等)。

確認的想法是確認收到序列號成功。一旦擁有序列號,您就可以隨時執行通知歷史記錄請求(即,如果解決了問題,您可以一直重複發送,直到您可以成功解析爲止)。

希望這有助於....

0

你爲什麼不使用已專爲谷歌結帳的NET庫。

查看更多信息。

http://code.google.com/p/google-checkout-dotnet-sample-code/

+1

我其實是想過這個。我甚至在我的項目中安裝了該庫,但後來我找不到如何在ASP.NET MVC中使用它。它似乎依賴於GC按鈕控件,正如您可能知道的那樣,控件不適用於ASP.NET MVC。你有沒有想過將庫移植到ASP.NET MVC?我認爲不是使用控件,而是使用HTML助手,但我不確定這會做到這一點,因爲我不知道庫的內部工作原理。 – Kassem

+1

內部按鈕只知道如何創建GCheckoutRequest的實例。請記錄一個問題,我可以爲mvc創建一個,但不需要使用該按鈕。查看代碼示例,它會爲您節省數小時的時間。 –

+0

您也可以在網站上發佈一個功能請求,其中包含關於如何認爲助手應該被格式化的示例,並且可以將其添加到庫中。 –