Friday, 18 November 2016

Payment with Sudopay for Authorize.net

No comments
 public class SudopayResponse
    {
        public int id { get; set; }
        public DateTime created { get; set; }
        public DateTime modified { get; set; }
        public string status { get; set; }
        public string paykey { get; set; }        
        public SudopayResponseError error { get; set; }
    }


    public class SudopayResponseErrorArray
    {
        public SudopayResponseError[] SudopayResponseError { get; set; }
    }
    public class SudopayResponseError
    {
        public string code { get; set; }
        public string message { get; set; }
    }



[HttpPost]
        public HttpResponseMessage PayForRideWithSudopay()
        {
            string requestBody = string.Empty;
            requestBody = HttpMessage(requestBody);
            var callForRideRequest = JsonConvert.DeserializeObject<CallForRideRel>(requestBody);
            if (callForRideRequest.CallForRideId == null)
            {
                return this.Request.CreateResponse(HttpStatusCode.NonAuthoritativeInformation, "There was problem in processing your payment");
            }

            try
            {
                var callForRideRepository = uow.Repository<CallForRideRepository>();
                var callForRideData = callForRideRepository.GetRideById((int)callForRideRequest.CallForRideId);

                var userRideRepository = uow.Repository<UserRideRepository>();
                var userRideData = userRideRepository.GetRideByCallForRide((int)callForRideRequest.CallForRideId);

                var userRepository = uow.Repository<UserRepository>();
                var userData = userRepository.GetUsersById((int)userRideData.UserId);

                var userCreditCardRepository = uow.Repository<UserCreditCardRepository>();
                var creditCardData = userCreditCardRepository.GetUserCreditCard(((int)userRideData.UserId)).Where(x => x.IsDefault == true).FirstOrDefault();

                var countryRepository = uow.Repository<CountryRepository>();
                var countryData = countryRepository.GetContryById((int)userData.CountryId);

                if (userRideData != null && countryData != null)
                {
                    userRideData.IsAmountPaid = true;

                    UnitOfWork uow = new UnitOfWork();
                    var appConfigCodeRepository = uow.Repository<AppConfigRepository>();
                    var appConfigCode = appConfigCodeRepository.GetByGroupName("payment");

                    System.Collections.Specialized.NameValueCollection Inputs = new System.Collections.Specialized.NameValueCollection();
                    string websiteId = appConfigCode.FirstOrDefault(x => x.Name == "Website").Value;

                    #region Sudopay Capture
                    Inputs = new System.Collections.Specialized.NameValueCollection();
                    Inputs.Add("website_id", websiteId);
                    Inputs.Add("currency_code", appConfigCode.FirstOrDefault(x => x.Name == "CurrencyCode").Value);
                    Inputs.Add("amount", callForRideRequest.RideAmount.ToString());
                    Inputs.Add("item_name", "Pay For Ride");
                    Inputs.Add("item_description", "Ride From '" + callForRideData.Source + "' to '" + callForRideData.ActualDestination + "'");
                    Inputs.Add("buyer_ip", Dns.GetHostByName(Dns.GetHostName()).AddressList[0].ToString());
                    Inputs.Add("buyer_address", userData.Address);
                    Inputs.Add("buyer_city", userData.City);
                    Inputs.Add("buyer_country", countryData.CountryCode.ToString());
                    Inputs.Add("buyer_email", userData.Email);
                    Inputs.Add("buyer_phone", userData.Mobile);
                    Inputs.Add("buyer_state", userData.State);
                    Inputs.Add("buyer_zip_code", userData.ZipCode);

                    Inputs.Add("credit_card_number", creditCardData.LastFourDigit);
                    Inputs.Add("credit_card_expire", creditCardData.ExpMonth + "/" + creditCardData.ExpYear);
                    Inputs.Add("credit_card_name_on_card", creditCardData.NameOnCard);
                    Inputs.Add("credit_card_code", creditCardData.CVV);
               
                    Inputs.Add("success_url", appConfigCode.FirstOrDefault(x => x.Name == "success_url").Value);
                    Inputs.Add("cancel_url", appConfigCode.FirstOrDefault(x => x.Name == "success_url").Value);

                    WebClient client = new WebClient();
                    client.Headers.Add("Authorization", string.Concat("Basic ", appConfigCode.FirstOrDefault(x => x.Name == "SudopayAuth").Value));
                    byte[] response = client.UploadValues("http://sandbox.sudopay.com/api/v1/merchants/11337/gateways/2/payments/capture.json", Inputs);
                    string result = System.Text.Encoding.UTF8.GetString(response);
                    result = result.Replace("[", "'");
                    result = result.Replace("]", "'");
                    var sudopayResponseData = JsonConvert.DeserializeObject<SudopayResponse>(result);

                    #endregion
                    if (sudopayResponseData.status == "Error")
                    {
                        return this.Request.CreateResponse(HttpStatusCode.NonAuthoritativeInformation, sudopayResponseData.error.message);
                    }
                    userRideData.TransactionId = sudopayResponseData.paykey;
                    userRideRepository.UpdateUserRide();
                    return this.Request.CreateResponse(HttpStatusCode.OK, "Success");
                }
                else
                {
                    return this.Request.CreateResponse(HttpStatusCode.NonAuthoritativeInformation, "Please check if you have valid information i.e country,state,zipcode");
                }
            }
            catch (Exception ex)
            {

                logger.Error(ex.Message, ex.Message);
                return this.Request.CreateResponse(HttpStatusCode.NonAuthoritativeInformation, "Something went wrong");
            }
        }