最近做項目用到一個叫Authorize.Net的東西,通過它來完成信用卡等的支付,很糾結,很郁悶,弄了一個來禮拜,終於有點小收獲,總結下,一來自己整理思路,二來希望可以對他人有所幫助。http://www.authorize.net/
進到首頁后,點擊Developer Center進入開發中心,我們可以看到一個大大的Try It Out,點擊這個就進入了快速開發頁面,他們已經將對接流程做成了簡單的幾步,很容易就可以學會。我是做ASP.NET MVC的,所以我點擊了C#按鈕。我選擇的是通過Direct Post
Method 來對接我的程序,其他的我也看了,就像他說的,我們可以操作的地方相對較少,就Direct Post Method可操作性最強。這些相關流程的對比就不多說,直接進入Direct Post Method。
具體的Step我也不一步一步去說了,因為他寫的很清楚、簡答,很容易看懂,我想具體說下我使用中遇到的問題和解決方法,或許對你有所幫助。
一、使用Html.CheckoutFormInputs(true)出現一大堆的html在頁面上。
1> Html.CheckoutFormInputs(true)-->@Html.Raw(Html.CheckoutFormInputs(true))
2>修改你下載的SDK的AuthorizeNet.Helper下的CheckoutFormBuilders.cs
①添加命名空間 System.IO
②將HttpResponseBase改為TextWriter
③將helper.ViewContext.HttpContext.Response改為helper.ViewContext.TextWriter
還要說的是在這里會出現一個找不到MVC引用的問題,最后我的解決辦法是重新創建了一個MVC程序,然后把代碼復制過去,只復制Helper的代碼,就兩個類。
二、An error occurred while trying to report this transaction to the merchant. An e-mail has been sent to the merchant informing them of the error. The
following is the result of the attempt to charge your credit card.
This transaction has been approved.
It is advisable for you to contact the merchant to verify that you will receive the product or service.
這種情況是腳本超時,Authorize.Net會給你發一封郵件說這個問題,這個問題其實就是Authorize找不到你的回調地址,也就是說你本地測試時不行的,需要將程序放到公網上去,讓Authorize能找到你的url地址就好了。
三、MerchantHashCode
var isValid = response.Validate("YOUR_API_LOGIN_ID","YOUR_API_LOGIN_ID") 的第一個YOUR_API_LOGIN_ID,在http://developer.authorize.net/guides/DPM/wwhelp/wwhimpl/js/html/wwhelp.htm里要的
是YOUR_MERCHANT_HASH_CODE,當然沒有YOUR_MERCHANT_HASH_CODE用YOUR_API_LOGIN_ID也行,要設置YOUR_MERCHANT_HASH_CODE按下圖:
首先登陸到自己的Account,然后

然后呢,自習去看AuthorizeHelper的話,可以發現其實以上的驗證最終調用了一個方法AuthorizeNet.Crypto.IsMatch(string key, string apiLogin, string transactionID, decimal amount, string expected),所以可以只調用這個方法就好了。其
實AuthorizeHelper里面有很多可以修改的地方,自己可以去看看。
四:提交支付前做些驗證操作,比如商品是否有庫存、信用卡信息是否可用等等。
在Authorize.Net教程里有提到Html.BeginSIMForm("http://YOUR_SERVER.com/home/sim",1.99M,"YOUR_API_LOGIN","YOUR_TRANSACTION_KEY",true)方法,這里就不用這個了,方法帶的那些參數都可以放到form里的,然后用ajax提交到
要驗證的action去,如果驗證成功,回來修改Form的action,變成Authoriz.Net接收的地址https://test.authorize.net/gateway/transact.dll,再次提交form就行了。
