/// <summary> /// Get Quote for Crypto Currency /// </summary> /// <param name="pairingId"></param> /// <param name="dt">Date/Time, if not specified will be yesterday's rate</param> /// <param name="cache">Whether to use Cache</param> /// <returns></returns> public static dynamic GetQuote(Currency c, DateTime?dt = null, bool cache = true) { if (dt == null) { dt = DateTime.Now.AddDays(-1); } var day = dt.Value.ToString("yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture); var key = c.ToString() + "history-" + day; var cached = MemoryCache.Default.Get(key); if (cached != null && cache == true) { return(cached); } dynamic timeseries = BitCoinModule.BxApiCall(null, Method.GET, "/api/tradehistory/", new { pairing = (int)c, date = day }); MemoryCache.Default.Add(key, timeseries, DateTimeOffset.Now.Date.AddDays(1)); return(timeseries); }
public BitCoinModule() { Get["/__commerce/btcquote"] = this.HandleRequest((arg) => { return(BitCoinModule.GetQuote(Currency.BTC)); }); Get["/__commerce/cryptoquote"] = this.HandleRequest((arg) => { return(new { OMG = BitCoinModule.GetQuote(Currency.OMG).data.low, BTC = BitCoinModule.GetQuote(Currency.BTC).data.low, ETH = BitCoinModule.GetQuote(Currency.ETH).data.low }); }); // hard code address for now var address = new Dictionary <string, string>(); address["BTC"] = "3Bw7NgmqKwK6VDNuNa8begVwHm6TA7daa9"; address["ETH"] = "0x64d91c1CE4528efFA8F2Aed1334b0A44434c6956"; address["OMG"] = "0x64d91c1CE4528efFA8F2Aed1334b0A44434c6956"; Get["/__commerce/{so_id}/cryptodeposit/{currency}"] = this.HandleRequest((arg) => { int soId = 0; var id = (string)arg.so_id; SaleOrder so = null; if (int.TryParse(id, out soId)) { so = this.SiteDatabase.GetById <SaleOrder>(soId); } else { so = this.SiteDatabase.Query <SaleOrder>() .Where(row => row.SaleOrderIdentifier == id) .FirstOrDefault(); } if (so == null) { return(404); } var currency = (Currency)Enum.Parse(typeof(Currency), (string)arg.currency); var timeseries = BitCoinModule.GetQuote(currency); //string address = this.BxApiCall(Method.POST, "/api/deposit/", // new { currency = currency.ToString() }) // .Property("address").Value.ToString(); //BX charge 20THB + 10THB per 10,000 var bxcharge = 20M; bxcharge = bxcharge + (so.TotalAmount / 10000) * 10; var amount = Math.Round((so.TotalAmount - so.PaymentFee + bxcharge) * (1 / (decimal)timeseries.data.low), 4); string url = string.Empty; if (currency == Currency.BTC) { url = "bitcoin:" + address[currency.ToString()] + "?amount=" + amount + "%26label=" + Uri.EscapeDataString((string)this.CurrentSite.commerce.billing.name) + "%26message=" + Uri.EscapeDataString("Payment for " + so.SaleOrderIdentifier); } else { url = address[currency.ToString()]; } return(new { address = address[currency.ToString()], amount = amount, qrcode = "https://chart.googleapis.com/chart?chs=225x225&chld=L|2&cht=qr&chl=" + url }); }); }