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()); }
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); } }
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); } }
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)); }