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(); }
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(); }
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); } }
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 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); }
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); } }
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); }
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(); }
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); }
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(); }
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]= }
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]= }
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); } }
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()); }