Пример #1
0
        /// <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);
        }
Пример #2
0
        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
                });
            });
        }