Authorize.Net使用小结

  最近做项目用到一个叫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就行了。

 

posted @ 2013-09-24 15:05  小飞的DD  阅读(7723)  评论(0编辑  收藏  举报