March 2015 | Coding Cluster - using asp.net, c#, mvc 4, iphone, php, ios, javascript, in asp.net mvc 3 & more
 

Download: ASP.NET mvc4: Get response from authorize.net after payment (Auto redirect)

Tuesday

                 In this post we will learn how to get response from Authorize.Net credit card payment using ASP.NET MVC4

One of my client projects I need to implement Authorize.net payment gateway. So just implemented using SIM (Server Integration Method). But my client wants, if the payment getting success then shown a custom receipt page and save the transaction details in to our own database. In other case if the payment getting fail then provides repayment option.

In SIM method this is not possible (or not advisable) because we using “x_relay_response” to get response from Authorize.net. Note,this is just relay the url, not redirect to the result page. And URL always points to the https://test.authorize.net/gateway/transact.dll. And the response time also only 10 seconds. If your server not responds within 10 seconds then you get time out error like

“An error occurred while trying to report this transaction to the merchant. An email has been sent to the merchant informing them of the error. The following is a result of the attempt to charge your credit card.”

This error indicates that Authorize.Net is unable to connect to the page that you have specified as your relay response URL. To avoid this kind of errors you need to go with Authorize.net’s another one integration method AIM (Advanced Integration Method)


You can get more about AIM method from here http://www.authorize.net/support/AIM_guide.pdf

Implement  AIM :
First create a sandbox account in Authorize.Net. https://developer.authorize.net/sandbox/. After you registered you will get the API Credentials

API Login ID
Transaction Key
Secret Question

Create you view page as per your requirement. Here I'm taking from Authorize.net default payment screen



Then add that details  into your web.config file


<!-- Payment Authorize.NET - Begins --> <add key="Payment.AuthLoginID" value="XXXXXXXXXX" /> <add key="Payment.AuthTransactionKey" value="XXXXXXXXX" /> <add key="Payment.TestMode" value="true" /> <add key="Payment.URL" value="https://test.authorize.net/gateway/transact.dll" /> <!--<add key="Payment.URL" value="https://secure.authorize.net/gateway/transact.dll" />--> <!-- Payment Authorize.NET - End -->


Then call the following function into your post method


private string AuthorizePayment(PaymentDataModel payDataModel)
        {
            
            string AuthNetVersion = "3.1"; // Contains CCV support
            string AuthNetLoginID = System.Configuration.ConfigurationManager.AppSettings["Payment.AuthLoginID"].ToString();
            string AuthNetTransKey = System.Configuration.ConfigurationManager.AppSettings["Payment.AuthTransactionKey"].ToString();
            string AuthNetMode = System.Configuration.ConfigurationManager.AppSettings["Payment.TestMode"].ToString();

            WebClient objRequest = new WebClient();
            System.Collections.Specialized.NameValueCollection objInf = new System.Collections.Specialized.NameValueCollection(30);
            System.Collections.Specialized.NameValueCollection objRetInf = new System.Collections.Specialized.NameValueCollection(30);
            byte[] objRetBytes;
            string[] objRetVals;
            string retMessage;

            objInf.Add("x_version", AuthNetVersion);
            objInf.Add("x_delim_data", "True");
            objInf.Add("x_login", AuthNetLoginID);
            // objInf.Add("x_password", AuthNetPassword);
            objInf.Add("x_tran_key", AuthNetTransKey);
            objInf.Add("x_relay_response", "False");

            // Switch this to False once you go live
            objInf.Add("x_test_request", AuthNetMode);

            objInf.Add("x_delim_char", ",");
            objInf.Add("x_encap_char", "|");

            // Billing Address
            objInf.Add("x_first_name", payDataModel.FirstName);
            objInf.Add("x_last_name", payDataModel.LastName);
            objInf.Add("x_address", payDataModel.Address);
            objInf.Add("x_city", payDataModel.City);
            objInf.Add("x_state", payDataModel.State);
            objInf.Add("x_zip", payDataModel.ZIP);
            objInf.Add("x_country", payDataModel.Country);
            objInf.Add("x_email", payDataModel.Email);
            objInf.Add("x_fax", payDataModel.Fax);
            objInf.Add("x_phone", payDataModel.Phone);

            objInf.Add("x_description", payDataModel.Description);

            // Card Details
            objInf.Add("x_card_num", payDataModel.CardNumber);
            objInf.Add("x_exp_date", payDataModel.CardExpiryDate);

            // Authorisation code of the card (CCV)
            objInf.Add("x_card_code", payDataModel.CCV);

            objInf.Add("x_method", "CC");
            objInf.Add("x_type", "AUTH_CAPTURE");
            objInf.Add("x_amount", payDataModel.Amount);

            // Currency setting. Check the guide for other supported currencies
            objInf.Add("x_currency_code", "USD");

            try
            {
                // Pure Test Server
                objRequest.BaseAddress = System.Configuration.ConfigurationManager.AppSettings["Payment.URL"].ToString().Trim();

                objRetBytes = objRequest.UploadValues(objRequest.BaseAddress, "POST", objInf);
                objRetVals = System.Text.Encoding.ASCII.GetString(objRetBytes).Split(",".ToCharArray());

                if (objRetVals[0].Trim(char.Parse("|")) == "1")
                {
                    // Returned Authorisation Code
                    ViewBag.AuthNetCode = objRetVals[4].Trim(char.Parse("|"));
                    // Returned Transaction ID
                    ViewBag.AuthNetTransID = objRetVals[6].Trim(char.Parse("|"));
                    return retMessage = "1";
                }
                else
                {
                    // Error!
                    retMessage = objRetVals[3].Trim(char.Parse("|")) + " (" + objRetVals[2].Trim(char.Parse("|")) + ")";

                    if (objRetVals[2].Trim(char.Parse("|")) == "44")
                    {
                        // CCV transaction decline
                        retMessage += "Our Card Code Verification (CCV) returned the following error: ";

                        switch (objRetVals[38].Trim(char.Parse("|")))
                        {
                            case "N":
                                retMessage += "Card Code does not match.";
                                break;
                            case "P":
                                retMessage += "Card Code was not processed.";
                                break;
                            case "S":
                                retMessage += "Card Code should be on card but was not indicated.";
                                break;
                            case "U":
                                retMessage += "Issuer was not certified for Card Code.";
                                break;
                        }
                    }

                    if (objRetVals[2].Trim(char.Parse("|")) == "45")
                    {
                        if (retMessage.Length > 1)
                            retMessage += "<br />n";

                        // AVS transaction decline
                        retMessage += "Our Address Verification System (AVS) returned the following error: ";

                        switch (objRetVals[5].Trim(char.Parse("|")))
                        {
                            case "A":
                                retMessage += " the zip code entered does not match the billing address.";
                                break;
                            case "B":
                                retMessage += " no information was provided for the AVS check.";
                                break;
                            case "E":
                                retMessage += " a general error occurred in the AVS system.";
                                break;
                            case "G":
                                retMessage += " the credit card was issued by a non-US bank.";
                                break;
                            case "N":
                                retMessage += " neither the entered street address nor zip code matches the billing address.";
                                break;
                            case "P":
                                retMessage += " AVS is not applicable for this transaction.";
                                break;
                            case "R":
                                retMessage += " please retry the transaction; the AVS system was unavailable or timed out.";
                                break;
                            case "S":
                                retMessage += " the AVS service is not supported by your credit card issuer.";
                                break;
                            case "U":
                                retMessage += " address information is unavailable for the credit card.";
                                break;
                            case "W":
                                retMessage += " the 9 digit zip code matches, but the street address does not.";
                                break;
                            case "Z":
                                retMessage += " the zip code matches, but the address does not.";
                                break;
                        }
                    }

                    // strError contains the actual error
                    ViewBag.ErrorMsg = retMessage;
                    return retMessage;
                }
            }
            catch (Exception ex)
            {
                return retMessage = ex.Message;
            }
        }
That's it. You can download sample  for get response from authorize.net payment gateway using asp,net mvc project. Please share this post to social media if its is help you and also don't forgot to write some comments. 

 
 
 

RECENT POSTS

Boost

 
Blogger Widgets