private Result <Customer> createOnceOffCustomer(Sale_Details details)
        {
            //try
            //{
            CustomerRequest request = new CustomerRequest
            {
                FirstName  = details.CardHolderName,
                LastName   = details.CardHolderLastName,
                CreditCard = new CreditCardRequest
                {
                    Options = new CreditCardOptionsRequest
                    {
                        VerifyCard = true
                    },
                    CVV             = details.CardCCV,
                    ExpirationMonth = details.CardExpiryMonth + "",
                    ExpirationYear  = details.CardExpiryYear + "",
                    Number          = details.CardNumber
                }
            };
            Result <Customer> result = gateway.Customer.Create(request);

            return(result);
            //}
            //catch (AuthenticationException e) {
            //    throw new AuthenticationException() {
            //        Source = e.Source,
            //        HelpLink = e.HelpLink
            //    };
            //}
        }
Esempio n. 2
0
        internal static void fill_AuthSaleRequest(ref Icharge icharge, Sale_Details details, bool AmtInCents)
        {
            //icharge.Config("CurrencyCode=" + details.CurrencyCode);
            icharge.InvoiceNumber = details.ExtRef;

            icharge.Card.Number   = details.CardNumber;
            icharge.Card.ExpMonth = details.CardExpiryMonth;
            icharge.Card.ExpYear  = details.CardExpiryYear;
            if (!string.IsNullOrEmpty(details.CardCCV))
            {
                icharge.Card.CVVData = details.CardCCV;
            }

            icharge.Customer.FirstName = details.CustomerFirstName;
            icharge.Customer.LastName  = details.CustomerLastName;
            icharge.Customer.FullName  = details.CustomerFirstName + " " + details.CustomerLastName;
            icharge.Customer.Address   = details.CustomerAddress;
            icharge.Customer.City      = details.CustomerCity;
            icharge.Customer.State     = details.CustomerState;
            icharge.Customer.Zip       = details.CustomerZip;
            icharge.Customer.Country   = details.CustomerCountry;
            icharge.Customer.Phone     = details.CustomerPhone;
            icharge.Customer.Email     = details.CustomerEmail;
            icharge.Customer.Id        = details.CustomerIdentifier;

            icharge.TransactionAmount = AmtInCents ? (details.Amount * 100).ToString() : details.Amount.ToString("F2");
        }
Esempio n. 3
0
        public Transaction_Result Sale(Sale_Details details)
        {
            try
            {
                if (string.IsNullOrWhiteSpace(details.ProviderToken) && paymentOptions.PaymentTokenize_requires_CVV)
                {
                    throw new FormatException("Gateway cannot process untokenised cards, as CVV is required");
                }

                XElement root = new XElement("DemandRequest");

                XElement elem_userID = new XElement("UserId", userID);
                XElement elem_ref    = new XElement("Reference", details.ProviderToken);
                XElement elem_desc   = new XElement("Description", details.ProductDescription);
                XElement elem_amount = new XElement("Amount", details.Amount);
                XElement elem_m1     = new XElement("m_1", details.CustomerIdentifier);
                XElement elem_m2     = new XElement("m_2", details.transactionID);
                XElement elem_m3     = new XElement("m_3", details.accountID);
                XElement elem_m4     = new XElement("m_4", details.ExtRef);

                root.Add(elem_userID, elem_ref, elem_desc, elem_amount, elem_m1, elem_m2, elem_m3, elem_m4);

                var xmlString = root.ToString();

                var xml = PostXMLTransaction("https://www.vcs.co.za/vvonline/ccxmldemand.asp", "?xmlMessage=" + xmlString);

                XmlNode authResponse = xml.GetElementsByTagName("DemandResponse").Item(0);
                var     responseNode = authResponse.SelectNodes("Response").Item(0);
                var     refNode      = authResponse.SelectNodes("Reference").Item(0);
                var     addResNode   = authResponse.SelectNodes("AdditionalResponseData").Item(0);
                var     resCodeNode  = authResponse.SelectNodes("ResponseCode").Item(0);

                var approved = responseNode.InnerText.Contains("APPROVED") && !responseNode.InnerText.Contains("NOT");

                var result = new Transaction_Result
                {
                    isApproved       = approved,
                    ApprovalCode     = approved ? responseNode.InnerText : "",
                    TransactionIndex = refNode.InnerText,
                    ProcessorCode    = resCodeNode.InnerText,
                    FullRequest      = xmlString,
                    FullResponse     = xml.OuterXml,
                    hasServerError   = false,
                    ErrorCode        = !approved ? responseNode.InnerText : "",
                    ErrorText        = addResNode.InnerText,
                    ProviderToken    = details.ProviderToken
                };

                return(result);
            }
            catch (Exception ex)
            {
                return(new Transaction_Result
                {
                    isApproved = false,
                    hasServerError = true,
                    ErrorText = ex.Message
                });
            }
        }
Esempio n. 4
0
        public Transaction_Result Sale(Sale_Details details)
        {
            try
            {
                Transaction_Result authResult = Auth(details);

                if (!authResult.isApproved)
                {
                    authResult.ErrorText = "Authorisation Error - " + authResult.ErrorText;
                    return(authResult);
                }

                Transaction_Result captureResult = Capture(new AuthCapture_Details {
                    TransactionIndex = authResult.TransactionIndex
                });

                if (!captureResult.isApproved)
                {
                    captureResult.ErrorText = "Capture Error - " + authResult.ErrorText;
                    return(captureResult);
                }
                captureResult.TransactionIndex = authResult.TransactionIndex;
                return(captureResult);
            }
            catch (Exception ex)
            {
                return(new Transaction_Result
                {
                    isApproved = false,
                    hasServerError = true,
                    ErrorText = ex.Message
                });
            }
        }
        public Transaction_Result Sale(Sale_Details details)
        {
            System.Collections.Specialized.NameValueCollection parameters = new System.Collections.Specialized.NameValueCollection();
            parameters.Add("auth_id", authID);
            parameters.Add("auth_pass", authPass);
            parameters.Add("card_num", details.CardNumber);
            parameters.Add("card_cvv", details.CardCCV);
            parameters.Add("card_expiry", GatewayUtils.formatExpiryDateYY(details.CardExpiryMonth, details.CardExpiryYear));
            parameters.Add("cust_name", details.CustomerFirstName);
            parameters.Add("cust_address", details.CustomerAddress);
            parameters.Add("cust_postcode", details.CustomerZip);
            parameters.Add("cust_country", details.CustomerCountryCodeTwoLetter);
            parameters.Add("cust_ip", details.IPAddress);
            parameters.Add("cust_email", details.CustomerEmail);
            parameters.Add("cust_tel", details.CustomerPhone);
            parameters.Add("tran_ref", details.ExtRef);
            parameters.Add("tran_amount", details.Amount.ToString("F2"));
            parameters.Add("tran_currency", details.CurrencyCode);
            parameters.Add("tran_testmode", Mode);
            parameters.Add("tran_type", "sale");
            parameters.Add("tran_class", "cont");

            var result = DoUrlEncodedFormPost("https://secure.cashflows.com/gateway/remote", parameters);

            var result_set = result.Split('|');

            if (result_set.Length != 5)
            {
                throw new Exception("Response format invalid");
            }

            var status = result_set[0];
            var transactionIdentifier = result_set[1];
            var avs       = result_set[2];
            var auth_code = result_set[3];
            var message   = result_set[4];

            bool isSuccess = status == "A";

            return(new Transaction_Result
            {
                ApprovalCode = isSuccess ? auth_code : "",
                ErrorCode = !isSuccess ? auth_code : "",
                ErrorText = !isSuccess ? message : "",
                FullRequest = KeyValueToQueryString(parameters),
                FullResponse = result,
                hasServerError = false,
                isApproved = isSuccess,
                isPending = false,
                ResultCode = avs,
                ResultText = message,
                TransactionIndex = transactionIdentifier
            });
        }
        public Transaction_Result Auth(Sale_Details details)
        {
            if (isAutoSettleOn)
            {
                throw new Exception("Cannot do an authorisation only since gateway is configured to automatically mark authorisations to be settled");
            }

            string cardType = (string)Enum.GetName(typeof(CardTypeEnum), details.CardType);
            string qs       = getAuthQS(CompanyID, Outlet, details.ExtRef, details.Amount.ToString("F2"), cardType, details.CustomerFirstName + " " + details.CustomerLastName, details.CardNumber, details.CardExpiryYear.ToString(), details.CardExpiryMonth.ToString(), details.CardCCV);

            return(PostTransaction("https://secure.setcom.co.za/server.cfm", qs));
        }
Esempio n. 7
0
        public Transaction_Result Auth(Sale_Details details)
        {
            try
            {
                var xmlString = getAuthXML
                                (
                    userID,
                    details.ExtRef,
                    "NA",
                    details.Amount.ToString("F2"),
                    details.CustomerFirstName + " " + details.CustomerLastName,
                    details.CardNumber,
                    details.CardExpiryMonth.ToString(),
                    details.CardExpiryYear.ToString(),
                    details.CardCCV, "",
                    details.CurrencyCode
                                );

                var xml = PostXMLTransaction("https://www.vcs.co.za/vvonline/ccxmlauth.asp", xmlString);

                XmlNode authResponse = xml.GetElementsByTagName("AuthorisationResponse").Item(0);
                var     responseNode = authResponse.SelectNodes("Response").Item(0);
                var     refNode      = authResponse.SelectNodes("Reference").Item(0);
                var     addResNode   = authResponse.SelectNodes("AdditionalResponseData").Item(0);
                var     resCodeNode  = authResponse.SelectNodes("ResponseCode").Item(0);

                var approved = responseNode.InnerText.Contains("APPROVED") && !responseNode.InnerText.Contains("NOT");

                var result = new Transaction_Result
                {
                    isApproved       = approved,
                    ApprovalCode     = approved ? responseNode.InnerText : "",
                    TransactionIndex = refNode.InnerText,
                    ProcessorCode    = resCodeNode.InnerText,
                    FullRequest      = xmlString,
                    FullResponse     = xml.OuterXml,
                    hasServerError   = false,
                    ErrorCode        = !approved ? responseNode.InnerText : "",
                    ErrorText        = addResNode.InnerText
                };

                return(result);
            }
            catch (Exception ex)
            {
                return(new Transaction_Result
                {
                    isApproved = false,
                    hasServerError = true,
                    ErrorText = ex.Message
                });
            }
        }
Esempio n. 8
0
        public Transaction_Result Sale(Sale_Details details)
        {
            try
            {
                //var icharge = newClient();
                //nSoftwareUtils.fill_SaleRequest(ref icharge, details, false);
                //icharge.Sale();
                //var result = nSoftwareUtils.parse_SaleResponse(ref icharge);

                var gateway = newClient();

                TransactionRequest request = new TransactionRequest
                {
                    Amount     = details.Amount,
                    OrderId    = details.ExtRef,
                    CreditCard = new TransactionCreditCardRequest
                    {
                        Number         = details.CardNumber,
                        ExpirationDate = formatExpiryDate(details.CardExpiryMonth, details.CardExpiryYear),
                        CardholderName = details.CustomerFirstName + " " + details.CustomerLastName,
                        CVV            = details.CardCCV,
                    },
                    Customer = new CustomerRequest
                    {
                        FirstName = details.CustomerFirstName,
                        LastName  = details.CustomerLastName,
                        Phone     = details.CustomerPhone,
                        Email     = details.CustomerEmail
                    },
                    Options = new TransactionOptionsRequest
                    {
                        SubmitForSettlement = true
                    },
                };

                Result <Transaction> Tresult = gateway.Transaction.Sale(request);

                Transaction_Result result = formatResult(request, Tresult);
                return(result);
            }
            catch (Exception ex)
            {
                return(new Transaction_Result
                {
                    isApproved = false,
                    hasServerError = true,
                    ErrorText = ex.Message
                });
            }
        }
        public Transaction_Result Sale(Sale_Details details)
        {
            if (isAutoSettleOn)
            {
                string cardType = (string)Enum.GetName(typeof(CardTypeEnum), details.CardType);
                string qs       = getAuthQS(CompanyID, Outlet, details.ExtRef, details.Amount.ToString("F2"), cardType, details.CustomerFirstName + " " + details.CustomerLastName, details.CardNumber, details.CardExpiryYear.ToString(), details.CardExpiryMonth.ToString(), details.CardCCV);

                return(PostTransaction("https://secure.setcom.co.za/server.cfm", qs));
            }
            else
            {
                var auth = Auth(details);
                return(Capture(new AuthCapture_Details
                {
                    Amount = details.Amount,
                    CurrencyCode = details.CurrencyCode,
                    TransactionIndex = auth.TransactionIndex
                }));
            }
        }
Esempio n. 10
0
        public Transaction_Result Auth(Sale_Details details)
        {
            try
            {
                var xmlString = getAuthXML(
                    PayGateID,
                    Password,
                    details.ExtRef,
                    details.CustomerFirstName + " " + details.CustomerLastName,
                    details.CardNumber,
                    GatewayUtils.formatExpiryDate(details.CardExpiryMonth, details.CardExpiryYear),
                    "0",                                    //budget period 0 == Straight
                    (details.Amount * 100).ToString("F0"),  //takes amounts in cents
                    details.CurrencyCode,
                    details.CardCCV
                    );

                var     xml       = GatewayUtils.PostXMLTransaction(url, xmlString);
                XmlNode protocol  = xml.GetElementsByTagName("protocol").Item(0);
                XmlNode errorNode = protocol.SelectNodes("errorrx").Item(0);

                string cardnumber = details.CardNumber;
                Regex  rgx        = new Regex(@"[^\d]");
                cardnumber = rgx.Replace(cardnumber, String.Empty); //removes dashes spaces, etc
                string last4digits = cardnumber.Substring(details.CardNumber.Length - 4);

                var stringwriter = new System.IO.StringWriter();
                var serializer   = new XmlSerializer(details.GetType());
                serializer.Serialize(stringwriter, details);
                var fullrequest = stringwriter.ToString();

                fullrequest = fullrequest.Replace(cardnumber, last4digits);
                fullrequest = fullrequest.Replace(details.CardCCV, "***");

                var respstringwriter = new System.IO.StringWriter();
                xml.Save(respstringwriter);

                if (errorNode == null)
                {
                    XmlNode successNode       = protocol.SelectNodes("authrx").Item(0);
                    string  transactionID     = successNode.Attributes.GetNamedItem("tid").Value;   //The unique reference number assign by PayGate to the original transaction.
                    string  customerReference = successNode.Attributes.GetNamedItem("cref").Value;  //This is your reference number for use by your internal systems. Must be different per transaction
                    string  status            = successNode.Attributes.GetNamedItem("stat").Value;  //Transaction status.
                    string  statusDesc        = successNode.Attributes.GetNamedItem("sdesc").Value; //Transaction status description.
                    string  resultCode        = successNode.Attributes.GetNamedItem("res").Value;   //Result Code
                    string  resultDesc        = successNode.Attributes.GetNamedItem("rdesc").Value; //Result Code description.
                    string  authCode          = successNode.Attributes.GetNamedItem("auth").Value;  //The Authorisation code returned by the acquirer (bank).
                    string  risk         = successNode.Attributes.GetNamedItem("risk").Value;       //X - NA, A - Authenticated, N - Not Authenticated This is a 2-character field containing a risk indicator for this transaction.
                    string  cardTypeCode = successNode.Attributes.GetNamedItem("ctype").Value;      //Card type code 0 - Unknown, 1 - Visa, 2 - MasterCard, 3 - Amex, 4 - Diners
                    return(new Transaction_Result
                    {
                        TransactionIndex = transactionID,
                        isApproved = status != "0" && status != "2",
                        hasServerError = false,
                        ApprovalCode = statusDesc,
                        ResultCode = resultCode,
                        ResultText = resultDesc,
                        ProcessorCode = authCode,
                        FullRequest = fullrequest,
                        FullResponse = xml.OuterXml
                    });
                }
                else
                {
                    string errorCode = errorNode.Attributes.GetNamedItem("ecode").Value;
                    string errorDesc = errorNode.Attributes.GetNamedItem("edesc").Value;

                    return(new Transaction_Result
                    {
                        isApproved = false,
                        hasServerError = false,
                        ErrorCode = errorCode,
                        ErrorText = errorDesc,
                    });
                }
            }
            catch (Exception ex)
            {
                return(new Transaction_Result
                {
                    isApproved = false,
                    hasServerError = true,
                    ErrorText = ex.Message
                });
            }
        }
Esempio n. 11
0
 //NOT IMPLEMENTED
 public Transaction_Result Verify(Sale_Details details)
 {
     throw new NotSupportedException();
 }
Esempio n. 12
0
        public Transaction_Result Sale(Sale_Details details)
        {
            try
            {
                Transaction_Result auth_result = Auth(details);

                if (auth_result.isApproved)
                {
                    Transaction_Result capture_result = Capture(new AuthCapture_Details {
                        Amount = details.Amount, TransactionIndex = auth_result.TransactionIndex
                    });
                    if (capture_result.isApproved)
                    {
                        var authDoc = new XmlDocument();
                        authDoc.LoadXml(auth_result.FullRequest);

                        var captureDoc = new XmlDocument();
                        captureDoc.LoadXml(capture_result.FullRequest);

                        var mergedDoc = new XmlDocument();
                        var root      = mergedDoc.CreateElement("Requests");
                        mergedDoc.AppendChild(root);

                        var authNode = mergedDoc.CreateElement("AuthRequest");
                        root.AppendChild(authNode);

                        var captureNode = mergedDoc.CreateElement("CaptureRequest");
                        root.AppendChild(captureNode);

                        foreach (XmlNode node in authDoc.ChildNodes[1])
                        {
                            var imported_node = mergedDoc.ImportNode(node, true);
                            authNode.AppendChild(imported_node);
                        }

                        foreach (XmlNode node in captureDoc.ChildNodes[1])
                        {
                            var imported_node = mergedDoc.ImportNode(node, true);
                            captureNode.AppendChild(imported_node);
                        }

                        //authNode.InnerXml = authDoc.InnerXml;
                        //captureNode.InnerXml = captureDoc.InnerXml;

                        var stringwriter = new System.IO.StringWriter();
                        mergedDoc.Save(stringwriter);

                        capture_result.FullRequest = stringwriter.ToString();

                        return(capture_result);
                    }
                    else
                    {
                        capture_result.ResultText  = "Capture Error || " + auth_result.ResultText;
                        capture_result.FullRequest = auth_result.FullRequest + capture_result.FullRequest;
                        return(capture_result);
                    }
                }

                auth_result.ResultText = "Authorisation Error || " + auth_result.ResultText;

                return(auth_result);
            }
            catch (Exception ex)
            {
                return(new Transaction_Result
                {
                    isApproved = false,
                    hasServerError = true,
                    ErrorText = ex.Message
                });
            }
        }
Esempio n. 13
0
 //NOT IMPLEMENTED
 public Transaction_Result Verify(Sale_Details details)
 {
     // Supported but linked to Customer on BrainTree
     throw new NotSupportedException();
 }
Esempio n. 14
0
        public Transaction_Result Sale(Sale_Details details)
        {
            try
            {
                var gateway = newClient();

                DoTransactionResponseMessage gateWayResult = gateway.doTransaction(
                    "ONE_ZERO",
                    SafeKey,
                    transactionType.PAYMENT,
                    authenticationType.NA,
                    new additionalInfo {
                    merchantReference = details.ExtRef
                },
                    new customer
                {
                    address1    = details.CustomerAddress,
                    addressCity = details.CustomerCity,

                    countryOfResidence = details.CustomerCountry,
                    firstName          = details.CustomerFirstName,
                    lastName           = details.CustomerLastName
                },
                    new basket {
                    amountInCents = (details.Amount * 100).ToString("F0"), currencyCode = details.CurrencyCode
                },
                    null,
                    new creditCard[]
                {
                    new creditCard
                    {
                        amountInCents = (details.Amount * 100).ToString("F0"),
                        cardExpiry    = GatewayUtils.formatExpiryDate(details.CardExpiryMonth, details.CardExpiryYear),
                        cardNumber    = details.CardNumber,
                        cvv           = details.CardCCV,
                        nameOnCard    = details.CustomerFirstName + " " + details.CustomerLastName
                    }
                },
                    null,
                    null,
                    null,
                    null,
                    null,
                    null,
                    null,
                    null,
                    null,
                    null,
                    null,
                    null,
                    null,
                    null,
                    null
                    );

                var results = gateWayResult;


                if (results.successful)
                {
                    return(new Transaction_Result
                    {
                        isApproved = true,
                        ApprovalCode = results.resultCode,
                        ResultCode = results.resultCode,
                        ResultText = results.resultMessage,
                        TransactionIndex = results.payUReference,
                        hasServerError = false,
                        FullRequest = getXmlString(details),
                        FullResponse = getXmlString(results)
                    });
                }
                else
                {
                    return(new Transaction_Result
                    {
                        isApproved = false,
                        hasServerError = false,
                        ErrorCode = results.resultCode,
                        ErrorText = results.resultMessage,
                        FullResponse = getXmlString(results),
                        FullRequest = getXmlString(details)
                    });
                }
            }
            catch (Exception ex)
            {
                return(new Transaction_Result
                {
                    isApproved = false,
                    hasServerError = true,
                    ErrorText = ex.Message
                });
            }
        }
        public Transaction_Result Sale(Sale_Details details)
        {
            var url = string.Format(apiurl, details.ProviderToken, "adhoc");

            //do POST request to URL - header needs to include merchant-id, version, timestamp, signature - body needs to include amount, item_name

            var ISO8601_timestamp = DateTimeOffset.Now.ToOffset(new TimeSpan(2, 0, 0)).DateTime.ToString("yyyy'-'MM'-'dd'T'hh:mm:ss");
            var body_query_string = "";

            Dictionary <string, string> paramDict = new Dictionary <string, string>();

            paramDict.Add("merchant-id", MerchantID);
            //paramDict.Add("merchant_key", MerchantKey);
            paramDict.Add("version", apiVersion);
            paramDict.Add("timestamp", ISO8601_timestamp);
            paramDict.Add("amount", (details.Amount * 100).ToString("F0"));
            paramDict.Add("item_name", details.ProductDescription);
            paramDict.Add("passphrase", Passphrase);

            body_query_string  = "amount=" + paramDict["amount"];
            body_query_string += "&item_name=" + paramDict["item_name"];

            byte[]         postData         = Encoding.ASCII.GetBytes(body_query_string);
            HttpWebRequest purchase_request = (HttpWebRequest)WebRequest.Create(url);

            purchase_request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";

            purchase_request.Headers.Add("merchant-id", paramDict["merchant-id"]);
            //purchase_request.Headers.Add("merchant_key", paramDict["merchant_key"]);
            purchase_request.Headers.Add("version", paramDict["version"]);
            purchase_request.Headers.Add("timestamp", paramDict["timestamp"]);

            var ordered_keys = paramDict.Keys.OrderBy(r => r).ToArray();

            var signature_string = "";

            for (int i = 0; i < ordered_keys.Length; i++)
            {
                var key = ordered_keys[i];

                if (i != 0)
                {
                    signature_string += "&";
                }

                signature_string += key + "=" + Uri.EscapeDataString(paramDict[key]);
            }

            System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();

            var signature_hash = md5.ComputeHash(System.Text.Encoding.ASCII.GetBytes(signature_string));

            var signature_hash_string = BitConverter.ToString(signature_hash);

            signature_hash_string = signature_hash_string.Replace("-", "").ToLower();

            purchase_request.Headers.Add("signature", signature_hash_string);

            purchase_request.Method        = "POST";
            purchase_request.ContentType   = "application/x-www-form-urlencoded";
            purchase_request.ContentLength = postData.Length;
            Stream data = purchase_request.GetRequestStream();

            data.Write(postData, 0, postData.Length);
            data.Close();

            WebResponse response = null;

            try
            {
                response = purchase_request.GetResponse();
            }
            catch (WebException e)
            {
                using (WebResponse response2 = e.Response)
                {
                    HttpWebResponse httpResponse = (HttpWebResponse)response2;
                    Console.WriteLine("Error code: {0}", httpResponse.StatusCode);
                    using (Stream data2 = response2.GetResponseStream())
                        using (var reader2 = new StreamReader(data2))
                        {
                            string text = reader2.ReadToEnd();
                            Console.WriteLine(text);
                        }
                }
            }


            data = response.GetResponseStream();
            StreamReader reader         = new StreamReader(data);
            string       serverResponse = reader.ReadToEnd();

            reader.Close();

            if (string.IsNullOrWhiteSpace(serverResponse) || !serverResponse.Trim().StartsWith("{"))
            {
                return(new Transaction_Result
                {
                    isApproved = false,
                    FullRequest = signature_string,
                    FullResponse = serverResponse,
                    hasServerError = true,
                    ErrorText = "An unknown error has occurred, return object not in correct format"
                });
            }

            dynamic json_serverResponse = Newtonsoft.Json.JsonConvert.DeserializeObject <dynamic>(serverResponse);

            var code         = json_serverResponse.code;
            var status       = json_serverResponse.status ?? "";
            var dataobj      = json_serverResponse.data ?? null;
            var responseitem = dataobj != null ? dataobj.response : false;
            var messageitem  = dataobj != null ? dataobj.message ?? "" : "";

            /*
             *
             * {
             *      "code": 200,  The HTTP status code for the result
             *      "status": "success", A more verbose description of the result
             *      "data":
             *  {
             *              "response": true, //approved or not
             *              "message": "Success" //error message
             *      }
             * }
             *
             */

            if (code < 200 || code > 299)
            {
                return(new Transaction_Result
                {
                    isApproved = false,
                    FullRequest = signature_string,
                    FullResponse = serverResponse,
                    hasServerError = true,
                    ErrorCode = code.ToString(),
                    ErrorText = status
                });
            }

            return(new Transaction_Result
            {
                isApproved = responseitem,
                ApprovalCode = code.ToString(),
                FullRequest = signature_string,
                FullResponse = serverResponse,
                hasServerError = false,
                ErrorCode = code.ToString(),
                ErrorText = messageitem,
                ProviderToken = details.ProviderToken
            });
        }
Esempio n. 16
0
        protected override void Seed(DatabaseContext context)
        {
            List <Brand>   brandList   = new List <Brand>();
            List <MyUser>  brandUsers  = new List <MyUser>();
            List <Product> productList = new List <Product>();


            //Only one super user is creating
            MyUser SuperUser = new MyUser()
            {
                Name             = "Emre",
                Surname          = "Serbest",
                ActivateGuid     = Guid.NewGuid(),
                Email            = "*****@*****.**",
                Address          = FakeData.PlaceData.GetAddress(),
                Gender           = "Male",
                IsActive         = true,
                IsSuperUser      = true,
                HasBrand         = false,
                Username         = "******",
                Password         = "******",
                UserImage        = "super_user_avatar.png",
                CreatedOn        = DateTime.Now,
                ModifiedOn       = DateTime.Now,
                ModifiedUsername = "******",
            };

            context.MyUsers.Add(SuperUser);
            context.SaveChanges();


            //Creating 7 Admins (Brand Users)
            for (int i = 0; i < 7; i++)
            {
                var gender     = FakeData.BooleanData.GetBoolean() ? "Male" : "Female";
                var avatar_url = "default_user_avatar";
                if (gender == "Male")
                {
                    avatar_url = "male_user_avatar.png";
                }
                else
                {
                    avatar_url = "female_user_avatar.png";
                }

                MyUser BrandUser = new MyUser()
                {
                    Name             = FakeData.NameData.GetFirstName(),
                    Surname          = FakeData.NameData.GetSurname(),
                    Email            = FakeData.NetworkData.GetEmail(),
                    Address          = FakeData.PlaceData.GetAddress(),
                    Gender           = gender,
                    UserImage        = avatar_url,
                    ActivateGuid     = Guid.NewGuid(),
                    IsActive         = true,
                    IsSuperUser      = false,
                    HasBrand         = true,
                    Username         = $"brandUser{i}",
                    Password         = "******",
                    CreatedOn        = DateTime.Now,
                    ModifiedOn       = DateTime.Now,
                    ModifiedUsername = "******",
                };
                brandUsers.Add(BrandUser);
                context.MyUsers.Add(BrandUser);
            }
            context.SaveChanges();


            //List<MyUser> users = context.MyUsers.ToList();
            //Creating a Brand for the current BrandUser
            foreach (MyUser item in brandUsers)
            {
                Brand newBrand = new Brand()
                {
                    BrandName        = FakeData.NameData.GetCompanyName(),
                    BrandImage       = "logo_placeholder.png",
                    Tag              = FakeData.TextData.GetSentence(),
                    MyUser           = item,
                    CreatedOn        = DateTime.Now,
                    ModifiedOn       = DateTime.Now,
                    ModifiedUsername = "******",
                };
                brandList.Add(newBrand);
                context.Brands.Add(newBrand);
            }
            context.SaveChanges();



            List <string> sizeList = new List <string>();

            sizeList.Add("XS");
            sizeList.Add("S");
            sizeList.Add("M");
            sizeList.Add("L");
            sizeList.Add("XL");
            sizeList.Add("XXL");

            List <string> colorList = new List <string>();

            colorList.Add("black");
            colorList.Add("white");
            colorList.Add("pink");
            colorList.Add("green");
            colorList.Add("red");

            // Creating Categories MEN, WOMEN, KidsAndBabies

            Category Men = new Category()
            {
                Title            = "Men",
                Description      = "Only for men shopping items",
                CreatedOn        = DateTime.Now,
                ModifiedOn       = DateTime.Now,
                ModifiedUsername = "******",
            };

            context.Categories.Add(Men);

            Category Women = new Category()
            {
                Title            = "Women",
                Description      = "Only for women shopping items",
                CreatedOn        = DateTime.Now,
                ModifiedOn       = DateTime.Now,
                ModifiedUsername = "******",
            };

            context.Categories.Add(Women);

            Category KidsAndBabies = new Category()
            {
                Title            = "Kids & Babies",
                Description      = "Kids and Babies shopping items",
                CreatedOn        = DateTime.Now,
                ModifiedOn       = DateTime.Now,
                ModifiedUsername = "******",
            };

            context.Categories.Add(KidsAndBabies);
            context.SaveChanges();
            List <Category>    mainCategories             = new List <Category>();
            List <SubCategory> MenSubCategories           = new List <SubCategory>();
            List <SubCategory> WomenSubCategories         = new List <SubCategory>();
            List <SubCategory> KidsAndBabiesSubCategories = new List <SubCategory>();

            List <string> MenCatNames = new List <string>()
            {
                "Hoodies",
                "Jackets",
                "T-shirts",
                "Shirts",
                "Socks",
                "Jeans",
                "Casual Pants",
                "Cargo Pants",
                "Suits",
                "Boxers",
                "Men's Sleep Lounge",
                "Accessories",
            };

            List <string> WomenCatNames = new List <string>()
            {
                "Dress",
                "Blouses",
                "T-shirts",
                "Beach Style",
                "Skirts",
                "Shorts",
                "Jean",
                "Blazers",
                "Bra",
                "Sleep Lounge",
                "Accessories",
            };

            List <string> KidsCatNames = new List <string>()
            {
                "Dresses",
                "Clothing Sets",
                "Family Matching Clothes",
                "Shoes",
                "Swim Suits",
                "Shorts",
                "Baby Mother",
                "Toys",
            };

            foreach (string subCat in MenCatNames)
            {
                SubCategory subCatMen = new SubCategory()
                {
                    Title            = subCat,
                    Description      = "Men Shopping",
                    Category         = Men,
                    CreatedOn        = DateTime.Now,
                    ModifiedOn       = DateTime.Now,
                    ModifiedUsername = "******",
                };

                MenSubCategories.Add(subCatMen);
                context.SubCategories.Add(subCatMen);
            }

            foreach (string subCat in WomenCatNames)
            {
                SubCategory subCatWomen = new SubCategory()
                {
                    Title            = subCat,
                    Description      = "Women Shopping",
                    Category         = Women,
                    CreatedOn        = DateTime.Now,
                    ModifiedOn       = DateTime.Now,
                    ModifiedUsername = "******",
                };

                WomenSubCategories.Add(subCatWomen);
                context.SubCategories.Add(subCatWomen);
            }

            foreach (string subCat in KidsCatNames)
            {
                SubCategory subCatKidsAndBabies = new SubCategory()
                {
                    Title            = subCat,
                    Description      = "Kids & Babies Shopping",
                    Category         = KidsAndBabies,
                    CreatedOn        = DateTime.Now,
                    ModifiedOn       = DateTime.Now,
                    ModifiedUsername = "******",
                };

                KidsAndBabiesSubCategories.Add(subCatKidsAndBabies);
                context.SubCategories.Add(subCatKidsAndBabies);
            }

            context.SaveChanges();

            mainCategories.Add(Men);
            mainCategories.Add(Women);
            mainCategories.Add(KidsAndBabies);


            //Creating 50 products
            for (int j = 0; j < 50; j++)
            {
                Category    randomCat = mainCategories[FakeData.NumberData.GetNumber(0, mainCategories.Count - 1)];
                SubCategory randomSubCat;
                if (randomCat == Men)
                {
                    randomSubCat = MenSubCategories[FakeData.NumberData.GetNumber(0, MenSubCategories.Count - 1)];
                }
                else if (randomCat == Women)
                {
                    randomSubCat = WomenSubCategories[FakeData.NumberData.GetNumber(0, WomenSubCategories.Count - 1)];
                }
                else
                {
                    randomSubCat = KidsAndBabiesSubCategories[FakeData.NumberData.GetNumber(0, KidsAndBabiesSubCategories.Count - 1)];
                }

                Product newProduct = new Product()
                {
                    ProductName        = FakeData.NameData.GetCompanyName(),
                    ProductDescription = FakeData.TextData.GetSentence(),
                    Brand = brandList[(FakeData.NumberData.GetNumber(0, brandList.Count - 1))],
                    Size  = sizeList[(FakeData.NumberData.GetNumber(0, sizeList.Count - 1))],
                    Color = colorList[(FakeData.NumberData.GetNumber(0, colorList.Count - 1))],
                    Stock = FakeData.NumberData.GetNumber(10, 100),
                    Price = FakeData.NumberData.GetNumber(15, 150),
                    DiscountPercentage = FakeData.NumberData.GetNumber(0, 10),
                    Category           = randomCat,
                    SubCategory        = randomSubCat,
                    CreatedOn          = DateTime.Now,
                    ModifiedOn         = DateTime.Now,
                    ModifiedUsername   = "******",
                };

                productList.Add(newProduct);
                context.Product.Add(newProduct);
            }
            context.SaveChanges();


            List <MyUser> standartUserList = new List <MyUser>();

            for (int s = 0; s < 10; s++)
            {
                MyUser standartUser = new MyUser()
                {
                    Name             = FakeData.NameData.GetFirstName(),
                    Surname          = FakeData.NameData.GetSurname(),
                    Email            = FakeData.NetworkData.GetEmail(),
                    Address          = FakeData.PlaceData.GetAddress(),
                    Gender           = FakeData.BooleanData.GetBoolean() ? "Male" : "Female",
                    UserImage        = FakeData.NetworkData.GetDomain(),
                    ActivateGuid     = Guid.NewGuid(),
                    IsActive         = true,
                    IsSuperUser      = false,
                    HasBrand         = false,
                    Username         = $"standartUser{s}",
                    Password         = "******",
                    CreatedOn        = DateTime.Now,
                    ModifiedOn       = DateTime.Now,
                    ModifiedUsername = "******",
                };
                standartUserList.Add(standartUser);
                context.MyUsers.Add(standartUser);
                context.SaveChanges();

                //Creating Wishlist for standartusers randomly.
                if (FakeData.BooleanData.GetBoolean())
                {
                    Wishlist wishlist = new Wishlist()
                    {
                        IsPublic = FakeData.BooleanData.GetBoolean(),
                        Title    = FakeData.BooleanData.GetBoolean() ? "Specialized-WishList-Title" : "WishList",
                        MyUser   = standartUser,
                    };
                    context.Wishlists.Add(wishlist);

                    //Adding products to the wishlist randomly
                    for (int i = 0; i < FakeData.NumberData.GetNumber(3, 10); i++)
                    {
                        Wishlist_Products wishlist_products = new Wishlist_Products()
                        {
                            Product  = productList[FakeData.NumberData.GetNumber(0, 45)],
                            Wishlist = wishlist
                        };
                        context.WishlistProduct.Add(wishlist_products);
                    }
                }

                //Creating Sale for standart users randomly
                if (FakeData.BooleanData.GetBoolean())
                {
                    for (int salecounter = 0; salecounter < FakeData.NumberData.GetNumber(3, 20); salecounter++)
                    {
                        double totalPrice = 0;

                        Sale_Details saleDetail = new Sale_Details()
                        {
                        };

                        Sale sale = new Sale()
                        {
                        };
                        for (int saleDetailCounter = 0; saleDetailCounter < FakeData.NumberData.GetNumber(2, 8); saleDetailCounter++)
                        {
                            Product soldProduct  = productList[FakeData.NumberData.GetNumber(0, 49)];
                            int     tempQuantity = FakeData.NumberData.GetNumber(1, 4);
                            double  tempSubTotal = soldProduct.Price * tempQuantity;
                            totalPrice += tempSubTotal;


                            saleDetail.Quantity     = tempQuantity;
                            saleDetail.Product      = soldProduct;
                            saleDetail.InstantPrice = soldProduct.Price;
                            saleDetail.SubTotal     = tempSubTotal;
                            saleDetail.Sale         = sale;


                            context.Sale_Details.Add(saleDetail);
                        }


                        sale.Customer   = standartUser;
                        sale.Date       = FakeData.DateTimeData.GetDatetime();
                        sale.Time       = FakeData.DateTimeData.GetDatetime();
                        sale.TotalPrice = totalPrice;
                        sale.TotalVat   = 18;



                        context.Sales.Add(sale);
                    }
                }
            }

            context.SaveChanges();



            //Adding product images
            foreach (Product itemProduct in productList)
            {
                for (int i = 0; i < FakeData.NumberData.GetNumber(3, 7); i++)
                {
                    Product_Image productImage = new Product_Image()
                    {
                        Url     = $"picture{i}.jpg",
                        Product = itemProduct,
                    };
                    context.ProductImages.Add(productImage);


                    MyUser owner = standartUserList[FakeData.NumberData.GetNumber(0, standartUserList.Count - 1)];
                    //Adding comments
                    Comment newComment = new Comment()
                    {
                        Text             = FakeData.TextData.GetSentences(FakeData.NumberData.GetNumber(1, 3)),
                        Owner            = owner,
                        Product          = itemProduct,
                        CreatedOn        = DateTime.Now,
                        ModifiedOn       = DateTime.Now,
                        ModifiedUsername = owner.Username,
                    };
                    context.Comments.Add(newComment);


                    //Creating likes
                    Rate Rate = new Rate()
                    {
                        RateOwner = standartUserList[FakeData.NumberData.GetNumber(0, standartUserList.Count - 1)],
                        Product   = itemProduct,
                    };
                    context.Rates.Add(Rate);
                }
            }
            context.SaveChanges();
        }
Esempio n. 17
0
        public void runTests()
        {
            var ran = new Random();
            // classes
            var sale_details_visa_success = new Sale_Details {
                accountID = -1, appID = -1, transactionID = -1, ExtRef = "myref" + ran.Next(), CardNumber = "4000000000000002", CardExpiryMonth = 11, CardExpiryYear = 2016, CardCCV = "123", CardType = CardTypeEnum.VISA, Amount = 1, CurrencyCode = "ZAR", IPAddress = "192.168.1.150", CustomerFirstName = "John", CustomerLastName = "Doe", CustomerAddress = "50 Pickering", CustomerCity = "Port Elizabeth", CustomerCountry = "South Africa", CustomerCountryCodeTwoLetter = "ZA", CustomerEmail = "*****@*****.**", CustomerPhone = "+27413655888", CustomerState = "EC", CustomerZip = "6045",
            };
            var sale_details_visa_fail = new Sale_Details {
                accountID = -1, appID = -1, transactionID = -1, ExtRef = "myref" + ran.Next(), CardNumber = "4000000000000036", CardExpiryMonth = 11, CardExpiryYear = 2016, CardCCV = "123", CardType = CardTypeEnum.VISA, Amount = 1, CurrencyCode = "ZAR", IPAddress = "192.168.1.150", CustomerFirstName = "John", CustomerLastName = "Doe", CustomerAddress = "50 Pickering", CustomerCity = "Port Elizabeth", CustomerCountry = "South Africa", CustomerCountryCodeTwoLetter = "ZA", CustomerEmail = "*****@*****.**", CustomerPhone = "+27413655888", CustomerState = "EC", CustomerZip = "6045",
            };
            var sale_details_visa_nofunds = new Sale_Details {
                accountID = -1, appID = -1, transactionID = -1, ExtRef = "myref" + ran.Next(), CardNumber = "4000000000000028", CardExpiryMonth = 11, CardExpiryYear = 2016, CardCCV = "123", CardType = CardTypeEnum.VISA, Amount = 1, CurrencyCode = "ZAR", IPAddress = "192.168.1.150", CustomerFirstName = "John", CustomerLastName = "Doe", CustomerAddress = "50 Pickering", CustomerCity = "Port Elizabeth", CustomerCountry = "South Africa", CustomerCountryCodeTwoLetter = "ZA", CustomerEmail = "*****@*****.**", CustomerPhone = "+27413655888", CustomerState = "EC", CustomerZip = "6045",
            };
            var sale_details_visa_fail_expiry = new Sale_Details {
                accountID = -1, appID = -1, transactionID = -1, ExtRef = "myref" + ran.Next(), CardNumber = "4000000000000002", CardExpiryMonth = 11, CardExpiryYear = 2011, CardCCV = "123", CardType = CardTypeEnum.VISA, Amount = 1, CurrencyCode = "ZAR", IPAddress = "192.168.1.150", CustomerFirstName = "John", CustomerLastName = "Doe", CustomerAddress = "50 Pickering", CustomerCity = "Port Elizabeth", CustomerCountry = "South Africa", CustomerCountryCodeTwoLetter = "ZA", CustomerEmail = "*****@*****.**", CustomerPhone = "+27413655888", CustomerState = "EC", CustomerZip = "6045",
            };

            var sale_details_master_success = new Sale_Details {
                accountID = -1, appID = -1, transactionID = -1, ExtRef = "myref" + ran.Next(), CardNumber = "5200000000000015", CardExpiryMonth = 11, CardExpiryYear = 2016, CardCCV = "123", CardType = CardTypeEnum.MASTERCARD, Amount = 1, CurrencyCode = "ZAR", IPAddress = "192.168.1.150", CustomerFirstName = "John", CustomerLastName = "Doe", CustomerAddress = "50 Pickering", CustomerCity = "Port Elizabeth", CustomerCountry = "South Africa", CustomerCountryCodeTwoLetter = "ZA", CustomerEmail = "*****@*****.**", CustomerPhone = "+27413655888", CustomerState = "EC", CustomerZip = "6045",
            };
            var sale_details_master_fail = new Sale_Details {
                accountID = -1, appID = -1, transactionID = -1, ExtRef = "myref" + ran.Next(), CardNumber = "5200000000000023", CardExpiryMonth = 11, CardExpiryYear = 2016, CardCCV = "123", CardType = CardTypeEnum.MASTERCARD, Amount = 1, CurrencyCode = "ZAR", IPAddress = "192.168.1.150", CustomerFirstName = "John", CustomerLastName = "Doe", CustomerAddress = "50 Pickering", CustomerCity = "Port Elizabeth", CustomerCountry = "South Africa", CustomerCountryCodeTwoLetter = "ZA", CustomerEmail = "*****@*****.**", CustomerPhone = "+27413655888", CustomerState = "EC", CustomerZip = "6045",
            };


            LoginTest();

            // Store Payment Method

            // Revoke Payment Method

            // 3D Secure

            // Verify Card

            // AUTH
            var auth_tr = Auth(sale_details_visa_success).testApproved("Auth");

            Auth(sale_details_visa_fail).testNotApproved("Auth");
            Auth(sale_details_visa_nofunds).testNotApproved("Auth");
            Auth(sale_details_visa_fail_expiry).testNotApproved("Auth");
            Auth(sale_details_master_success).testApproved("Auth");
            Auth(sale_details_master_fail).testNotApproved("Auth");

            //CAPTURE
            var capture_tr = Capture(new AuthCapture_Details
            {
                Amount           = 1,
                CurrencyCode     = "ZAR",
                TransactionIndex = auth_tr.TransactionIndex
            }).testApproved("Capture");

            //SALE
            sale_details_visa_success.ExtRef = "test" + ran.Next();
            var sale_tr = Sale(sale_details_visa_success).testApproved("Sale");

            //REFUND
            Transaction_Result refund_tr = Refund(new Refund_Details
            {
                Amount           = 1,
                CurrencyCode     = "ZAR",
                TransactionIndex = sale_tr.TransactionIndex
            }).testApproved("Refund");

            // Credit
            // NOT IMPLEMENTED

            //VOID
            // NOT IMPLEMENTED
        }
        public Transaction_Result Auth(Sale_Details details)
        {
            bool isApproved = false;
            bool isPending  = false;
            bool failed     = false;

            try
            {
                StripeConfiguration.SetApiKey(secretKey);
                if (details.ProviderToken == null || details.ProviderToken.Length <= 1)
                {
                    try
                    {
                        StripeSource source = createStripeSource(details.CardNumber, details.CardExpiryYear, details.CardExpiryMonth, details.CardCCV, details.CardHolderName + " " + details.CardHolderLastName, false);
                        details.ProviderToken = source.Id;
                    }
                    catch (StripeException e)
                    {
                        return(new Transaction_Result()
                        {
                            isApproved = false,
                            hasServerError = true,
                            ErrorCode = e.StripeError.Code,
                            ErrorText = e.StripeError.Message,
                            FullResponse = e.StripeError.StripeResponse.ResponseJson
                        });
                    }
                }
                StripeCustomer customer = new StripeCustomer();
                if (details.ProviderToken.IndexOf("cus") > -1)
                {
                    customer = getTCGStripeCustomer(details.ProviderToken);
                }
                else
                {
                    customer = createTCGStripeCustomer(new StorePaymentMethod_Details()
                    {
                        CardCVV           = details.CardCCV,
                        CardExpiryMonth   = details.CardExpiryMonth,
                        CardExpiryYear    = details.CardExpiryYear,
                        CardHolderName    = details.CardHolderName,
                        CardNumber        = details.CardNumber,
                        CardHolderSurname = details.CardHolderLastName
                    }, details.ProviderToken);
                }
                details.ProviderToken = customer.DefaultSourceId;
                var chargeOptions = new StripeChargeCreateOptions()
                {
                    Amount      = calculateAmount(details.Amount, details.CurrencyCode),
                    Currency    = details.CurrencyCode.ToLower(), //SHOULD BE LOWER CASE
                    Description = "Authentication for " + details.CustomerLastName + ", " + details.CustomerFirstName,
                    SourceTokenOrExistingSourceId = details.ProviderToken,
                    CustomerId = customer.Id,
                    Capture    = false
                };
                var          chargeService = new StripeChargeService();
                StripeCharge charge        = chargeService.Create(chargeOptions);
                string       status        = charge.Status;
                if (status.Contains("succeeded"))
                {
                    isApproved = true;
                }
                else if (status.Contains("pending"))
                {
                    isPending = true;
                }
                else
                {
                    failed = true;
                }
                return(new Transaction_Result
                {
                    isApproved = isApproved,
                    hasServerError = failed,
                    ErrorText = charge.FailureMessage,
                    ResultText = charge.Status,
                    isPending = isPending,
                    ProviderToken = charge.Id,
                    FullResponse = charge.StripeResponse.ResponseJson,
                    ApprovalCode = charge.Status
                });
            }
            catch (StripeException e)
            {
                return(new Transaction_Result
                {
                    isApproved = false,
                    hasServerError = true,
                    ErrorText = e.StripeError.Message,
                    ProviderToken = null,
                    ErrorCode = e.StripeError.Code,
                    FullResponse = e.StripeError.StripeResponse.ResponseJson
                });
            }
        }
        public Transaction_Result Sale(Sale_Details details)
        {
            StripeConfiguration.SetApiKey(secretKey);
            //ONCE-OFF PAYMENT
            if (details.ProviderToken == null || details.ProviderToken.Length <= 1)
            {
                try
                {
                    StripeSource source = createStripeSource(details.CardNumber, details.CardExpiryYear, details.CardExpiryMonth, details.CardCCV, details.CardHolderName + " " + details.CardHolderLastName, false);
                    details.ProviderToken = source.Id;
                }
                catch (StripeException e)
                {
                    return(new Transaction_Result()
                    {
                        isApproved = false,
                        hasServerError = true,
                        ErrorCode = e.StripeError.Code,
                        ErrorText = e.StripeError.Message,
                        FullResponse = e.StripeError.StripeResponse.ResponseJson
                    });
                }
            }

            //INITIATING A CHARGE
            var          chargeOptions = new StripeChargeCreateOptions();
            var          chargeService = new StripeChargeService();
            StripeCharge charge        = new StripeCharge();

            chargeOptions.Capture = true;
            bool isApproved = false;
            bool isPending  = false;

            try
            {
                //IF A SOURCE TOKEN IS PROVIDED >>>> ONCE-OFF PAYMENT

                if (details.ProviderToken.IndexOf("src") > -1)
                {
                    var          sourceService = new StripeSourceService();
                    StripeSource source        = sourceService.Get(details.ProviderToken);
                    chargeOptions.SourceTokenOrExistingSourceId = source.Id;
                    chargeOptions.Amount   = calculateAmount(details.Amount, details.CurrencyCode); // $1.00 = 100 cents
                    chargeOptions.Currency = details.CurrencyCode.ToLower();                        //SHOULD BE LOWER CASE
                    charge = chargeService.Create(chargeOptions);
                }

                //ONCE-OFF PAYMENT

                else if (details.ProviderToken.IndexOf("tok") > -1)
                {
                    var sourceService = new StripeSourceService();
                    chargeOptions.SourceTokenOrExistingSourceId = details.ProviderToken;
                    chargeOptions.Amount   = calculateAmount(details.Amount, details.CurrencyCode); // $1.00 = 100 cents
                    chargeOptions.Currency = details.CurrencyCode.ToLower();                        //SHOULD BE LOWER CASE
                    charge = chargeService.Create(chargeOptions);
                }

                //A REUSABLE CUSTOMER (OR A CARD)

                else if (details.ProviderToken.IndexOf("cus") > -1)
                {
                    var            customerService = new StripeCustomerService();
                    StripeCustomer customer        = customerService.Get(details.ProviderToken);
                    chargeOptions.SourceTokenOrExistingSourceId = customer.DefaultSourceId;
                    chargeOptions.CustomerId = details.ProviderToken;
                    chargeOptions.Amount     = calculateAmount(details.Amount, details.CurrencyCode); // $1.00 = 100 cents
                    chargeOptions.Currency   = details.CurrencyCode.ToLower();                        //SHOULD BE LOWER CASE
                    charge = chargeService.Create(chargeOptions);
                }
                string status = charge.Status;
                if (status.Contains("succeeded"))
                {
                    isApproved = true;
                }
                else if (status.Contains("pending"))
                {
                    isPending = true;
                }
                return(new Transaction_Result
                {
                    isApproved = isApproved,
                    hasServerError = isPending,
                    ErrorText = charge.FailureMessage,
                    ErrorCode = charge.FailureCode,
                    TransactionIndex = charge.BalanceTransactionId,
                    ProviderToken = charge.Id,
                    ResultText = charge.Status,
                    FullResponse = charge.StripeResponse.ResponseJson
                });
            }
            catch (StripeException e)
            {
                return(new Transaction_Result
                {
                    isApproved = false,
                    hasServerError = true,
                    ErrorText = e.StripeError.Message,
                    ProviderToken = null,
                    ErrorCode = e.StripeError.Code,
                    FullResponse = e.StripeError.StripeResponse.ResponseJson
                });
            }
        }
Esempio n. 20
0
        protected override void Seed(DatabaseContext context)
        {
            List <Brand>   brandList   = new List <Brand>();
            List <MyUser>  brandUsers  = new List <MyUser>();
            List <Product> productList = new List <Product>();


            //Only one super user is creating
            MyUser SuperUser = new MyUser()
            {
                Name         = "Emre",
                Surname      = "Serbest",
                ActivateGuid = Guid.NewGuid(),
                Email        = "*****@*****.**",
                IsActive     = true,
                IsSuperUser  = true,
                HasBrand     = false,
                Username     = "******",
                Password     = "******",
                UserImage    = FakeData.NetworkData.GetDomain(),
            };

            context.MyUsers.Add(SuperUser);
            context.SaveChanges();


            //Creating 7 Admins (Brand Users)
            for (int i = 0; i < 7; i++)
            {
                MyUser BrandUser = new MyUser()
                {
                    Name         = FakeData.NameData.GetFirstName(),
                    Surname      = FakeData.NameData.GetSurname(),
                    Email        = FakeData.NetworkData.GetEmail(),
                    UserImage    = FakeData.NetworkData.GetDomain(),
                    ActivateGuid = Guid.NewGuid(),
                    IsActive     = true,
                    IsSuperUser  = false,
                    HasBrand     = true,
                    Username     = $"brandUser{i}",
                    Password     = "******"
                };
                brandUsers.Add(BrandUser);
                context.MyUsers.Add(BrandUser);
            }
            context.SaveChanges();


            //List<MyUser> users = context.MyUsers.ToList();
            //Creating a Brand for the current BrandUser
            foreach (MyUser item in brandUsers)
            {
                Brand newBrand = new Brand()
                {
                    BrandName  = FakeData.NameData.GetCompanyName(),
                    BrandImage = "BrandImage.jpg",
                    Tag        = FakeData.TextData.GetSentence(),
                    MyUser     = item,
                };
                brandList.Add(newBrand);
                context.Brands.Add(newBrand);
            }
            context.SaveChanges();

            // Creating categories(3,6) for the current Brand

            foreach (var itemBrand in brandList)
            {
                for (int a = 0; a < FakeData.NumberData.GetNumber(3, 6); a++)
                {
                    Category category = new Category()
                    {
                        Title       = FakeData.NameData.GetSurname(),
                        Description = FakeData.TextData.GetSentence(),
                        Brand       = itemBrand,
                    };

                    context.Categories.Add(category);
                }
            }
            context.SaveChanges();

            List <string> sizeList = new List <string>();

            sizeList.Add("XS");
            sizeList.Add("S");
            sizeList.Add("M");
            sizeList.Add("L");
            sizeList.Add("XL");
            sizeList.Add("XXL");

            List <string> colorList = new List <string>();

            colorList.Add("black");
            colorList.Add("white");
            colorList.Add("pink");
            colorList.Add("green");
            colorList.Add("red");


            //Creating 50 products
            for (int j = 0; j < 50; j++)
            {
                Product newProduct = new Product()
                {
                    ProductName        = FakeData.NameData.GetCompanyName(),
                    ProductDescription = FakeData.TextData.GetSentence(),
                    Brand = brandList[(FakeData.NumberData.GetNumber(0, brandList.Count - 1))],
                    Size  = sizeList[(FakeData.NumberData.GetNumber(0, sizeList.Count - 1))],
                    Color = colorList[(FakeData.NumberData.GetNumber(0, colorList.Count - 1))],
                    Stock = FakeData.NumberData.GetNumber(10, 100),
                    Price = FakeData.NumberData.GetDouble(),
                    DiscountPercentage = FakeData.NumberData.GetNumber(0, 10),
                };

                productList.Add(newProduct);
                context.Product.Add(newProduct);
            }
            context.SaveChanges();


            List <MyUser> standartUserList = new List <MyUser>();

            for (int s = 0; s < 10; s++)
            {
                MyUser standartUser = new MyUser()
                {
                    Name         = FakeData.NameData.GetFirstName(),
                    Surname      = FakeData.NameData.GetSurname(),
                    Email        = FakeData.NetworkData.GetEmail(),
                    UserImage    = FakeData.NetworkData.GetDomain(),
                    ActivateGuid = Guid.NewGuid(),
                    IsActive     = true,
                    IsSuperUser  = false,
                    HasBrand     = false,
                    Username     = $"standartUser{s}",
                    Password     = "******"
                };
                standartUserList.Add(standartUser);
                context.MyUsers.Add(standartUser);
                context.SaveChanges();

                //Creating Wishlist for standartusers randomly.
                if (FakeData.BooleanData.GetBoolean())
                {
                    Wishlist wishlist = new Wishlist()
                    {
                        IsPublic = FakeData.BooleanData.GetBoolean(),
                        Title    = FakeData.BooleanData.GetBoolean() ? "Specialized-WishList-Title" : "WishList",
                        MyUser   = standartUser,
                    };
                    context.Wishlists.Add(wishlist);

                    //Adding products to the wishlist randomly
                    for (int i = 0; i < FakeData.NumberData.GetNumber(3, 10); i++)
                    {
                        Wishlist_Products wishlist_products = new Wishlist_Products()
                        {
                            Product  = productList[FakeData.NumberData.GetNumber(0, 45)],
                            Wishlist = wishlist
                        };
                        context.WishlistProduct.Add(wishlist_products);
                    }
                }

                //Creating Sale for standart users randomly
                if (FakeData.BooleanData.GetBoolean())
                {
                    for (int salecounter = 0; salecounter < FakeData.NumberData.GetNumber(3, 20); salecounter++)
                    {
                        double totalPrice = 0;

                        Sale_Details saleDetail = new Sale_Details()
                        {
                        };

                        Sale sale = new Sale()
                        {
                        };
                        for (int saleDetailCounter = 0; saleDetailCounter < FakeData.NumberData.GetNumber(2, 8); saleDetailCounter++)
                        {
                            Product soldProduct  = productList[FakeData.NumberData.GetNumber(0, 49)];
                            int     tempQuantity = FakeData.NumberData.GetNumber(1, 4);
                            double  tempSubTotal = soldProduct.Price * tempQuantity;
                            totalPrice += tempSubTotal;


                            saleDetail.Quantity     = tempQuantity;
                            saleDetail.Product      = soldProduct;
                            saleDetail.InstantPrice = soldProduct.Price;
                            saleDetail.SubTotal     = tempSubTotal;
                            saleDetail.Sale         = sale;


                            context.Sale_Details.Add(saleDetail);
                        }


                        sale.Customer   = standartUser;
                        sale.Date       = FakeData.DateTimeData.GetDatetime();
                        sale.Time       = FakeData.DateTimeData.GetDatetime();
                        sale.TotalPrice = totalPrice;
                        sale.TotalVat   = 18;



                        context.Sales.Add(sale);
                    }
                }
            }

            context.SaveChanges();



            //Adding product images
            foreach (Product itemProduct in productList)
            {
                for (int i = 0; i < FakeData.NumberData.GetNumber(3, 7); i++)
                {
                    Product_Image productImage = new Product_Image()
                    {
                        Url     = $"picture{i}.jpg",
                        Product = itemProduct,
                    };
                    context.ProductImages.Add(productImage);


                    //Adding comments
                    Comment newComment = new Comment()
                    {
                        Text    = FakeData.TextData.GetSentences(FakeData.NumberData.GetNumber(1, 3)),
                        Owner   = standartUserList[FakeData.NumberData.GetNumber(0, standartUserList.Count - 1)],
                        Product = itemProduct,
                    };
                    context.Comments.Add(newComment);


                    //Creating likes
                    Like like = new Like()
                    {
                        LikeOwner = standartUserList[FakeData.NumberData.GetNumber(0, standartUserList.Count - 1)],
                        Product   = itemProduct,
                    };
                    context.Likes.Add(like);
                }
            }
            context.SaveChanges();
        }
Esempio n. 21
0
        public void runTests()
        {
            var ran = new Random();

            var sale_details_payu_success = new Sale_Details {
                accountID = -1, appID = -1, transactionID = -1, ExtRef = "myref" + ran.Next(), CardNumber = "5471196125289392", CardExpiryMonth = 10, CardExpiryYear = 2020, CardCCV = "698", CardType = CardTypeEnum.VISA, Amount = 1, CurrencyCode = "ZAR", IPAddress = "192.168.1.150", CustomerFirstName = "John", CustomerLastName = "Doe", CustomerAddress = "50 Pickering", CustomerCity = "Port Elizabeth", CustomerCountry = "South Africa", CustomerCountryCodeTwoLetter = "ZA", CustomerEmail = "*****@*****.**", CustomerPhone = "+27413655888", CustomerState = "EC", CustomerZip = "6045",
            };
            var sale_details_payu_expired = new Sale_Details {
                accountID = -1, appID = -1, transactionID = -1, ExtRef = "myref" + ran.Next(), CardNumber = "5420287453066155", CardExpiryMonth = 11, CardExpiryYear = 2011, CardCCV = "327", CardType = CardTypeEnum.VISA, Amount = 1, CurrencyCode = "ZAR", IPAddress = "192.168.1.150", CustomerFirstName = "John", CustomerLastName = "Doe", CustomerAddress = "50 Pickering", CustomerCity = "Port Elizabeth", CustomerCountry = "South Africa", CustomerCountryCodeTwoLetter = "ZA", CustomerEmail = "*****@*****.**", CustomerPhone = "+27413655888", CustomerState = "EC", CustomerZip = "6045",
            };

            //var sale_details_payu_cvv = new Sale_Details { accountID = -1, customerID = -1, transactionID = -1, InvoiceNumber = "test1", CardNumber = "5471196125289392", CardExpiryMonth = 10, CardExpiryYear = 2020, CardCCV = "123", CardType = CardTypeEnum.VISA, Amount = 1, CurrencyCode = "ZAR", CurrencyCodeNumeric = "840", IPAddress = "192.168.1.150", CustomerFirstName = "John", CustomerLastName = "Doe", CustomerAddress = "50 Pickering", CustomerCity = "Port Elizabeth", CustomerCountry = "South Africa", CustomerCountryCodeTwoLetter = "ZA", CustomerEmail = "*****@*****.**", CustomerPhone = "+27413655888", CustomerState = "EC", CustomerZip = "6045", };

            LoginTest();

            // Store Payment Method

            // Revoke Payment Method

            // 3D Secure

            // Verify Card

            // AUTH
            var auth_tr = Auth(sale_details_payu_success).testApproved("Auth");

            Auth(sale_details_payu_expired).testNotApproved("Auth");
            //Auth(sale_details_payu_cvv).testNotApproved("Auth");


            //CAPTURE
            var capture_tr = Capture(new AuthCapture_Details
            {
                Amount           = 1,
                CurrencyCode     = "ZAR",
                TransactionIndex = auth_tr.TransactionIndex
            }).testApproved("Capture");

            //SALE
            var sale_tr = Sale(sale_details_payu_success).testApproved("Sale");

            //REFUND
            Transaction_Result refund_tr = Refund(new Refund_Details
            {
                Amount           = 1,
                CurrencyCode     = "ZAR",
                TransactionIndex = sale_tr.TransactionIndex
            }).testApproved("Refund");

            // Credit
            // NOT IMPLEMENTED

            //VOID
            var auth_tr_void = Auth(sale_details_payu_success).testApproved("Auth");
            var void_tr      = Void(new Void_Details
            {
                Amount           = 1,
                CurrencyCode     = "ZAR",
                TransactionIndex = auth_tr_void.TransactionIndex
            }).testApproved("Void");
        }
 public Transaction_Result Verify(Sale_Details details)
 {
     throw new NotImplementedException();
 }
Esempio n. 23
0
        public Transaction_Result Auth(Sale_Details details)
        {
            try
            {
                var    gateway        = newClient();
                string cardtypestring = ((string)Enum.GetName(typeof(CardTypeEnum), details.CardType)).ToLower();
                string cardtypeval    = ""; //convert from string to mygate number
                switch (cardtypestring)
                {
                case ("american_express"):
                {
                    cardtypeval = "1";
                }
                break;

                case ("discover"):
                {
                    cardtypeval = "2";
                }
                break;

                case ("mastercard"):
                {
                    cardtypeval = "3";
                }
                break;

                case ("visa"):
                {
                    cardtypeval = "4";
                }
                break;

                case ("diners_club"):
                {
                    cardtypeval = "5";
                }
                break;

                default:
                {
                    cardtypeval = "-1";
                }
                break;
                }

                object[] arrResults = gateway.fProcess(
                    "01",                                                       //GatewayID
                    MerchantUID,                                                //MerchantUID
                    PaymentApplicationUID,                                      //ApplicationUID
                    "1",                                                        //1 Authorization Request                           //Action
                    "",                                                         //TransactionIndex
                    "Default",                                                  //Terminal
                    Mode,                                                       //Mode
                    details.ExtRef,                                             //MerchantReference
                    details.Amount.ToString("F2"),                              //Amount
                    details.CurrencyCode,                                       //Currency
                    "",                                                         //CashBackAmount
                    cardtypeval,                                                //CardType
                    "",                                                         //AccountType
                    details.CardNumber,                                         //CardNumber
                    details.CustomerFirstName + " " + details.CustomerLastName, //CardHolder
                    details.CardCCV,                                            //CCVNumber
                    details.CardExpiryMonth.ToString(),                         //ExpiryMonth
                    details.CardExpiryYear.ToString(),                          //ExpiryYear
                    "0",                                                        //Budget - 0 Straight, 1 budget
                    "",                                                         //BudgetPeriod
                    "",                                                         //AuthorizationNumber
                    "",                                                         //PIN
                    "",                                                         //DebugMode
                    "",                                                         //eCommerceIndicator
                    "",                                                         //verifiedByVisaXID
                    "",                                                         //verifiedByVisaCAFF
                    "",                                                         //secureCodeUCAF
                    "",                                                         //UCI
                    details.IPAddress,                                          //IP Address
                    details.CustomerCountryCodeTwoLetter,                       //Shipping Country Code,
                    ""                                                          //Purchase Items ID
                    );

                var results = formatResult(arrResults);

                string cardnumber = details.CardNumber;
                Regex  rgx        = new Regex(@"[^\d]");
                cardnumber = rgx.Replace(cardnumber, String.Empty); //removes dashes spaces, etc
                string last4digits = cardnumber.Substring(cardnumber.Length - 4);

                var stringwriter = new System.IO.StringWriter();
                var xmlwriter    = XmlWriter.Create(stringwriter, new XmlWriterSettings {
                    NewLineHandling = NewLineHandling.None
                });
                var serializer = new XmlSerializer(details.GetType());
                serializer.Serialize(xmlwriter, details);
                var fullrequest = stringwriter.ToString();

                if (cardnumber.Length > 0) //added if statement because crashes if string length 0
                {
                    fullrequest = fullrequest.Replace(cardnumber, last4digits);
                }
                if (details.CardCCV.Length > 0) //added if statement because crashes if string length 0
                {
                    fullrequest = fullrequest.Replace(details.CardCCV, "***");
                }

                results.FullRequest = fullrequest;

                return(results);
            }
            catch (Exception ex)
            {
                return(new Transaction_Result
                {
                    isApproved = false,
                    hasServerError = true,
                    ErrorText = ex.Message
                });
            }
        }
        public Transaction_Result Sale(Sale_Details details)
        {
            try
            {
                var Payment = PayPalDirect.Sale(ClientId, ClientSecret, new Sale_DetailsModel
                {
                    accountID     = details.accountID,
                    transactionID = details.transactionID,
                    appID         = details.appID,

                    Amount       = details.Amount,
                    CurrencyCode = details.CurrencyCode,

                    CardNumber         = details.CardNumber,
                    CardType           = details.CardType.ToString().ToLower(),
                    CardCCV            = details.CardCCV,
                    CardExpiryMonth    = details.CardExpiryMonth,
                    CardExpiryYear     = details.CardExpiryYear,
                    CardHolderLastName = details.CardHolderLastName,
                    CardHolderName     = details.CardHolderName,

                    CustomerCity    = details.CustomerCity,
                    CustomerCountry = details.CustomerCountry,
                    CustomerCountryCodeThreeLetter = details.CustomerCountryCodeThreeLetter,
                    CustomerCountryCodeTwoLetter   = details.CustomerCountryCodeTwoLetter,
                    CustomerCountryNumeric         = details.CustomerCountryNumeric,
                    CustomerEmail      = details.CustomerEmail,
                    CustomerFirstName  = details.CustomerFirstName,
                    CustomerIdentifier = details.CustomerIdentifier,
                    CustomerLastName   = details.CustomerLastName,
                    CustomerPhone      = details.CustomerPhone,
                    CustomerZip        = details.CustomerZip,
                    CustomerState      = details.CustomerState,
                    CustomerAddress    = details.CustomerAddress,

                    ExtRef             = details.ExtRef,
                    ProductDescription = details.ProductDescription,
                    ProviderPIN        = details.ProviderPIN,
                    ProviderToken      = details.ProviderToken,
                    IPAddress          = details.IPAddress
                });

                if (Payment.state == "approved")
                {
                    return(new Transaction_Result
                    {
                        isApproved = true,
                        ApprovalCode = "200",
                        FullRequest = Payment.FullRequest,
                        FullResponse = Payment.FullResponse,
                        hasServerError = false,
                        ErrorCode = "",
                        ErrorText = "",
                        ProviderToken = details.ProviderToken
                    });
                }
                else
                {
                    return(new Transaction_Result
                    {
                        isApproved = false,
                        FullRequest = Payment.FullRequest,
                        FullResponse = Payment.FullResponse,
                        hasServerError = true,
                        ErrorCode = "",
                        ErrorText = ""
                    });
                }
            }
            catch (WebException e)
            {
                return(new Transaction_Result
                {
                    isApproved = false,
                    FullRequest = "",
                    FullResponse = e.ToString(),
                    hasServerError = true,
                    ErrorText = "An unknown error has occurred, return object not in correct format"
                });
            }



            throw new NotImplementedException();
        }
Esempio n. 25
0
        public void runTests()
        {
            var ran = new Random();

            // classes
            var sale_details_visa_success = new Sale_Details {
                accountID = -1, appID = -1, transactionID = -1, ExtRef = "myref" + ran.Next(), CardNumber = "4111 1111 1111 1111", CardExpiryMonth = 11, CardExpiryYear = 2016, CardCCV = "123", CardType = CardTypeEnum.VISA, Amount = 1, CurrencyCode = "ZAR", IPAddress = "192.168.1.150", CustomerFirstName = "John", CustomerLastName = "Doe", CustomerAddress = "50 Pickering", CustomerCity = "Port Elizabeth", CustomerCountry = "South Africa", CustomerCountryCodeTwoLetter = "ZA", CustomerEmail = "*****@*****.**", CustomerPhone = "+27413655888", CustomerState = "EC", CustomerZip = "6045",
            };
            var sale_details_visa_fail = new Sale_Details {
                accountID = -1, appID = -1, transactionID = -1, ExtRef = "myref" + ran.Next(), CardNumber = "4242424242424242", CardExpiryMonth = 11, CardExpiryYear = 2016, CardCCV = "123", CardType = CardTypeEnum.VISA, Amount = 1, CurrencyCode = "ZAR", IPAddress = "192.168.1.150", CustomerFirstName = "John", CustomerLastName = "Doe", CustomerAddress = "50 Pickering", CustomerCity = "Port Elizabeth", CustomerCountry = "South Africa", CustomerCountryCodeTwoLetter = "ZA", CustomerEmail = "*****@*****.**", CustomerPhone = "+27413655888", CustomerState = "EC", CustomerZip = "6045",
            };
            var sale_details_visa_fail_expiry = new Sale_Details {
                accountID = -1, appID = -1, transactionID = -1, ExtRef = "myref" + ran.Next(), CardNumber = "4111 1111 1111 1111", CardExpiryMonth = 11, CardExpiryYear = 2011, CardCCV = "123", CardType = CardTypeEnum.VISA, Amount = 1, CurrencyCode = "ZAR", IPAddress = "192.168.1.150", CustomerFirstName = "John", CustomerLastName = "Doe", CustomerAddress = "50 Pickering", CustomerCity = "Port Elizabeth", CustomerCountry = "South Africa", CustomerCountryCodeTwoLetter = "ZA", CustomerEmail = "*****@*****.**", CustomerPhone = "+27413655888", CustomerState = "EC", CustomerZip = "6045",
            };

            var sale_details_master_success = new Sale_Details {
                accountID = -1, appID = -1, transactionID = -1, ExtRef = "myref" + ran.Next(), CardNumber = "5100080000000000", CardExpiryMonth = 11, CardExpiryYear = 2016, CardCCV = "123", CardType = CardTypeEnum.MASTERCARD, Amount = 1, CurrencyCode = "ZAR", IPAddress = "192.168.1.150", CustomerFirstName = "John", CustomerLastName = "Doe", CustomerAddress = "50 Pickering", CustomerCity = "Port Elizabeth", CustomerCountry = "South Africa", CustomerCountryCodeTwoLetter = "ZA", CustomerEmail = "*****@*****.**", CustomerPhone = "+27413655888", CustomerState = "EC", CustomerZip = "6045",
            };
            var sale_details_master_fail = new Sale_Details {
                accountID = -1, appID = -1, transactionID = -1, ExtRef = "myref" + ran.Next(), CardNumber = "5404000000000001", CardExpiryMonth = 11, CardExpiryYear = 2016, CardCCV = "123", CardType = CardTypeEnum.MASTERCARD, Amount = 1, CurrencyCode = "ZAR", IPAddress = "192.168.1.150", CustomerFirstName = "John", CustomerLastName = "Doe", CustomerAddress = "50 Pickering", CustomerCity = "Port Elizabeth", CustomerCountry = "South Africa", CustomerCountryCodeTwoLetter = "ZA", CustomerEmail = "*****@*****.**", CustomerPhone = "+27413655888", CustomerState = "EC", CustomerZip = "6045",
            };
            var sale_details_master_fail_expiry = new Sale_Details {
                accountID = -1, appID = -1, transactionID = -1, ExtRef = "myref" + ran.Next(), CardNumber = "5100080000000000", CardExpiryMonth = 11, CardExpiryYear = 2011, CardCCV = "123", CardType = CardTypeEnum.MASTERCARD, Amount = 1, CurrencyCode = "ZAR", IPAddress = "192.168.1.150", CustomerFirstName = "John", CustomerLastName = "Doe", CustomerAddress = "50 Pickering", CustomerCity = "Port Elizabeth", CustomerCountry = "South Africa", CustomerCountryCodeTwoLetter = "ZA", CustomerEmail = "*****@*****.**", CustomerPhone = "+27413655888", CustomerState = "EC", CustomerZip = "6045",
            };

            var sale_details_amex_success = new Sale_Details {
                accountID = -1, appID = -1, transactionID = -1, ExtRef = "myref" + ran.Next(), CardNumber = "370000200000000", CardExpiryMonth = 11, CardExpiryYear = 2016, CardCCV = "123", CardType = CardTypeEnum.AMERICAN_EXPRESS, Amount = 1, CurrencyCode = "ZAR", IPAddress = "192.168.1.150", CustomerFirstName = "John", CustomerLastName = "Doe", CustomerAddress = "50 Pickering", CustomerCity = "Port Elizabeth", CustomerCountry = "South Africa", CustomerCountryCodeTwoLetter = "ZA", CustomerEmail = "*****@*****.**", CustomerPhone = "+27413655888", CustomerState = "EC", CustomerZip = "6045",
            };
            var sale_details_amex_fail = new Sale_Details {
                accountID = -1, appID = -1, transactionID = -1, ExtRef = "myref" + ran.Next(), CardNumber = "374200000000004", CardExpiryMonth = 11, CardExpiryYear = 2016, CardCCV = "123", CardType = CardTypeEnum.AMERICAN_EXPRESS, Amount = 1, CurrencyCode = "ZAR", IPAddress = "192.168.1.150", CustomerFirstName = "John", CustomerLastName = "Doe", CustomerAddress = "50 Pickering", CustomerCity = "Port Elizabeth", CustomerCountry = "South Africa", CustomerCountryCodeTwoLetter = "ZA", CustomerEmail = "*****@*****.**", CustomerPhone = "+27413655888", CustomerState = "EC", CustomerZip = "6045",
            };
            var sale_details_amex_fail_expiry = new Sale_Details {
                accountID = -1, appID = -1, transactionID = -1, ExtRef = "myref" + ran.Next(), CardNumber = "370000200000000", CardExpiryMonth = 11, CardExpiryYear = 2011, CardCCV = "123", CardType = CardTypeEnum.AMERICAN_EXPRESS, Amount = 1, CurrencyCode = "ZAR", IPAddress = "192.168.1.150", CustomerFirstName = "John", CustomerLastName = "Doe", CustomerAddress = "50 Pickering", CustomerCity = "Port Elizabeth", CustomerCountry = "South Africa", CustomerCountryCodeTwoLetter = "ZA", CustomerEmail = "*****@*****.**", CustomerPhone = "+27413655888", CustomerState = "EC", CustomerZip = "6045",
            };

            var sale_details_diners_success = new Sale_Details {
                accountID = -1, appID = -1, transactionID = -1, ExtRef = "myref" + ran.Next(), CardNumber = "362135898197781", CardExpiryMonth = 11, CardExpiryYear = 2016, CardCCV = "123", CardType = CardTypeEnum.DINERS_CLUB, Amount = 1, CurrencyCode = "ZAR", IPAddress = "192.168.1.150", CustomerFirstName = "John", CustomerLastName = "Doe", CustomerAddress = "50 Pickering", CustomerCity = "Port Elizabeth", CustomerCountry = "South Africa", CustomerCountryCodeTwoLetter = "ZA", CustomerEmail = "*****@*****.**", CustomerPhone = "+27413655888", CustomerState = "EC", CustomerZip = "6045",
            };
            //mygate diners decline card does not work i.e. it approves
            //var sale_details_diners_fail = new Sale_Details { accountID = -1, customerID = -1, transactionID = -1, InvoiceNumber = "test1", CardNumber = "360569309025904", CardExpiryMonth = 11, CardExpiryYear = 2016, CardCCV = "123", CardType = CardTypeEnum.DINERS_CLUB, Amount = 1, CurrencyCode = "ZAR", CurrencyCodeNumeric = "840", IPAddress = "192.168.1.150", CustomerFirstName = "John", CustomerLastName = "Doe", CustomerAddress = "50 Pickering", CustomerCity = "Port Elizabeth", CustomerCountry = "South Africa", CustomerCountryCodeTwoLetter = "ZA", CustomerEmail = "*****@*****.**", CustomerPhone = "+27413655888", CustomerState = "EC", CustomerZip = "6045", };
            var sale_details_diners_fail_expiry = new Sale_Details {
                accountID = -1, appID = -1, transactionID = -1, ExtRef = "myref" + ran.Next(), CardNumber = "362135898197781", CardExpiryMonth = 11, CardExpiryYear = 2011, CardCCV = "123", CardType = CardTypeEnum.DINERS_CLUB, Amount = 1, CurrencyCode = "ZAR", IPAddress = "192.168.1.150", CustomerFirstName = "John", CustomerLastName = "Doe", CustomerAddress = "50 Pickering", CustomerCity = "Port Elizabeth", CustomerCountry = "South Africa", CustomerCountryCodeTwoLetter = "ZA", CustomerEmail = "*****@*****.**", CustomerPhone = "+27413655888", CustomerState = "EC", CustomerZip = "6045",
            };

            LoginTest();

            // Store Payment Method

            // Revoke Payment Method

            // 3D Secure

            // Verify Card

            // AUTH
            var auth_tr = Auth(sale_details_visa_success).testApproved("Auth");

            Auth(sale_details_visa_fail).testNotApproved("Auth");
            Auth(sale_details_visa_fail_expiry).testNotApproved("Auth");
            Auth(sale_details_master_success).testApproved("Auth");
            Auth(sale_details_master_fail).testNotApproved("Auth");
            Auth(sale_details_master_fail_expiry).testNotApproved("Auth");
            Auth(sale_details_amex_success).testApproved("Auth");
            Auth(sale_details_amex_fail).testNotApproved("Auth");
            Auth(sale_details_amex_fail_expiry).testNotApproved("Auth");
            Auth(sale_details_diners_success).testApproved("Auth");
            //Auth(sale_details_diners_fail).testNotApproved("Auth"); //-mygate diners decline card does not work i.e. it approves
            Auth(sale_details_diners_fail_expiry).testNotApproved("Auth");

            //CAPTURE
            var capture_tr = Capture(new AuthCapture_Details
            {
                Amount           = 500,
                CurrencyCode     = "ZAR",
                TransactionIndex = auth_tr.TransactionIndex
            }).testApproved("Capture");

            //SALE
            var sale_tr = Sale(sale_details_visa_success).testApproved("Sale");

            //REFUND
            Transaction_Result refund_tr = Refund(new Refund_Details
            {
                Amount           = 500,
                CurrencyCode     = "ZAR",
                TransactionIndex = sale_tr.TransactionIndex
            }).testApproved("Refund");

            //VOID
            var auth_tr_2 = Auth(sale_details_visa_success).testApproved("Auth Void");

            var void_tr = Void(new Void_Details
            {
                Amount           = 500,
                CurrencyCode     = "ZAR",
                TransactionIndex = auth_tr_2.TransactionIndex
            }).testApproved("Void");

            // Credit
            // NOT IMPLEMENTED
        }
        public Transaction_Result Sale(Sale_Details details)
        {
            Result <Customer> resCustomer = null;
            Customer          customer    = null;

            try
            {
                if (details.ProviderToken == null || details.ProviderToken.Length <= 1)
                {
                    resCustomer = createOnceOffCustomer(new Sale_Details()
                    {
                        CustomerFirstName = details.CustomerFirstName,
                        CustomerLastName  = details.CustomerLastName,
                        CardCCV           = details.CardCCV,
                        CardNumber        = details.CardNumber,
                        CardExpiryYear    = details.CardExpiryYear,
                        CardExpiryMonth   = details.CardExpiryMonth
                    });
                    if (resCustomer.Target == null)
                    {
                        return(new Transaction_Result()
                        {
                            isApproved = false,
                            ErrorText = resCustomer.Message,
                            FullResponse = new JavaScriptSerializer().Serialize(resCustomer),
                        });
                    }
                    else
                    {
                        customer = resCustomer.Target;
                    }
                }
                else
                {
                    customer = gateway.Customer.Find(details.ProviderToken);
                }
            }
            catch (NotFoundException e)
            {
                return(new Transaction_Result()
                {
                    isApproved = false,
                    ErrorText = e.Message,
                    ErrorCode = e.HResult + ""
                });
            }
            try
            {
                Result <PaymentMethodNonce> resultPMN = gateway.PaymentMethodNonce.Create("A_PAYMENT_METHOD_TOKEN");
                String nonce          = resultPMN.Target.Nonce;
                var    requestPMethod = new PaymentMethodRequest
                {
                    CustomerId         = customer.Id,
                    PaymentMethodNonce = nonce
                };

                Result <PaymentMethod> resultPM = gateway.PaymentMethod.Create(requestPMethod);
                var request = new TransactionRequest
                {
                    Amount             = details.Amount,
                    CustomerId         = customer.Id,
                    PaymentMethodToken = customer.PaymentMethods[0].Token,
                    Options            = new TransactionOptionsRequest
                    {
                        SubmitForSettlement = true,
                    }
                };

                Result <Transaction> result = gateway.Transaction.Sale(request);
                return(new Transaction_Result()
                {
                    isApproved = result.IsSuccess(),
                    TransactionIndex = result.Transaction.Id,
                    ResultText = result.Message,
                    FullResponse = new JavaScriptSerializer().Serialize(result)
                });
            }
            catch (NotFoundException e) {
                return(new Transaction_Result()
                {
                    ErrorText = e.Message,
                    isApproved = false,
                    FullResponse = new JavaScriptSerializer().Serialize(e)
                });
            }
        }