Example #1
0
        public async Task OnGetAsync()
        {
            if (User.Identity.IsAuthenticated)
            {
                CoinbaseName   = User.FindFirst(c => c.Type == ClaimTypes.Name)?.Value;
                CoinbaseId     = User.FindFirst(c => c.Type == ClaimTypes.NameIdentifier)?.Value;
                CoinbaseAvatar = User.FindFirst(c => c.Type == "urn:coinbase:avatar")?.Value;

                try
                {
                    var accessToken = await HttpContext.GetTokenAsync("access_token");

                    var coinbaseApi = new CoinbaseApi(accessToken);
                    var accounts    = coinbaseApi.GetAccounts();
                    this.AccountDetails = accounts.Select(account => new AccountDetail
                    {
                        Account   = account,
                        Addresses = coinbaseApi.GetAddresses(account)
                    }).ToList();
                }
                catch (TokenExpiredException)
                {
                    await HttpContext.SignOutAsync();
                }
            }
        }
        public void create_refund_test()
        {
            // arrange
            var api = new CoinbaseApi(apiKey: ApiKey, apiSecret: ApiSecretKey, useSandbox:true, proxy: proxy);

            var refundOptions = new RefundOptions
                {
                    RefundIsoCurrency = Currency.BTC,

                    //By default, refunds will be issued to the refund_address
                    //that is set on the order.
                    //Additionally, if you want to send the refund to a different
                    //bitcoin address other than the one that was in the original order
                    //set ExteranlRefundAddress property.
                    //OPTIONAL:
                    ExternalRefundAddress = "BITCOIN_REFUND_ADDRESS"
                };

            var orderIdToRefund = "COINBASE_ORDER_ID";

            // act
            var refundResult = api.Refund(orderIdToRefund, refundOptions);

            if(refundResult.Success)
            {
                //The refund was successful
                var refundTxn = refundResult.Order.RefundTransaction;
            }

            // assert
            refundResult.Should().NotBeNull();
        }
Example #3
0
        public void can_list_orders()
        {
            var api = new CoinbaseApi(ApiKey, ApiSecretKey, useSandbox: true, proxy: proxy, useTimeApi: true);

            var response = api.SendRequest("orders", null, Method.GET);

            response.Dump();
        }
        public void create_order_test()
        {
            var json =
                @"{""success"":true,""button"":{""code"":""d4d26483141bec5f551d4d8822fab6fa"",""type"":""buy_now"",""subscription?"":false,""repeat"":null,""style"":""custom_large"",""text"":""Pay With Bitcoin"",""name"":""Order Name"",""description"":""Order Description"",""custom"":""Custom_Order_Id"",""callback_url"":""http://www.bitarmory.com/callback"",""success_url"":""http://www.bitarmory.com/success"",""cancel_url"":""http://www.bitarmory.com/cancel"",""info_url"":""http://www.bitarmory.com/info"",""auto_redirect"":false,""auto_redirect_success"":false,""auto_redirect_cancel"":false,""price"":{""cents"":7999.0,""currency_iso"":""USD""},""variable_price"":false,""choose_price"":false,""include_address"":false,""include_email"":false}}";

            var b = JsonConvert.DeserializeObject<ButtonResponse>(json);
            var api = new CoinbaseApi();

            var o = api.CreateOrder(b);
            o.Should().NotBeNull();
        }
Example #5
0
        public CoinbaseApiTests()
        {
            AppSettings.WalletSettings = new WalletSettings
            {
                Endpoint = "https://api.coinbase.com/v2/",
                Token    = "12345",
                Secret   = "Secret"
            };

            _api = new CoinbaseApi(AppSettings.WalletSettings);
        }
    protected override string generate(string itemName, Money amount, string command, object[] args)
    {
        CoinbaseApi api = new CoinbaseApi(AppSettings.Cryptocurrencies.CoinbaseAPIKey, AppSettings.Cryptocurrencies.CoinbaseAPISecret, false);

        string description = String.Join(ArgsDelimeter + "", args);

        string AmountString = amount.ToClearString();
        string CurrencyCode = AppSettings.Site.CurrencyCode;

        if (amount is CryptocurrencyMoney)
        {
            //We have direct BTC -> BTC Wallet transfer
            AmountString = ((CryptocurrencyMoney)amount).ToClearString();
            CurrencyCode = ((CryptocurrencyMoney)amount).cryptocurrencyType.ToString();
        }

        var options = new
        {
            amount                  = AmountString,
            currency                = CurrencyCode,
            name                    = itemName,
            description             = command,
            customer_defined_amount = false,
            success_url             = SUCCESS_URL,
            cancel_url              = FAILURE_URL,
            //notifications_url = AppSettings.Site.Url + "Handlers/Bitcoins/Coinbase.ashx",
            collect_email   = false,
            collect_country = false,
            metadata        = new { all = description }
        };

        string data = string.Empty;

        try
        {
            var request = api.SendRequest(String.Format("/checkouts"),
                                          options, RestSharp.Method.POST);

            if (request.Errors != null)
            {
                ErrorLogger.Log(request.Errors[0].Message);
                return(String.Empty);
            }

            data = request.Data["embed_code"].ToString();
        }
        catch (Exception ex)
        {
            ErrorLogger.Log(ex);
        }

        return(data);
    }
        public void create_order_test()
        {
            var json =
                @"{""success"":true,""button"":{""code"":""d4d26483141bec5f551d4d8822fab6fa"",""type"":""buy_now"",""subscription?"":false,""repeat"":null,""style"":""custom_large"",""text"":""Pay With Bitcoin"",""name"":""Order Name"",""description"":""Order Description"",""custom"":""Custom_Order_Id"",""callback_url"":""http://www.bitarmory.com/callback"",""success_url"":""http://www.bitarmory.com/success"",""cancel_url"":""http://www.bitarmory.com/cancel"",""info_url"":""http://www.bitarmory.com/info"",""auto_redirect"":false,""auto_redirect_success"":false,""auto_redirect_cancel"":false,""price"":{""cents"":7999.0,""currency_iso"":""USD""},""variable_price"":false,""choose_price"":false,""include_address"":false,""include_email"":false}}";

            var b   = JsonConvert.DeserializeObject <ButtonResponse>(json);
            var api = new CoinbaseApi();

            var o = api.CreateOrder(b);

            o.Should().NotBeNull();
        }
    public override void TryWithDrawCryptocurrencyFromWallet(decimal amountInCryptocurrency, string userAddress, CryptocurrencyType cryptocurrencyType)
    {
        CoinbaseApi api     = new CoinbaseApi(AppSettings.Cryptocurrencies.CoinbaseAPIKey, AppSettings.Cryptocurrencies.CoinbaseAPISecret, false);
        var         options = new { type = "send", to = userAddress, amount = amountInCryptocurrency, currency = cryptocurrencyType.ToString() };

        var response = api.SendRequest(String.Format("/accounts/{0}/transactions", GetAccountId(api)),
                                       options, RestSharp.Method.POST);

        if (response.Errors != null)
        {
            throw new MsgException(response.Errors[0].Message);
        }
    }
Example #9
0
        public void refund_example()
        {
            var api = new CoinbaseApi(ApiKey, ApiSecretKey, useSandbox: true, proxy: proxy, useTimeApi: true);

            var options = new
            {
                currency = "BTC"
            };

            var orderId = "ORDER_ID_HERE";

            var response = api.SendRequest($"/orders/{orderId}/refund", options);
            //process response as needed
        }
        public void refund_example()
        {
            var api = new CoinbaseApi(ApiKey, ApiSecretKey, useSandbox: true, proxy: proxy, useTimeApi: true);

            var options = new
                {
                    currency = "BTC"
                };

            var orderId = "ORDER_ID_HERE";

            var response = api.SendRequest($"/orders/{orderId}/refund", options);
            //process response as needed
        }
Example #11
0
        public void ConstructorTests()
        {
            var api = new CoinbaseApi( "0CCAA858-2625-4652-A781-9BF48A3E7635", "7DC36573-3C21-4783-AC17-1687AFAFB8C9", useSandbox: false, proxy: null );

            api.apiKey.Should().Be( "0CCAA858-2625-4652-A781-9BF48A3E7635" );
            api.apiSecret.Should().Be( "7DC36573-3C21-4783-AC17-1687AFAFB8C9" );

            api.apiUrl.Should().Be( CoinbaseConstants.LiveApiUrl );
            api.apiCheckoutUrl.Should().Be(CoinbaseConstants.LiveCheckoutUrl);

            var api2 = new CoinbaseApi("0CCAA858-2625-4652-A781-9BF48A3E7635", "7DC36573-3C21-4783-AC17-1687AFAFB8C9", useSandbox: true, proxy: null);

            api2.apiUrl.Should().Be(CoinbaseConstants.TestApiUrl);
            api2.apiCheckoutUrl.Should().Be(CoinbaseConstants.TestCheckoutUrl);
        }
Example #12
0
        public async Task <TransactionReciept> SendMoney(string accountId, string toAddress, Currency currency,
                                                         double amount = .001, string twoFactor = "", string description = "", string idem = "")
        {
            try
            {
                var accessToken = await HttpContext.GetTokenAsync("access_token");

                var coinbaseApi = new CoinbaseApi(accessToken);
                return(coinbaseApi.SendCurrency(accountId, amount, toAddress, currency, description, twoFactor, idem));
            }
            catch (Transaction2FaRequiredException)
            {
                return(null);
            }
        }
Example #13
0
        public void ConstructorTests()
        {
            var api = new CoinbaseApi("0CCAA858-2625-4652-A781-9BF48A3E7635", "7DC36573-3C21-4783-AC17-1687AFAFB8C9", useSandbox: false, proxy: null);

            api.apiKey.Should().Be("0CCAA858-2625-4652-A781-9BF48A3E7635");
            api.apiSecret.Should().Be("7DC36573-3C21-4783-AC17-1687AFAFB8C9");

            api.apiUrl.Should().Be(CoinbaseConstants.LiveApiUrl);
            api.apiCheckoutUrl.Should().Be(CoinbaseConstants.LiveCheckoutUrl);

            var api2 = new CoinbaseApi("0CCAA858-2625-4652-A781-9BF48A3E7635", "7DC36573-3C21-4783-AC17-1687AFAFB8C9", useSandbox: true, proxy: null);

            api2.apiUrl.Should().Be(CoinbaseConstants.TestApiUrl);
            api2.apiCheckoutUrl.Should().Be(CoinbaseConstants.TestCheckoutUrl);
        }
Example #14
0
        public void test_callback_verification()
        {
            var json = @"{""order"":{""id"":null,""uuid"":""54b2d0f8-2bb8-5771-b330-9366ac079d60"",""resource_path"":""/v2/orders/54b2d0f8-2bb8-5771-b330-9366ac079d60"",""metadata"":null,""created_at"":null,""status"":""completed"",""event"":null,""total_btc"":{""cents"":100000000.0,""currency_iso"":""BTC""},""total_native"":{""cents"":1000000.0,""currency_iso"":""USD""},""total_payout"":{""cents"":1000000.0,""currency_iso"":""USD""},""custom"":""123456789"",""receive_address"":""mpAWHN5o3PtqQbu2WFsGgwx6Zep9pHoMyp"",""button"":{""type"":""buy_now"",""subscription"":false,""repeat"":null,""name"":""Test Item"",""description"":null,""id"":null,""uuid"":""ad92ae20-be4b-523d-aac6-6ff14ac2cc21"",""resource_path"":""/v2/checkouts/ad92ae20-be4b-523d-aac6-6ff14ac2cc21""},""transaction"":{""id"":""566656b6804ce90001003b2a"",""hash"":""4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b"",""confirmations"":0}}}";

            //X-Signature: qj7s3QLVlzkqrJdvH556ZvoM2dgeEwpXzkF0YPN4AR9GKL/F9kLcBmUarapMBAE5ef/QDcxN3ta8dBaTC1KYz+04+SriqvnuZzC3EXX5ksvxpN+i+6JjPIKsU63l1bk+t7GQvKeEGrq3/Al1OklVj9IMUnK5Sz59eUIByWgWBtVS0U+zI7ijwOoSZxkcAdY7l+EWa4t/W8gOChtA/2vdSgqtAVW/GcUMZ1ZFsH1U/EJIsY5Xw4dAbwtavIvABBBlmUTWUvj5Wubp7MaIptFfAL6fU1YwmbnsaKn6L+c4fTNsbOLCLYY7Czb4Um0MQ+A2/w1Ldwv2L9ie1b956y3lnbU/8qn6q0AU3FYOgepwmvoNRaca/ZXVniVZsY3PSX/zHf3WCjDh+jvAO6vneVpBlNNIyJjgGNzGdQzxzOhXJu5cFXJa1zXcPgELHtFSE2raG0tIdgwlgJwiYCls77R+3iMMv8CPat3a/GQ61Cax0Gsi80NaiavCgWjpMbXYRZvNP3DdUNVOvucIrtSWydq6bccQTamLCMpQ8fjB2zGcDglIl0I+W/6gtY1MflZ+ZmUySgEEww4PXlySYivvFwc/jpcptQ2vLXNjMZQmf9kbiRBe8PT/tpPUchUxNYzADDpSWeqBid0Jm7Um8G8zLwtBo5R1hHME9Gd/v3DOUk5sMzk=
            var signature =
                "qj7s3QLVlzkqrJdvH556ZvoM2dgeEwpXzkF0YPN4AR9GKL/F9kLcBmUarapMBAE5ef/QDcxN3ta8dBaTC1KYz+04+SriqvnuZzC3EXX5ksvxpN+i+6JjPIKsU63l1bk+t7GQvKeEGrq3/Al1OklVj9IMUnK5Sz59eUIByWgWBtVS0U+zI7ijwOoSZxkcAdY7l+EWa4t/W8gOChtA/2vdSgqtAVW/GcUMZ1ZFsH1U/EJIsY5Xw4dAbwtavIvABBBlmUTWUvj5Wubp7MaIptFfAL6fU1YwmbnsaKn6L+c4fTNsbOLCLYY7Czb4Um0MQ+A2/w1Ldwv2L9ie1b956y3lnbU/8qn6q0AU3FYOgepwmvoNRaca/ZXVniVZsY3PSX/zHf3WCjDh+jvAO6vneVpBlNNIyJjgGNzGdQzxzOhXJu5cFXJa1zXcPgELHtFSE2raG0tIdgwlgJwiYCls77R+3iMMv8CPat3a/GQ61Cax0Gsi80NaiavCgWjpMbXYRZvNP3DdUNVOvucIrtSWydq6bccQTamLCMpQ8fjB2zGcDglIl0I+W/6gtY1MflZ+ZmUySgEEww4PXlySYivvFwc/jpcptQ2vLXNjMZQmf9kbiRBe8PT/tpPUchUxNYzADDpSWeqBid0Jm7Um8G8zLwtBo5R1hHME9Gd/v3DOUk5sMzk=";

            var api = new CoinbaseApi(ApiKey, ApiSecretKey, useSandbox: true, proxy: proxy, useTimeApi: true);

            var note = JsonConvert.DeserializeObject <Notification>(json, api.JsonSettings);

            //            note.IsVerified.Should().BeFalse();
            note.IsVerified.Should().BeFalse();

            //api.VerifyNotification(json, signature)
            //    .Should().BeTrue();
        }
    public override Money GetAccountBalance()
    {
        try
        {
            CoinbaseApi api = new CoinbaseApi(AppSettings.Cryptocurrencies.CoinbaseAPIKey, AppSettings.Cryptocurrencies.CoinbaseAPISecret, false);

            var accounts = api.SendRequest("/accounts", null, RestSharp.Method.GET);

            var account = accounts.Data.First(acc => acc["currency"].ToString() == "BTC");
            var balance = account["balance"];
            var amount  = balance["amount"].ToString();

            return(new Money(Convert.ToDecimal(amount)));
        }
        catch (Exception ex)
        {
            return(Money.Zero);
        }
    }
        public void test_callback_verification()
        {
            var json = @"{""order"":{""id"":null,""uuid"":""54b2d0f8-2bb8-5771-b330-9366ac079d60"",""resource_path"":""/v2/orders/54b2d0f8-2bb8-5771-b330-9366ac079d60"",""metadata"":null,""created_at"":null,""status"":""completed"",""event"":null,""total_btc"":{""cents"":100000000.0,""currency_iso"":""BTC""},""total_native"":{""cents"":1000000.0,""currency_iso"":""USD""},""total_payout"":{""cents"":1000000.0,""currency_iso"":""USD""},""custom"":""123456789"",""receive_address"":""mpAWHN5o3PtqQbu2WFsGgwx6Zep9pHoMyp"",""button"":{""type"":""buy_now"",""subscription"":false,""repeat"":null,""name"":""Test Item"",""description"":null,""id"":null,""uuid"":""ad92ae20-be4b-523d-aac6-6ff14ac2cc21"",""resource_path"":""/v2/checkouts/ad92ae20-be4b-523d-aac6-6ff14ac2cc21""},""transaction"":{""id"":""566656b6804ce90001003b2a"",""hash"":""4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b"",""confirmations"":0}}}";

            //X-Signature: qj7s3QLVlzkqrJdvH556ZvoM2dgeEwpXzkF0YPN4AR9GKL/F9kLcBmUarapMBAE5ef/QDcxN3ta8dBaTC1KYz+04+SriqvnuZzC3EXX5ksvxpN+i+6JjPIKsU63l1bk+t7GQvKeEGrq3/Al1OklVj9IMUnK5Sz59eUIByWgWBtVS0U+zI7ijwOoSZxkcAdY7l+EWa4t/W8gOChtA/2vdSgqtAVW/GcUMZ1ZFsH1U/EJIsY5Xw4dAbwtavIvABBBlmUTWUvj5Wubp7MaIptFfAL6fU1YwmbnsaKn6L+c4fTNsbOLCLYY7Czb4Um0MQ+A2/w1Ldwv2L9ie1b956y3lnbU/8qn6q0AU3FYOgepwmvoNRaca/ZXVniVZsY3PSX/zHf3WCjDh+jvAO6vneVpBlNNIyJjgGNzGdQzxzOhXJu5cFXJa1zXcPgELHtFSE2raG0tIdgwlgJwiYCls77R+3iMMv8CPat3a/GQ61Cax0Gsi80NaiavCgWjpMbXYRZvNP3DdUNVOvucIrtSWydq6bccQTamLCMpQ8fjB2zGcDglIl0I+W/6gtY1MflZ+ZmUySgEEww4PXlySYivvFwc/jpcptQ2vLXNjMZQmf9kbiRBe8PT/tpPUchUxNYzADDpSWeqBid0Jm7Um8G8zLwtBo5R1hHME9Gd/v3DOUk5sMzk=
            var signature =
                "qj7s3QLVlzkqrJdvH556ZvoM2dgeEwpXzkF0YPN4AR9GKL/F9kLcBmUarapMBAE5ef/QDcxN3ta8dBaTC1KYz+04+SriqvnuZzC3EXX5ksvxpN+i+6JjPIKsU63l1bk+t7GQvKeEGrq3/Al1OklVj9IMUnK5Sz59eUIByWgWBtVS0U+zI7ijwOoSZxkcAdY7l+EWa4t/W8gOChtA/2vdSgqtAVW/GcUMZ1ZFsH1U/EJIsY5Xw4dAbwtavIvABBBlmUTWUvj5Wubp7MaIptFfAL6fU1YwmbnsaKn6L+c4fTNsbOLCLYY7Czb4Um0MQ+A2/w1Ldwv2L9ie1b956y3lnbU/8qn6q0AU3FYOgepwmvoNRaca/ZXVniVZsY3PSX/zHf3WCjDh+jvAO6vneVpBlNNIyJjgGNzGdQzxzOhXJu5cFXJa1zXcPgELHtFSE2raG0tIdgwlgJwiYCls77R+3iMMv8CPat3a/GQ61Cax0Gsi80NaiavCgWjpMbXYRZvNP3DdUNVOvucIrtSWydq6bccQTamLCMpQ8fjB2zGcDglIl0I+W/6gtY1MflZ+ZmUySgEEww4PXlySYivvFwc/jpcptQ2vLXNjMZQmf9kbiRBe8PT/tpPUchUxNYzADDpSWeqBid0Jm7Um8G8zLwtBo5R1hHME9Gd/v3DOUk5sMzk=";

            var api = new CoinbaseApi(ApiKey, ApiSecretKey, useSandbox: true, proxy: proxy, useTimeApi: true);

            var note = JsonConvert.DeserializeObject<Notification>(json, api.JsonSettings);

            //            note.IsVerified.Should().BeFalse();
            note.UnverifiedOrder.Should().NotBeNull();
            
            //api.VerifyNotification(json, signature)
            //    .Should().BeTrue();

        }
Example #17
0
        public void get_order_test()
        {
            // arrange
            var api = new CoinbaseApi(apiKey: ApiKey, apiSecret: ApiSecretKey, useSandbox: true, proxy: proxy);

            // act
            var orderResult = api.GetOrder("ORDER_ID_OR_CUSTOM");

            if (orderResult.Error != null)
            {
                //Some Error
            }
            else if (orderResult.Order.Status == Status.Completed)
            {
                //The request was successful
                var orderTxn = orderResult.Order;
            }

            // assert
            orderResult.Order.Should().NotBeNull();
        }
    public override string CreateNewAddress(int userId)
    {
        CoinbaseApi api = new CoinbaseApi(AppSettings.Cryptocurrencies.CoinbaseAPIKey, AppSettings.Cryptocurrencies.CoinbaseAPISecret, false);

        var    options      = new { name = DateTime.Now.ToString() };
        string adminAddress = string.Empty;

        try
        {
            var request = api.SendRequest(String.Format("/accounts/{0}/addresses", GetAccountId(api)),
                                          options, RestSharp.Method.POST);

            if (request.Errors != null)
            {
                ErrorLogger.Log(request.Errors[0].Message, LogType.Coinbase);
                return(adminAddress);
            }

            adminAddress = request.Data["address"].ToString();

            if (!string.IsNullOrWhiteSpace(adminAddress))
            {
                string         query   = string.Format("SELECT * FROM BitcoinAddresses WHERE UserId = {0}", userId);
                BitcoinAddress address = TableHelper.GetListFromRawQuery <BitcoinAddress>(query).FirstOrDefault();
                if (address == null)
                {
                    address        = new BitcoinAddress();
                    address.UserId = userId;
                }
                address.CoinbaseAddress = adminAddress;
                address.Save();
            }
        }
        catch (Exception ex)
        {
            ErrorLogger.Log(ex);
        }

        return(adminAddress);
    }
Example #19
0
        public void create_customer_checkout()
        {
            var api = new CoinbaseApi(ApiKey, ApiSecretKey, useSandbox: true, proxy: proxy, useTimeApi: true);

            var purchaseId = Guid.NewGuid().ToString("n");

            var request = new CheckoutRequest
            {
                Amount   = 10.00m,
                Currency = "USD",
                Name     = "Test Order",
                Metadata =
                {
                    { "purchaseId", purchaseId }
                },
                NotificationsUrl = ""
            };

            request.Dump();

            var checkout = api.CreateCheckout(request);

            checkout.Dump();
            if (checkout.Errors?.Length == 0)
            {
                var redirectUrl = api.GetCheckoutUrl(checkout);
                //do redirect with redirectUrl
            }
            else
            {
                //Error making checkout page.
            }

            var checkoutUrl = api.GetCheckoutUrl(checkout);

            checkoutUrl.Should().StartWith("https://sandbox.coinbase.com/checkouts");
        }
        public void create_customer_checkout()
        {
            var api = new CoinbaseApi(ApiKey, ApiSecretKey, useSandbox: true, proxy: proxy, useTimeApi: true);

            var purchaseId = Guid.NewGuid().ToString("n");

            var request = new CheckoutRequest
                {
                    Amount = 10.00m,
                    Currency = "USD",
                    Name = "Test Order",
                    Metadata =
                        {
                            {"purchaseId", purchaseId}
                        },
                    NotificationsUrl = ""
                };

            request.Dump();

            var checkout = api.CreateCheckout(request);
            
            checkout.Dump();
            if( checkout.Errors.Length == 0 )
            {
                var redirectUrl = api.GetCheckoutUrl(checkout);
                //do redirect with redirectUrl
            }
            else
            {
                //Error making checkout page.
            }

            var checkoutUrl = api.GetCheckoutUrl(checkout);
            checkoutUrl.Should().StartWith("https://sandbox.coinbase.com/checkouts");
        }
        public void create_refund_test()
        {
            // arrange
            var api = new CoinbaseApi(apiKey: "my_api_key", apiSecret: "my_api_secret");

            var refundOptions = new RefundOptions
            {
                RefundIsoCurrency = Currency.BTC,

                //By default, refunds will be issued to the refund_address
                //that is set on the order.
                //Additionally, if you want to send the refund to a different
                //bitcoin address other than the one that was in the original order
                //set ExteranlRefundAddress property.
                //OPTIONAL:
                ExternalRefundAddress = "BITCOIN_REFUND_ADDRESS"
            };

            var orderIdToRefund = "COINBASE_ORDER_ID";

            // act
            var refundResult = api.Refund(orderIdToRefund, refundOptions);

            if (refundResult.Order.Errors != null)
            {
                //Some Refund Error
            }
            else if (refundResult.Order.Status == Status.Completed)
            {
                //The refund was successful
                var refundTxn = refundResult.Order.RefundTransaction;
            }

            // assert
            refundResult.Should().NotBeNull();
        }
Example #22
0
        public void sell()
        {
            var api = new CoinbaseApi(apiKey: ApiKey, apiSecret: ApiSecretKey, useSandbox: true, proxy: proxy);

            var req = new SellRequest
                {
                    Qty = 1,
                };

            var resp = api.Sell(req);

            if( resp.Success )
            {
                //transfer details.
                Console.WriteLine("Transfer Id: {0}", resp.Transfer.Id);
            }
            else
            {
                //Error
                Console.WriteLine(string.Join(" ", resp.Errors));
            }
        }
        public void integration_test_create_button()
        {
            var api = new CoinbaseApi();

            var paymenRequest = new ButtonRequest
                {
                    Name = "Order Name",
                    Currency = Currency.USD,
                    Price = 79.99m,
                    Type = ButtonType.BuyNow,
                    Custom = "Custom_Order_Id",
                    Description = "Order Description",
                    Style = ButtonStyle.CustomLarge,
                    CallbackUrl = "http://www.bitarmory.com/callback",
                    CancelUrl = "http://www.bitarmory.com/cancel",
                    InfoUrl = "http://www.bitarmory.com/info",
                    SuccessUrl = "http://www.bitarmory.com/success",
                    ChoosePrice = false,
                    IncludeAddress = false,
                    IncludeEmail = false,
                    VariablePrice = false
                };

            var buttonResponse = api.RegisterButton( paymenRequest );

            if( buttonResponse.Success )
            {
                var redirectUrl = buttonResponse.GetCheckoutUrl();
                //Redirect the user to the URL to complete the
                //the purchase
                Console.WriteLine( redirectUrl );
            }
            else
            {
                //Something went wrong. Check errors and fix any issues.
                Debug.WriteLine( string.Join( ",", buttonResponse.Errors ) );
            }

            var o = api.CreateOrder( buttonResponse );
            o.Should().NotBeNull();

            buttonResponse.Button.Code.Should().NotBeNullOrEmpty();

            buttonResponse.Button.Price.Cents.Should().Be( 7999 );

            buttonResponse.Success.Should().BeTrue();
            //http://www.bitarmory.com/cancel?order%5Bbutton%5D%5Bdescription%5D=Order+Description&order%5Bbutton%5D%5Bid%5D=ea607b144c6fc28ec289eea5acaaaf86&order%5Bbutton%5D%5Bname%5D=Order+Name&order%5Bbutton%5D%5Btype%5D=buy_now&order%5Bcreated_at%5D=2013-12-01+19%3A04%3A24+-0800&order%5Bcustom%5D=Custom_Order_Id&order%5Bid%5D=3LP5XUP7&order%5Breceive_address%5D=13uwaYfphxs51eN2DuhBJqimRJJ3UrYjSX&order%5Bstatus%5D=new&order%5Btotal_btc%5D%5Bcents%5D=7767029&order%5Btotal_btc%5D%5Bcurrency_iso%5D=BTC&order%5Btotal_native%5D%5Bcents%5D=7999&order%5Btotal_native%5D%5Bcurrency_iso%5D=USD&order%5Btransaction%5D=
            //http://www.bitarmory.com/cancel?
            //order[button][description]=Order Description
            //&order[button][id]=ea607b144c6fc28ec289eea5acaaaf86
            //&order[button][name]=Order Name
            //&order[button][type]=buy_now&order[created_at]=2013-12-01 19:04:24 -0800
            //&order[custom]=Custom_Order_Id
            //&order[id]=3LP5XUP7
            //&order[receive_address]=13uwaYfphxs51eN2DuhBJqimRJJ3UrYjSX
            //&order[status]=new&order[total_btc][cents]=7767029
            //&order[total_btc][currency_iso]=BTC
            //&order[total_native][cents]=7999
            //&order[total_native][currency_iso]=USD
            //&order[transaction]=
        }
Example #24
0
        public void send_money_test()
        {
            // arrange
            var api = new CoinbaseApi(apiKey: ApiKey, apiSecret: ApiSecretKey, useSandbox:true, proxy: proxy);

            //Make a direct payment of BTC to another
            //bit coin address
            var pmtInBtc = new Payment()
                {
                    To = "BITCOIN_ADDRESS_OR_EMAIL",
                    Amount = 0.0m, // IN BTC
                    Notes = "MY_MESSAGE"
                };

            //Optionally, make an equivalent payment of $20 in USD in BTC
            //to the recipient.
            var pmtInUSD = new Payment()
                {
                    To = "BITCOIN_ADDRESS_OR_EMAIL",

                    Amount = null, //Don't use when using currency other than BTC

                    AmountString = 20.00m, // IN USD
                    AmountCurrencyIso = Currency.USD,
                    //InstantBuy parameter signals that if your account does
                    //not currently have enough funds to cover the
                    //amount, first purchase the difference with
                    //an instant buy, then send the bitcoin.
                    InstantBuy = true,
                };

            // act
            var response = api.SendMoney(pmtInBtc);

            if ( response.Errors != null)
            {
                //Some send money error
            }
            else if (response.Success)
            {
                //The send was successful
                var sendTxn = response.Transaction;
            }

            // assert
            response.Should().NotBeNull();
        }
        public void integration_test_create_button()
        {
            var api = new CoinbaseApi();

            var paymenRequest = new ButtonRequest
            {
                Name           = "Order Name",
                Currency       = Currency.USD,
                Price          = 79.99m,
                Type           = ButtonType.BuyNow,
                Custom         = "Custom_Order_Id",
                Description    = "Order Description",
                Style          = ButtonStyle.CustomLarge,
                CallbackUrl    = "http://www.bitarmory.com/callback",
                CancelUrl      = "http://www.bitarmory.com/cancel",
                InfoUrl        = "http://www.bitarmory.com/info",
                SuccessUrl     = "http://www.bitarmory.com/success",
                ChoosePrice    = false,
                IncludeAddress = false,
                IncludeEmail   = false,
                VariablePrice  = false
            };

            var buttonResponse = api.RegisterButton(paymenRequest);

            if (buttonResponse.Success)
            {
                var redirectUrl = buttonResponse.GetCheckoutUrl();
                //Redirect the user to the URL to complete the
                //the purchase
                Console.WriteLine(redirectUrl);
            }
            else
            {
                //Something went wrong. Check errors and fix any issues.
                Debug.WriteLine(string.Join(",", buttonResponse.Errors));
            }

            var o = api.CreateOrder(buttonResponse);

            o.Should().NotBeNull();

            buttonResponse.Button.Code.Should().NotBeNullOrEmpty();

            buttonResponse.Button.Price.Cents.Should().Be(7999);

            buttonResponse.Success.Should().BeTrue();
            //http://www.bitarmory.com/cancel?order%5Bbutton%5D%5Bdescription%5D=Order+Description&order%5Bbutton%5D%5Bid%5D=ea607b144c6fc28ec289eea5acaaaf86&order%5Bbutton%5D%5Bname%5D=Order+Name&order%5Bbutton%5D%5Btype%5D=buy_now&order%5Bcreated_at%5D=2013-12-01+19%3A04%3A24+-0800&order%5Bcustom%5D=Custom_Order_Id&order%5Bid%5D=3LP5XUP7&order%5Breceive_address%5D=13uwaYfphxs51eN2DuhBJqimRJJ3UrYjSX&order%5Bstatus%5D=new&order%5Btotal_btc%5D%5Bcents%5D=7767029&order%5Btotal_btc%5D%5Bcurrency_iso%5D=BTC&order%5Btotal_native%5D%5Bcents%5D=7999&order%5Btotal_native%5D%5Bcurrency_iso%5D=USD&order%5Btransaction%5D=
            //http://www.bitarmory.com/cancel?
            //order[button][description]=Order Description
            //&order[button][id]=ea607b144c6fc28ec289eea5acaaaf86
            //&order[button][name]=Order Name
            //&order[button][type]=buy_now&order[created_at]=2013-12-01 19:04:24 -0800
            //&order[custom]=Custom_Order_Id
            //&order[id]=3LP5XUP7
            //&order[receive_address]=13uwaYfphxs51eN2DuhBJqimRJJ3UrYjSX
            //&order[status]=new&order[total_btc][cents]=7767029
            //&order[total_btc][currency_iso]=BTC
            //&order[total_native][cents]=7999
            //&order[total_native][currency_iso]=USD
            //&order[transaction]=
        }
Example #26
0
        public override void ProcessRequest()
        {
            try
            {
                CoinbaseApi api = new CoinbaseApi(AppSettings.Cryptocurrencies.CoinbaseAPIKey, AppSettings.Cryptocurrencies.CoinbaseAPISecret, false);

                if (!IP.IsIpInRange(IP.Current, "54.175.255.192/27"))
                {
                    throw new MsgException("Bad request IP.");
                }

                var json = JObject.Parse(context.Request.GetFromBodyString());

                string merchant = json["account"]["id"].ToString();

                if (String.IsNullOrEmpty(merchant))
                {
                    throw new MsgException("No Account ID passed");
                }

                if (merchant != CoinbaseCryptocurrencyApi.GetAccountId(api))
                {
                    throw new MsgException("Invalid account ID.");
                }

                //IPN process
                string operationType = json["type"].ToString();

                if (AppSettings.Cryptocurrencies.IsCoinbaseMerchant)
                {
                    string   transactionId = json["data"]["transaction"]["id"].ToString();
                    string   currency      = json["data"]["amount"]["currency"].ToString();
                    string   amount        = json["data"]["amount"]["amount"].ToString();
                    string   args          = json["data"]["metadata"]["all"].ToString();
                    string[] argsSplit     = args.Split(ButtonGenerationStrategy.ArgsDelimeter);

                    CheckIfNotDoneYet(transactionId);

                    if (operationType == "wallet:orders:paid" || operationType == "wallet:orders:mispaid")
                    {
                        string commandName         = json["data"]["description"].ToString();
                        string buyerCurrency       = json["data"]["bitcoin_amount"]["currency"].ToString();
                        string buyerCurrencyAmount = json["data"]["bitcoin_amount"]["amount"].ToString();
                        string cryptocurrencyInfo  = string.Format("{0}{1}", buyerCurrencyAmount, buyerCurrency);

                        var assembly       = Assembly.GetAssembly(typeof(IIpnHandler));
                        var type           = assembly.GetType(commandName, true, true);
                        var command        = Activator.CreateInstance(type) as IIpnHandler;
                        var Cryptocurrency = CryptocurrencyFactory.Get(buyerCurrency);

                        //Wallet deposit, sent in BTC
                        if (command is WalletDepositCryptocurrencyIpnHandler && Cryptocurrency.DepositTarget == DepositTargetBalance.Wallet &&
                            currency == "BTC" && AppSettings.Site.CurrencyCode != "BTC")
                        {
                            Cryptocurrency.TryDepositCryptocurrency(new Member(argsSplit[0]), Decimal.Parse(amount), transactionId, cryptocurrencyInfo);
                        }

                        CheckCurrency(currency);
                        command.HandleCoinbase(args, transactionId, amount, cryptocurrencyInfo);
                    }
                }
                else
                {
                    string transactionId = json["additional_data"]["transaction"]["id"].ToString();
                    string currency      = json["additional_data"]["amount"]["currency"].ToString();
                    string amount        = json["additional_data"]["amount"]["amount"].ToString();
                    string currencyInfo  = string.Format("{0}{1}", amount, currency);
                    string address       = json["data"]["address"].ToString();

                    CheckIfNotDoneYet(transactionId);

                    if (currency != "BTC")
                    {
                        throw new MsgException("This is not BTC.");
                    }

                    if (operationType == "wallet:addresses:new-payment")
                    {
                        var bitcoinAmount  = Convert.ToDecimal(amount);
                        var TargetAddress  = json["data"]["address"].ToString();
                        var Cryptocurrency = CryptocurrencyFactory.Get(currency);

                        Cryptocurrency.TryDepositCryptocurrency(CryptocurrencyAPIProvider.Coinbase, address, bitcoinAmount, transactionId, currencyInfo);
                    }
                }
            }
            catch (Exception ex)
            {
                ErrorLogger.Log(ex);
            }
        }
Example #27
0
        public void can_list_orders()
        {
            var api = new CoinbaseApi(ApiKey, ApiSecretKey, useSandbox: true, proxy: proxy, useTimeApi: true);

            var response = api.SendRequest("orders", null, Method.GET);

            response.Dump();
        }
Example #28
-1
    public static string GetAccountId(CoinbaseApi api)
    {
        var accounts = api.SendRequest("/accounts", null, RestSharp.Method.GET);

        if (accounts.Errors != null)
        {
            throw new MsgException(accounts.Errors[0].Message);
        }

        return(accounts.Data.First(account => account["currency"].ToString() == "BTC")["id"].ToString());
    }