Пример #1
0
        public ActionResult GenerateLink()
        {
            PaymentRequest request = new PaymentRequest()
            {
                OrderId     = Guid.NewGuid(),
                Amount      = (decimal)66.66,
                ServiceName = "Gold",
                CompanyName = "Slowpoke",
                CallbackUrl = "http://localhost:1103/api/payment/pay/",
                ReturnUrl   = "http://localhost:10127/Payment/GenerateLink",
            };

            string queryString = request.ToString();

            ICryptoProvider cryptoProvider = new SlowpokeCryptoProvider();

            string hashQS = cryptoProvider.ComputeHash(queryString, "test");

            ViewBag.orderId     = request.OrderId;
            ViewBag.amount      = request.Amount;
            ViewBag.callbackUrl = request.CallbackUrl;
            ViewBag.returnUrl   = request.ReturnUrl;
            ViewBag.companyName = request.CompanyName;
            ViewBag.serviceName = request.ServiceName;
            ViewBag.sign        = hashQS;

            return(View());
        }
Пример #2
0
        public void OnAuthentication(AuthenticationContext filterContext)
        {
            ICryptoProvider cryptoProvider = new SlowpokeCryptoProvider();

            var qsCollection = filterContext.RequestContext.HttpContext.
                               Request.QueryString;

            var receivedSign = qsCollection[cryptoProvider.SignKey];

            if (receivedSign == null)
            {
                return;
            }

            string qs = qsCollection.ToString();

            var stringToSign = qs.Remove(qs.IndexOf("&" + cryptoProvider.SignKey));

            stringToSign = HttpUtility.UrlDecode(stringToSign);

            var calculatedHash = cryptoProvider.ComputeHash(stringToSign, "test");

            if (receivedSign != calculatedHash)
            {
                filterContext.Result = new HttpUnauthorizedResult();
            }
        }
        public bool Confirm(Guid id)
        {
            string          url;
            ICryptoProvider cryptoProvider = new SlowpokeCryptoProvider();

            if (MvcApplication.CallbackUrls.TryGetValue(id, out url))
            {
                string queryString = id.ToString();
                url += queryString;
                string signQuery = cryptoProvider.ComputeHash(url, "test");

                try
                {
                    return(ConfirmMerchant(url, signQuery));
                }
                catch (Exception)
                {
                    return(false);
                }
            }
            else
            {
                return(false);
            }
        }
Пример #4
0
        public Task AuthenticateAsync(HttpAuthenticationContext context, System.Threading.CancellationToken cancellationToken)
        {
            IEnumerable <string> headers;
            ICryptoProvider      cryptoProvider = new SlowpokeCryptoProvider();

            if (context.Request.Headers.TryGetValues(cryptoProvider.SignKey, out headers))
            {
                var signReceived   = headers.First();
                var calculatedSign = cryptoProvider.ComputeHash(context.Request.RequestUri.OriginalString, "test");
            }
            else
            {
                context.ErrorResult = context.ErrorResult = new UnauthorizedResult(
                    new AuthenticationHeaderValue[0], context.Request);
            }

            return(Task.FromResult(0));
        }
        private bool ConfirmMerchant(string url, string sign)
        {
            using (var client = new HttpClient())
            {
                ICryptoProvider cryptoProvider = new SlowpokeCryptoProvider();

                client.BaseAddress = new Uri(url);
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Add(cryptoProvider.SignKey, sign);
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                ServicePointManager.ServerCertificateValidationCallback +=
                    (sender, cert, chain, sslPolicyErrors) => true;

                HttpResponseMessage response = client.GetAsync(string.Empty).Result;

                return(response.IsSuccessStatusCode);
            }
        }
Пример #6
0
        public ActionResult BuyGold(UserPaymentViewModel userPaymentViewModel)
        {
            var payment = _paymentManager.CreatePayment(User.Identity.GetUserId(), userPaymentViewModel.Amount);

            PaymentRequest paymentRequest = new PaymentRequest()
            {
                OrderId     = payment.ID,
                Amount      = payment.Amount,
                ServiceName = "Gold",
                CompanyName = "Slowpoke",
                CallbackUrl = HttpContext.Request.UrlReferrer + "api/payment/pay/",
                ReturnUrl   = HttpContext.Request.UrlReferrer.ToString(),
            };

            string paymentRequestQS = paymentRequest.ToString();

            ICryptoProvider cryptoProvider = new SlowpokeCryptoProvider();

            paymentRequest.Sign = cryptoProvider.ComputeHash(paymentRequestQS, "test");

            var redirectUrl = "http://localhost:10127/Payment/Pay?" + paymentRequest.GetFullSignedUrl();

            return(Redirect(redirectUrl));
        }