/// <summary> /// Metodo responsavel por realizar acessar os metodos privados na API do /// Mercado Bitcoin /// </summary> /// <param name="pMethod">Funcionalidade que deseja acessar da API</param> /// <param name="pParameters">paramentros a serem incorporados ao parametros default</param> /// <returns></returns> internal string getRequestPrivate(MBEnumerables.MethodAPI pMethod, string pParameters) { string _sign = string.Empty; byte[] _body = null; string _return = string.Empty; string _MB_TAPI_ID = this._publicKey; try { this._error = ""; //Criando o bind dos parâmentros que serão passados para o API //e convertendo em ByteArray para populado no corpo do Request //para o Server string _paramenterText = bindParmeters(pMethod, pParameters); _body = Encoding.UTF8.GetBytes(_paramenterText); //Chamando função que criptografará os parâmentros a serem enviados _sign = cripParametersSign(_paramenterText); //Criando Metodo de Request para o Servidor do Mercado Bitcoin WebRequest request = null; request = WebRequest.Create(_REQUEST_HOST + _REQUEST_PATH); request.Method = "POST"; request.Headers.Add("tapi-id", _MB_TAPI_ID); request.Headers.Add("tapi-mac", _sign); request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = _body.Length; request.Timeout = 360000; //Escrevendo parâmentros no corpo do Request para serem enviados a API Stream _req = request.GetRequestStream(); _req.Write(_body, 0, _body.Length); _req.Close(); //Pegando retorno do servidor HttpWebResponse response = (HttpWebResponse)request.GetResponse(); Stream dataStream = response.GetResponseStream(); //Convertendo Stream de retorno em texto para //Texto de retorno será um JSON using (StreamReader reader = new StreamReader(dataStream)) _return = reader.ReadToEnd(); //Liberando objetos para o Coletor de Lixo dataStream.Close(); dataStream.Dispose(); response.Close(); response.Dispose(); } catch (Exception ex) { this._error = ex.Message; _return = ""; } return(_return); }
/// <summary> /// Overload do Metodo getRequestPrivate sem a necessidade dos parametros customizados /// </summary> /// <param name="pMethod"></param> /// <returns></returns> internal string getRequestPrivate(MBEnumerables.MethodAPI pMethod) { return(getRequestPrivate(pMethod, "")); }
/// <summary> /// Metodo responsavel por montar os parâmetros que seram enviados ao servidor /// via POST /// </summary> /// <param name="pMethod">Função que deseja acessar na API</param> /// <param name="pParameters">Parametros a serem incorporado nos paramentro /// montado pela função bind</param> /// <returns>Paramtros no formato a serem evniados para a API do MercadoBitcoin</returns> private string bindParmeters(MBEnumerables.MethodAPI pMethod, string pParameters) { string _parameters = string.Empty; string _method = string.Empty; string _time; string _bodyText = string.Empty; try { switch (pMethod) { case MBEnumerables.MethodAPI.GetInfo: _method = "get_account_info"; break; case MBEnumerables.MethodAPI.ListOrderBook: _method = "list_orderbook"; break; case MBEnumerables.MethodAPI.OrderList: _method = "list_orders"; break; case MBEnumerables.MethodAPI.Buy: _method = "place_buy_order"; break; case MBEnumerables.MethodAPI.Sell: _method = "place_sell_order"; break; case MBEnumerables.MethodAPI.Market_Buy: _method = "place_market_buy_order"; break; case MBEnumerables.MethodAPI.Market_Sell: _method = "place_market_sell_order"; break; case MBEnumerables.MethodAPI.CancelOrder: _method = "cancel_order"; break; case MBEnumerables.MethodAPI.MyOrders: _method = "get_order"; break; } //Calcula a hora que está sendo feito o post para ser validado //no servidor da API do Mercado Bitcoin para não ter TimeSpan _t = (DateTime.UtcNow - new DateTime(1970, 1, 1)); _time = Convert.ToString((int)_t.TotalSeconds); _bodyText = "tapi_method={0}&tapi_nonce={1}{2}"; _bodyText = string.Format(_bodyText, _method, _time, pParameters); _parameters = _bodyText; } catch (Exception ex) { throw new Exception(ex.Message, ex); } return(_parameters); }