using Newtonsoft.Json; using System; using System.IO; using System.Net; using System.Reflection; using System.Security.Cryptography; namespace framework_library { public class PaygeniusClient { private string token; private string secret; private string mainEndpoint; private dynamic currentUser; public PaygeniusClient(string mainEndpoint, string secret, string token, dynamic user) { this.mainEndpoint = mainEndpoint; this.token = token; this.secret = secret; currentUser = user; } public string CreatePaymentPage(PaymentPageRequest request) { return this.Send(request); } public string GetTransaction(string transactions) { try { string fullEndpoint = this.mainEndpoint + "payment/" + transactions.ToString(); var signature = this.Sign(fullEndpoint); var httpWebRequest = (HttpWebRequest)WebRequest.Create(fullEndpoint); httpWebRequest.Accept = "application/json"; httpWebRequest.Headers["X-Token"] = token; httpWebRequest.Headers["X-Signature"] = signature; var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) { return streamReader.ReadToEnd(); } } catch (Exception ex) { exception.HandleException("PaygeniusClient:", MethodBase.GetCurrentMethod().Name, ex, currentUser); throw ex; } } public string CreateCard(RegisterCard request) { return this.Send(request); } public string Send(PaymentAbstractRequest request) { try { string data = JsonConvert.SerializeObject(request); string fullEndpoint = this.mainEndpoint + request.getEndpoint(); var nullJsonCheck = data.ToString().Replace("{", "").Replace("}", "").Trim(); var signature = this.Sign(fullEndpoint, String.IsNullOrEmpty(nullJsonCheck) ? null : data); var httpWebRequest = (HttpWebRequest)WebRequest.Create(fullEndpoint); httpWebRequest.Accept = "application/json"; httpWebRequest.Headers["X-Token"] = token; httpWebRequest.Headers["X-Signature"] = signature; if (!String.IsNullOrEmpty(nullJsonCheck)) { httpWebRequest.ContentType = "application/json"; httpWebRequest.Method = "POST"; using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream())) { streamWriter.Write(data); streamWriter.Flush(); streamWriter.Close(); } } else { httpWebRequest.Method = "GET"; } var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse(); using (var streamReader = new StreamReader(httpResponse.GetResponseStream())) { return streamReader.ReadToEnd(); } } catch (Exception ex) { exception.HandleException("PaygeniusClient:", MethodBase.GetCurrentMethod().Name, ex, currentUser); throw ex; } } public string Sign(string endpoint, string data = null) { string toSign = endpoint; if (data != null) { toSign += "\n" + data; } HMACSHA256 hmac = new HMACSHA256(System.Text.Encoding.Default.GetBytes(this.secret)); byte[] hash = hmac.ComputeHash(System.Text.Encoding.Default.GetBytes(toSign.Trim())); return ByteToString(hash); } public string ByteToString(byte[] buff) { string sbinary = ""; for (int i = 0; i < buff.Length; i++) { sbinary += buff[i].ToString("X2"); // hex format } return sbinary.ToLower(); } } }