/// <summary> /// /// </summary> /// <param name="endpoint">api link address of a function</param> /// <param name="args">Add additional attributes for each exchange</param> /// <returns></returns> public override async ValueTask <IRestRequest> CreatePostRequestAsync(string endpoint, Dictionary <string, object> args = null) { var _request = await base.CreatePostRequestAsync(endpoint, args); if (IsAuthentication == true) { var _nonce = GenerateOnlyNonce(16); _request.AddParameter("nonce", _nonce); #if DEBUG Debug.WriteLine($"{this.DealerName}: nonce => '{_nonce}'"); #endif var _post_params = _request.Parameters.ToDictionary(p => p.Name, p => p.Value); var _post_data = ToQueryString(_post_params); { var _sign_nonce = Sha256Managed.ComputeHash(Encoding.UTF8.GetBytes($"{_nonce}{_post_data}")); var _sign_data = Encoding.UTF8.GetBytes(endpoint).Concat(_sign_nonce).ToArray(); var _signature = Convert.ToBase64String(Encryptor.ComputeHash(_sign_data)); _request.AddHeader("API-Key", ConnectKey); _request.AddHeader("API-Sign", _signature); } _request.AddParameter("application/x-www-form-urlencoded", _post_data, ParameterType.RequestBody); } return(await Task.FromResult(_request)); }
/// <summary> /// /// </summary> /// <param name="endpoint">api link address of a function</param> /// <param name="args">Add additional attributes for each exchange</param> /// <returns></returns> public override async Task <IRestRequest> CreateDeleteRequest(string endpoint, Dictionary <string, object> args = null) { var _request = await base.CreateDeleteRequest(endpoint, args); if (IsAuthentication == true) { var _params = new Dictionary <string, object>(); { foreach (var _param in _request.Parameters) { _params.Add(_param.Name, _param.Value); } _request.Parameters.Clear(); } var _delete_data = _params.Count > 0 ? this.SerializeObject(_params, Formatting.None) : ""; { var _method = _request.Method.ToString(); var _url = ApiUrl + endpoint; var _body = _delete_data; var _nonce = GenerateOnlyNonce(16).ToString(); var _timestamp = GenerateNonceString(13); var _json_sign = this.SerializeObject(new[] { _method, _url, _body, _nonce, _timestamp }, Formatting.None); var _sign_nonce = Sha256Managed.ComputeHash(Encoding.UTF8.GetBytes(_nonce + _json_sign)); var _sign_data = Encoding.UTF8.GetBytes(_url).Concat(_sign_nonce).ToArray(); var _signature = Convert.ToBase64String(Encryptor.ComputeHash(_sign_data)); { _request.AddHeader("Authorization", $"{ConnectKey}:{_signature}"); _request.AddHeader("X-Auth-Timestamp", _timestamp); _request.AddHeader("X-Auth-Nonce", _nonce); } _request.AddParameter(new Parameter { ContentType = "", Name = "application/json", Type = ParameterType.RequestBody, Value = _delete_data }); } } return(await Task.FromResult(_request)); }
/// <summary> /// /// </summary> /// <param name="endpoint">api link address of a function</param> /// <param name="args">Add additional attributes for each exchange</param> /// <returns></returns> public override async ValueTask <IRestRequest> CreateGetRequestAsync(string endpoint, Dictionary <string, object> args = null) { var _request = await base.CreateGetRequestAsync(endpoint, args); if (IsAuthentication == true) { var _post_params = _request.Parameters.ToDictionary(p => p.Name, p => p.Value); var _post_data = ToQueryString(_post_params); { var _query = _post_data.Length > 0 ? "?" + _post_data : ""; var _method = _request.Method.ToString(); var _url = ApiUrl + endpoint + _query; var _body = ""; var _nonce = GenerateOnlyNonce(16).ToString(); var _timestamp = GenerateNonceString(13); var _json_sign = this.SerializeObject(new[] { _method, _url, _body, _nonce, _timestamp }, Formatting.None); var _sign_nonce = Sha256Managed.ComputeHash(Encoding.UTF8.GetBytes(_nonce + _json_sign)); var _sign_data = Encoding.UTF8.GetBytes(_url).Concat(_sign_nonce).ToArray(); var _signature = Convert.ToBase64String(Encryptor.ComputeHash(_sign_data)); { _request.AddHeader("Authorization", $"{ConnectKey}:{_signature}"); _request.AddHeader("X-Auth-Timestamp", _timestamp); _request.AddHeader("X-Auth-Nonce", _nonce); } } } return(await Task.FromResult(_request)); }