您正在構建電子商務網絡應用程序,您需要支持幾種付款方式(簽證,萬事達卡等),以便您的客戶可以輕鬆支付訂單。而不是自己實施此服務,而是決定依靠受信任的第三方提供商為您提供這些服務。
比利時提供付款服務的著名公司是Ogone。他們提供40多種國際和地方付款方式。他們處理您的客戶,在線商店和付款方式提供商(例如Visa)之間的付款交易。
當然,您必須為Ogone處理的每筆交易支付一小筆款項,但這可以集成您整合欺詐保護,安全性,管理您的付款工具……等等。自己實施所有這些的成本要大得多。
因此,您可以註冊Ogone帳戶,並決定將其係統集成到您的Web應用程序中。
我們怎麼能意識到這一點?讓我們找出...
首先,請訪問Ogone網站並註冊免費測試帳戶。在網站的右上角,您“將找到一個標有“創建免費測試帳戶”的按鈕。
圖1-測試帳戶

單擊它並填寫結果表格。確保您以此表格輸入的數據正確。提交了新測試帳戶的請求後,Ogone的員工將驗證您的詳細信息,並根據結果批准或拒絕您的請求。這個過程可能需要幾個小時。非常煩人,但沒有辦法。
批准您的帳戶後,您將收到一封包含密碼的電子郵件。現在,您準備登錄到Ogone Merchant Administment。
在開始使用測試帳戶之前,您需要配置以下設置:
要配置訂閱選項,單擊屏幕左側菜單中顯示的選項帳戶。
圖2-商人管理菜單

在帳戶頁面上,您將提供一些選項,請選擇“您的訂閱”選項。現在,您需要選擇訂閱類型。選擇“冒險”,然後單擊標有“確認並轉到您的選項”的按鈕。
在這裡,您可以在訂閱中添加許多選項,例如欺詐檢測,圖像託管,發票外觀...等。對於此演示,我們不需要任何其他選項,因此只需單擊確認即可保存您的設置。
配置訂閱類型後,可以通過添加要向客戶提供的付款方式來繼續操作。單擊商戶管理菜單中的選項付款方式(圖2)。在“選定的付款方式”列表中添加簽證後,您需要編輯此付款方式並將其設置為激活。
圖3-激活簽證付款方式

只需單擊圖3中顯示的編輯選項,將付款方式標記為激活(激活:是),然後單擊提交。您可以使用卡號4111 1111 1111 1111來測試簽證付款。只需輸入到期日期的任何內容和3位數字安全碼即可。
最後但並非最不重要的一點是,您需要配置一些技術設置來確定如何處理在線付款。繼續單擊菜單中顯示的選項技術信息(圖2)。
結果頁面分為以下選項卡:
只需單擊這些鏈接即可查看屏幕截圖我如何配置Ogone測試帳戶。我將SHA-1-IN和SHA-1-OUT簽名設置為“ MicrosoftaspNet4”。我們稍後再回到這一點。
您現在創建並配置了Ogone測試帳戶。您準備進行第一次在線付款。
我創建了一個簡單的ASP.NET Web應用程序項目,該項目演示瞭如何將Ogone付款集成在您自己的ASP.NET網站中。
圖4-解決方案

此Web應用程序僅包含少數頁面:
備註:如您所見,該項目還包含幾個代碼文件。我們將在以下各節中討論這些。這些文件包含使用Ogone處理付款過程的必要代碼。隨意改進設計,我只包括了最少的代碼來使事情正常工作。
不要單擊下面顯示的“開始付款”按鈕,只是屏幕截圖。這就是default.aspx頁面的樣子:
圖5 -default.aspx頁面

生成一個參考(或訂單ID)以唯一確定所支付的訂單。 Ogone跟踪這些參考。您不能兩次處理相同的參考。因此,這就是為什麼我選擇在此示例中使用隨機生成的GUID的原因。我不得不將GUID縮短為30個字符,因為Ogone允許的限制不超過此限制。
顯然,除此參考外,您還需要指定必須支付的金額。示例代碼還沿相關客戶的電子郵件地址發送。這樣,Ogone可以將其付款已成功處理。
讓我們查看按鈕點擊事件後面隱藏的代碼:
清單1-請求Ogone付款
// Persist order to database
// ...
OgoneRequest ogoneRequest = new OgoneRequest ( ) ;
ogoneRequest . RequestPayment ( this . _reference , amount , customerEmail ) ;
// Clear shopping cart
// ...您可以通過創建OgonereQuest類的新實例來開始付款,並調用requestPayment(...)方法。此方法需要3個參數,即訂單參考,需要支付的金額以及客戶的電子郵件地址。
清單2 -OgonereQuest構造函數
public OgoneRequest ( )
{
OgoneUrl = ConfigurationManager . AppSettings [ "Ogone_Url" ] ;
Psid = ConfigurationManager . AppSettings [ "Ogone_PSID" ] ;
ShaKey = ConfigurationManager . AppSettings [ "Ogone_SHA1_IN" ] ;
Currency = ConfigurationManager . AppSettings [ "Ogone_Currency" ] ;
Language = ConfigurationManager . AppSettings [ "Ogone_Language" ] ;
AcceptUrl = ConfigurationManager . AppSettings [ "Ogone_AcceptUrl" ] ;
ExceptionUrl = ConfigurationManager . AppSettings [ "Ogone_ExceptionUrl" ] ;
CancellationUrl = ConfigurationManager . AppSettings [ "Ogone_CancellationUrl" ] ;
}Ogonerequest類的構造函數通過從應用程序的配置文件(web.config)中讀取某些值來初始化一些屬性。您需要指定呼叫付款過程的URL,您的Ogone PSID(用戶名),您在商家管理上指定的SHA1-IN密鑰,重定向URL ...等。
清單3-請求付款(...)方法
public void RequestPayment ( string reference , double amount , string email )
{
// Multiply by one hundred and round to zero decimals
amount = Math . Round ( amount * 100 , 0 ) ;
RemotePost post = new RemotePost { Url = this . OgoneUrl } ;
post . Add ( "pspid" , this . Psid ) ;
post . Add ( "orderid" , reference ) ;
post . Add ( "amount" , amount . ToString ( ) ) ;
post . Add ( "currency" , this . Currency ) ;
post . Add ( "language" , this . Language ) ;
post . Add ( "email" , email ) ;
// Hash
post . Add ( "SHASign" , Ogone . GenerateHash (
reference + amount + this . Currency +
this . Psid + this . ShaKey ) ) ;
// Redirection URLs
post . Add ( "accepturl" , this . AcceptUrl ) ;
post . Add ( "exceptionurl" , this . ExceptionUrl ) ;
post . Add ( "cancelurl" , this . CancellationUrl ) ;
post . Post ( ) ;
}RequestPayment(...)方法通過使用Remotepost類進行HTTP帖子來啟動新的付款過程。所有必要的信息都包含在帖子中,例如您的PSID,需要支付的金額,語言,SHA1標誌...等。
您需要使用您在商家管理中配置的SHA1-IN簽名來計算SHA1 HASH。 Ogone指出,您還需要在此哈希中包括參考,金額,貨幣和您的PSID。稍後我們將回到計算SHA1哈希。
備註:HTTP帖子發送了一些重定向URL,Ogone在付款時將使用這些網址,取消...等。如果您不提供這些,則將使用商戶管理中配置的默認URL(技術信息下的事務反饋選項卡)。
圖6-付款確認

啟動付款過程後,您將被重定向到上圖中所示的新頁面。您可以通過在HTTP帖子中指定其他參數來更改此頁面的佈局。請查看本文隨附的源代碼和官方Ogone文檔,以獲取有關該主題的更多信息。
如果用戶單擊“取消”按鈕,則付款過程將結束,他將被重定向到paymentcancelled.aspx頁面。此頁面只顯示了用戶取消付款過程的消息。
但是,我們已經配置了我們的Ogone帳戶,以使有關付款過程的所有相關信息都包含在查詢字符串中。例如:
http:// localhost:3767/paymentcancelled.aspx? orderID = 246cf6f0-8bad-4edb-806c-806c-eed3fb&Currency = eur&金額= 19.99&pm = pm = CreditCard&ccreitalcard&Accessance&Acceptance&Accessance =&狀態=&狀態= 1 &cardno =&ed =&cn =&trxdate = 04%2F08%2f10&payid = 6806803&ncerror =&brand = ...等。
您可以提取信息,例如原始訂單參考,金額,付款方式(例如:簽證),付款成功狀態...等。如果需要,您可以記錄或丟棄此信息。取決於你。 Ogone還包括一個sha1 hash,該哈希在商人管理中配置的SHA1-out標誌的幫助下。此哈希使您可以驗證查詢字符串中提出請求的人的身份和數據的有效性。
如果付款過程成功完成,則Ogone將將用戶重定向到paymentAccepped.aspx頁面。查詢字符串還將包括相同的數據。在頁面加載事件期間,檢查了付款狀態和SHA哈希的有效性。如果兩者都正確,則接受付款。
列表4-付款accepted.aspx頁面加載事件處理程序
OgonePaymentStatus status = OgoneResponse . Status ;
// Invalid Sha key returned from Ogone?
bool paymentSucceeded = OgoneResponse . IsShaSignValid && Ogone . IsPaymentStatusValid ( status ) ;備註:Ogone在查詢字符串中包括一個稱為狀態(Integer)的參數。此狀態告訴您付款的狀態。本文的示例代碼將其中一些值包裹在稱為ogonepaymentstatus的枚舉中。查看Ogone官方文檔以獲取所有可能值的列表。 ISPAYMENTSTATUSVALID(...)方法驗證輸入狀態參數是否是告知我們付款的值之一。
Ogoneresponse類類型只是一個小包裝器,可以處理Ogone將用戶重定向回到網站時所包含的查詢字符串參數。
列表5顯示了您從該課程中的小摘錄。 IsshasignValid屬性從應用程序的配置文件(web.config)讀取SHA1輸出簽名,並重新計算SHA符號。為此,您必須包括其他數據,例如金額,訂單參考,貨幣...等。 (請諮詢官方的Ogone文檔以獲取更多信息)。
如果計算出的SHA符號匹配查詢字符串中包含的符號,那麼我們正在處理源自Ogone的請求,並且查詢字符串參數中的數據有效。
清單5- ogoneresponse類
public static class OgoneResponse
{
public static string OrderId { get { return HttpContext . Current . Request [ "orderid" ] ; } }
public static string Amount { get { return HttpContext . Current . Request [ "amount" ] ; } }
public static string ShaSign { get { return HttpContext . Current . Request [ "shasign" ] ; } }
public static bool IsShaSignValid
{
get
{
string key = OrderId + Currency + Amount + PaymentMethod + AcceptanceCode +
( int ) Status + CardNumber + PaymentId + NcError + Brand +
ConfigurationManager . AppSettings [ "Ogone_SHA1_OUT" ] ;
return ShaSign == Ogone . GenerateHash ( key ) ;
}
}
} 清單6顯示了一種可能的方式,如何計算字符串的sha1哈希。字符串被轉換為字節數組,然後使用SHA1CryptoServiceProvider編碼。然後將結果的哈希轉換為十六進制格式。
清單6-計算SHA1哈希
public static string GenerateHash ( string input )
{
byte [ ] bytes = new ASCIIEncoding ( ) . GetBytes ( input ) ;
SHA1CryptoServiceProvider sha = new SHA1CryptoServiceProvider ( ) ;
byte [ ] hash = sha . ComputeHash ( bytes ) ;
StringBuilder result = new StringBuilder ( ) ;
for ( int i = 0 ; i < 20 ; i ++ )
{
string temp = hash [ i ] . ToString ( "X2" ) ;
if ( temp . Length == 1 )
{
temp = "0" + temp ;
}
result . Append ( temp ) ;
}
return result . ToString ( ) ;
}因此,文章結束了...
希望您喜歡如何將Ogone支付服務與電子商務網絡應用程序集成在一起的教程。從開發人員的角度回顧一下我們所涵蓋的內容: