【问题标题】:What is the best way to accept a credit card in ASP.NET? (Between ASP.NET and Authorize.NET)在 ASP.NET 中接受信用卡的最佳方式是什么? (在 ASP.NET 和 Authorize.NET 之间)
【发布时间】:2011-04-01 07:18:51
【问题描述】:

我是创建商务网站的新手,现在我需要通过互联网销售软件,我不知道从哪里开始。

我正在使用 ASP.NET,并且正在考虑使用 Authorize.NET 来验证和处理信用卡。

我正在寻找可以安装在单台服务器上的稳定、值得信赖的解决方案。我的第二个目标(除了在线销售产品)是熟悉流行的购物车软件,并被大型企业使用。也许我应该从 MS Commerce 服务器开始?

【问题讨论】:

  • 与 Authorize.Net 集成非常简单。

标签: asp.net e-commerce shopping-cart credit-card authorize.net


【解决方案1】:

这里有一百万个选项,但如果您正在编写代码,最简单的代码方式是使用http://sharpauthorize.com/

【讨论】:

    【解决方案2】:

    Authorize.Net 很容易用 ASP.NET 实现

    基本上你可以通过3-4种方式进行交易:

    1. 通过按钮(如 Paypal (http://developer.authorize.net/api/simplecheckout/))进行简单结帐
    2. Direct Post:假设您的定制比 Simple CheckOut 多一点。创建一个直接发布到 Authorize.Net http://developer.authorize.net/api/simplecheckout/ 的结帐表单

    例如:

    <h1><%=ViewData["message"] %></h1>
    <%using (Html.BeginSIMForm("http://YOUR_SERVER.com/home/sim",
    1.99M,"YOUR_API_LOGIN","YOUR_TRANSACTION_KEY",true)){%>
    <%=Html.CheckoutFormInputs(true)%>
    <%=Html.Hidden("order_id","1234") %>
    <input type = "submit" value = "Pay" />
    <%}%>
    
    1. SIM(服务器集成)
    2. AIM(高级集成方法):提供完全控制和自定义。
    3. CIM(使用tokanization 将客户卡号和信息存储在Auth.NET 服务器上)

    *下面是一个 CIM 函数进行交易的示例,AIM 与 CIM 非常相似,唯一的区别是tokanization *

    using ProjName.AuthApiSoap;  // USE AUth Webserice Reference
    
       public Tuple<string, string, string> CreateTransaction(long profile_id, long payment_profile_id, decimal amt, string DDD)
            {
                CustomerProfileWS.ProfileTransAuthCaptureType auth_capture = new CustomerProfileWS.ProfileTransAuthCaptureType();
                auth_capture.customerProfileId = profile_id;
                auth_capture.customerPaymentProfileId = payment_profile_id;
                auth_capture.amount = amt;//1.00m;
                auth_capture.order = new CustomerProfileWS.OrderExType();
                POSLib.POSManager objManager = new POSLib.POSManager();
                auth_capture.order.invoiceNumber = objManager.GetTimestamp(DateTime.Now);
                DateTime now = DateTime.Now;
                auth_capture.order.description = "Service  " + DDD;
                CustomerProfileWS.ProfileTransactionType trans = new CustomerProfileWS.ProfileTransactionType();
                trans.Item = auth_capture;
                CustomerProfileWS.CreateCustomerProfileTransactionResponseType response = SoapAPIUtilities.Service.CreateCustomerProfileTransaction(SoapAPIUtilities.MerchantAuthentication, trans, null);
    
                string AuthTranMsg = "";
                string AuthTranCode = "";
                for (int i = 0; i < response.messages.Length; i++)
                {
                    AuthTranMsg = response.messages[i].text;  // To Get Message n for loop to check the [i] is not empty 
                }
                for (int i = 0; i < response.messages.Length; i++)
                {
                    AuthTranCode = response.messages[i].code;   // To Get Code n for loop to check the [i] is not empty 
                }
                var tCompResp = new Tuple<string, string, string>(AuthTranCode, AuthTranMsg, response.directResponse);
                return tCompResp;
            }
    

    这是拆分响应消息的方法(格式和顺序将为所有交易/响应的网络服务上的固定)

     var tResp = objManager.CreateTransaction(profID, paymProfID, Convert.ToDecimal(PmtToday), DDD);
                        string respCCNo = "";
                        string RespCCType = "";
                        string InvoiceNo = "";
                        string transType = "";
                        string approvalCode = "";
                        string AmtRequested = "";
                        string respName = "";
                        string respReasonText = "";
                        string respMD5Hash = "";
                        string respEmailId = "";
                        string respReasonCode = "";
                        string respMethod = "";
                        string respAVSResultCode = "";
                        string responseCode = "";
                        string transactionId = "0";
                        if (!string.IsNullOrEmpty(tCompResp.Item3))
                        {
                            string[] arrRespParts = tCompResp.Item3.Replace("|", "").Split(',');
                            responseCode = arrRespParts[0];
                            respReasonCode = arrRespParts[2];
                            respReasonText = arrRespParts[3];
                            approvalCode = arrRespParts[4];
                            respAVSResultCode = arrRespParts[5];
                            transactionId = arrRespParts[6].Replace("|", "");
                            InvoiceNo = arrRespParts[7];
                            AmtRequested = arrRespParts[9];
                            transType = arrRespParts[10];
                            respMethod = arrRespParts[11];
                            respName = arrRespParts[13] + " " + arrRespParts[14];
                            respEmailId = arrRespParts[23];
                            respMD5Hash = arrRespParts[37];
                            respCCNo = arrRespParts[50];
                            RespCCType = arrRespParts[51];
                        }
    

    ===================================AIM 代码

     public Tuple<string, string, string> ECheckCreateTransAIM(string amount, string bankRoutingNo, string bankAccNo, string bankAccType, string bankName, string bankAccName, string echeckType, bool isCustomerEmail, string customerEmail, string mechantEMail)
            {
                //CustomValidator1.ErrorMessage = "";
                string AuthNetVersion = "3.1"; // Contains CCV support
    
                WebClient webClientRequest = new WebClient();
                System.Collections.Specialized.NameValueCollection InputObject = new System.Collections.Specialized.NameValueCollection(30);
                System.Collections.Specialized.NameValueCollection ReturnObject = new System.Collections.Specialized.NameValueCollection(30);
                byte[] ReturnBytes;
                string[] ReturnValues;
                string ErrorString;
                InputObject.Add("x_version", AuthNetVersion);
                InputObject.Add("x_delim_data", "True");
                InputObject.Add("x_login", MERCHANT_NAME);
                InputObject.Add("x_tran_key", TRANSACTION_KEY);
                InputObject.Add("x_relay_response", "False");
                //----------------------Set to False to go Live--------------------
                InputObject.Add("x_test_request", "False");
                //---------------------------------------------------------------------
                InputObject.Add("x_delim_char", ",");
                InputObject.Add("x_encap_char", "|");
                if (isCustomerEmail)
                {
                    InputObject.Add("x_email", customerEmail);
                    InputObject.Add("x_email_customer", "TRUE");                     //Emails Customer
                }
                InputObject.Add("x_merchant_email", mechantEMail);
                // FOR echeck            
                InputObject.Add("x_bank_aba_code", bankRoutingNo);
                InputObject.Add("x_bank_acct_num", bankAccNo);
                InputObject.Add("x_bank_acct_type", bankAccType);
                InputObject.Add("x_bank_name", bankName);
                InputObject.Add("x_bank_acct_name", bankAccName);
                InputObject.Add("x_method", "ECHECK");
                InputObject.Add("x_type", "AUTH_CAPTURE");
                InputObject.Add("x_amount", string.Format("{0:c2}", Convert.ToDouble(amount)));
                // Currency setting. Check the guide for other supported currencies           
                //needto change it to Actual Server URL
                //Set above Testmode=off to go live
                webClientRequest.BaseAddress = eCheckBaseAddress;  //"https://apitest.authorize.net/soap/v1/Service.asmx"; //"https://secure.authorize.net/gateway/transact.dll";
                ReturnBytes = webClientRequest.UploadValues(webClientRequest.BaseAddress, "POST", InputObject);
                ReturnValues = System.Text.Encoding.ASCII.GetString(ReturnBytes).Split(",".ToCharArray());
                if (ReturnValues[0].Trim(char.Parse("|")) == "1")  // Succesful Transaction
                {
                    //AuthNetCodeLabel.Text = ReturnValues[4].Trim(char.Parse("|")); // Returned Authorisation Code
                    //AuthNetTransIDLabel.Text = ReturnValues[6].Trim(char.Parse("|")); // Returned Transaction ID
                    var tCompResp = new Tuple<string, string, string>("I00001", ReturnValues[3].Trim(char.Parse("|")), string.Join(",", ReturnValues));
                    return tCompResp;
                }
                else
                {
                    // Error!
                    ErrorString = ReturnValues[3].Trim(char.Parse("|")) + " (" + ReturnValues[2].Trim(char.Parse("|")) + ")";
                    if (ReturnValues[2].Trim(char.Parse("|")) == "45")
                    {
                        if (ErrorString.Length > 1)
                            ErrorString += "<br />n";
    
                        // AVS transaction decline
                        ErrorString += "Address Verification System (AVS) " +
                          "returned the following error: ";
    
                        switch (ReturnValues[5].Trim(char.Parse("|")))
                        {
                            case "A":
                                ErrorString += " the zip code entered does not match the billing address.";
                                break;
                            case "B":
                                ErrorString += " no information was provided for the AVS check.";
                                break;
                            case "E":
                                ErrorString += " a general error occurred in the AVS system.";
                                break;
                            case "G":
                                ErrorString += " the credit card was issued by a non-US bank.";
                                break;
                            case "N":
                                ErrorString += " neither the entered street address nor zip code matches the billing address.";
                                break;
                            case "P":
                                ErrorString += " AVS is not applicable for this transaction.";
                                break;
                            case "R":
                                ErrorString += " please retry the transaction; the AVS system was unavailable or timed out.";
                                break;
                            case "S":
                                ErrorString += " the AVS service is not supported by your credit card issuer.";
                                break;
                            case "U":
                                ErrorString += " address information is unavailable for the credit card.";
                                break;
                            case "W":
                                ErrorString += " the 9 digit zip code matches, but the street address does not.";
                                break;
                            case "Z":
                                ErrorString += " the zip code matches, but the address does not.";
                                break;
                        }
                    }
    
                }
                var tCompRespFail = new Tuple<string, string, string>(ReturnValues[6].ToString(), ErrorString, string.Join(",", ReturnValues));
                return tCompRespFail;
    
    
            }
    

    CIM 代码(Tokanisation(无卡方法)

       public Tuple<string, string, string> CreateTransaction(long profile_id, long payment_profile_id, decimal amt, string DDD)
            {
                CustomerProfileWS.ProfileTransAuthCaptureType auth_capture = new CustomerProfileWS.ProfileTransAuthCaptureType();
                auth_capture.customerProfileId = profile_id;
                auth_capture.customerPaymentProfileId = payment_profile_id;
                auth_capture.amount = amt;//1.00m;
                auth_capture.order = new CustomerProfileWS.OrderExType();
                POSLib.POSManager objManager = new POSLib.POSManager();
                auth_capture.order.invoiceNumber = objManager.GetTimestamp(DateTime.Now);
                DateTime now = DateTime.Now;
                auth_capture.order.description = "Service  " + DDD;
                CustomerProfileWS.ProfileTransactionType trans = new CustomerProfileWS.ProfileTransactionType();
                trans.Item = auth_capture;
                CustomerProfileWS.CreateCustomerProfileTransactionResponseType response = SoapAPIUtilities.Service.CreateCustomerProfileTransaction(SoapAPIUtilities.MerchantAuthentication, trans, null);
    
                string AuthTranMsg = "";
                string AuthTranCode = "";
                for (int i = 0; i < response.messages.Length; i++)
                {
                    AuthTranMsg = response.messages[i].text;  // To Get Message n for loop to check the [i] is not empty 
                }
                for (int i = 0; i < response.messages.Length; i++)
                {
                    AuthTranCode = response.messages[i].code;   // To Get Code n for loop to check the [i] is not empty 
                }
                var tCompResp = new Tuple<string, string, string>(AuthTranCode, AuthTranMsg, response.directResponse);
                return tCompResp;
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-17
      • 2012-09-07
      • 2015-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多