protected override Task ProcessRequestAsync(IHttpWebRequest request, Dictionary <string, object> payload) { if (CanMakeAuthenticatedRequest(payload)) { payload.Remove("nonce"); //var bodyPayload = payload.Where(_ => _.Key.StartsWith("body.")).ToDictionary(_ => _.Key.Substring(5),_=>_.Value); //var headerPayload = payload.Where(_ => !_.Key.StartsWith("body.")).ToDictionary(_ => _.Key, _ => _.Value); //foreach (var item in headerPayload) //{ // request.AddHeader(item.Key, item.Value.ToString()); //} //if (request.Method == "POST" && bodyPayload.Count()>0) if (request.Method == "POST") { //var query = CryptoUtility.GetFormForPayload(bodyPayload); payload["key"] = PublicApiKey.ToUnsecureString(); payload["timestamp"] = (Int64)DateTime.UtcNow.UnixTimestampFromDateTimeMilliseconds(); var msg = string.Join("&", payload.Where(_ => !string.IsNullOrEmpty(payload[_.Key].ToString())) .OrderBy(_ => _.Key) .Select(_ => string.Format("{0}={1}", _.Key.UrlEncode(), _.Value.ToStringInvariant().UrlEncode())) ); payload["sign"] = CryptoUtility.SHA256Sign(msg, PrivateApiKey.ToUnsecureString()); var form = request.WritePayloadJsonToRequestAsync(payload).Result; } } return(base.ProcessRequestAsync(request, payload)); }
protected override async Task ProcessRequestAsync(IHttpWebRequest request, Dictionary <string, object> payload) { if (!CanMakeAuthenticatedRequest(payload)) { return; } // We don't need nonce in the request. Using it only to not break CanMakeAuthenticatedRequest. payload.Remove("nonce"); var method = request.Method; var now = DateTime.Now; var timeStamp = TimeZoneInfo.ConvertTimeToUtc(now).ToString("yyyy-MM-ddTHH:mm:ss.fffZ"); var requestUrl = request.RequestUri.PathAndQuery; var body = payload.Any() ? JsonConvert.SerializeObject(payload) : string.Empty; var sign = string.IsNullOrEmpty(body) ? CryptoUtility.SHA256SignBase64($"{timeStamp}{method}{requestUrl}", PrivateApiKey !.ToUnsecureString().ToBytesUTF8()) : CryptoUtility.SHA256SignBase64($"{timeStamp}{method}{requestUrl}{body}", PrivateApiKey !.ToUnsecureString().ToBytesUTF8()); request.AddHeader("OK-ACCESS-KEY", PublicApiKey !.ToUnsecureString()); request.AddHeader("OK-ACCESS-SIGN", sign); request.AddHeader("OK-ACCESS-TIMESTAMP", timeStamp); request.AddHeader("OK-ACCESS-PASSPHRASE", Passphrase !.ToUnsecureString()); request.AddHeader("x-simulated-trading", "0"); request.AddHeader("content-type", "application/json"); if (request.Method == "POST") { await request.WritePayloadJsonToRequestAsync(payload); } }
protected override async Task ProcessRequestAsync(IHttpWebRequest request, Dictionary <string, object> payload) { if (CanMakeAuthenticatedRequest(payload)) { // convert nonce to long, trim off milliseconds var nonce = payload["nonce"].ConvertInvariant <long>(); payload.Remove("nonce"); var stringToCommit = String.Empty; if (request.Method == "POST") { var msg = CryptoUtility.GetJsonForPayload(payload); stringToCommit = $"{nonce}{msg}"; await request.WritePayloadJsonToRequestAsync(payload); } else if (request.Method == "GET") { stringToCommit = $"{nonce}{request.RequestUri.PathAndQuery}"; } else { throw new APIException($"BitBank does not support {request.Method} as its HTTP method!"); } string signature = CryptoUtility.SHA256Sign(stringToCommit, CryptoUtility.ToUnsecureBytesUTF8(PrivateApiKey)); request.AddHeader("ACCESS-NONCE", nonce.ToStringInvariant()); request.AddHeader("ACCESS-KEY", PublicApiKey.ToUnsecureString()); request.AddHeader("ACCESS-SIGNATURE", signature); } return; }
protected override async Task ProcessRequestAsync(IHttpWebRequest request, Dictionary <string, object> payload) { if (PrivateApiKey != null && PublicApiKey != null) { request.AddHeader("Authorization", CryptoUtility.BasicAuthenticationString(PublicApiKey.ToUnsecureString(), PrivateApiKey.ToUnsecureString())); } if (CanMakeAuthenticatedRequest(payload)) { request.AddHeader("apToken", authenticationDetails.Token); payload.Add("OMSId", authenticationDetails.OMSId); payload.Add("AccountId", authenticationDetails.AccountId); } if (request.Method == "POST") { await request.WritePayloadJsonToRequestAsync(payload); } }