Or how about some DOGEcoin? Much thanks! DAum6PSacnqRE4mjJJB7nzvB8vQrjRHR4j
Stripe.net is a full service .net api for http://stripe.com.
For more information about the examples below, visit https://stripe.com/docs/api for a full reference.
It is recommended that you install Stripe.net via NuGet. If you wish to build it yourself via build.cmd, you will need ruby installed along with the gems albacore and zip.
Add a reference to Stripe.net.dll.
Next you will need to provide Stripe.net with your api key. There are 3 ways to do this: Choose one.
a) Add an AppSetting with your api key to your config (this is the easiest way)
<appSettings>
...
<add key="StripeApiKey" value="[your api key here]" />
...
</appSettings>
b) In your application initialization, call (this is a programmatic way, but you only have to do it once during startup)
StripeConfiguration.SetApiKey("[your api key here]");
c) In any of the service constructors documented below, you can optionally pass the api key (not recommended for single app/single key use). i.e...
var planService = new StripePlanService("[your api key here]");
Use the library :)
If your site has multiple offerings, plans are perfect. You can create as many plans as you want and then just assign customers to those plans later on.
var myPlan = new StripePlanCreateOptions();
myPlan.AmountInCents = 1000; // all amounts on Stripe are in cents
myPlan.Currency = "usd"; // "usd" only supported right now
myPlan.Interval = "month"; // "month" or "year"
myPlan.IntervalCount = 1; // optional
myPlan.Name = "Bronze";
myPlan.TrialPeriodDays = 30; // amount of time that will lapse before the customer is billed
var planService = new StripePlanService();
StripePlan response = planService.Create(myPlan);
The returned StripePlan entity above will have a unique Id. You will want to persist this for later. When you create a customer you will be able to assign them to a plan id (or not)
var myPlan = new StripePlanUpdateOptions();
myPlan.Name = "NEW Plan YO!";
var planService = new StripePlanService();
StripePlan response = planService.Update(*planId*, myPlan);
var planService = new StripePlanService();
StripePlan response = planService.Get(*planId*);
var planService = new StripePlanService();
planService.Delete(*planId*);
var planService = new StripePlanService();
IEnumerable<StripePlan> response = planService.List(); // can optionally pass count (defaults to 10) and offset
var myCoupon = new StripeCouponCreateOptions();
myCoupon.Id = "HOLIDAY10OFF";
myCoupon.PercentOff = "10";
myCoupon.Duration = "repeating"; // "forever", "once", or "repeating"
myCoupon.DurationInMonths = 3; // valid when "repeating" only
// set these if you want to
myCoupon.MaxRedemptions = 100;
myCoupon.RedeemBy = '12/31/2012';
var couponService = new StripeCouponService();
StripeCoupon response = couponService.Create(myCoupon);
var couponService = new StripeCouponService();
StripeCoupon response = couponService.Get(*couponId*);
var couponService = new StripeCouponService();
couponService.Delete(*couponId*);
var couponService = new StripeCouponService();
IEnumerable<StripeCoupon> response = couponService.List(); // can optionally pass count (defaults to 10) and offset
A token can be used anywhere on Stripe where you would normally pass a card. Once it's created, it can be used on a customer or a charge, but only used once.
var myToken = new StripeTokenCreateOptions();
// set these properties if using a card
myToken.CardAddressCountry = "US";
myToken.CardAddressLine1 = "24 Portal St";
myToken.CardAddressLine2 = "Unit B";
myToken.CardAddressCity = "Biggie Smalls";
myToken.CardAddressState = "NC";
myToken.CardAddressZip = "27617";
myToken.CardCvc = "1223";
myToken.CardExpirationMonth = "10";
myToken.CardExpirationYear = "2012";
myToken.CardName = "Gabe Newell";
myToken.CardNumber = "4242424242424242";
// set this property if using a customer (stripe connect only)
myToken.CustomerId = *customerId*;
var tokenService = new StripeTokenService();
StripeToken stripeToken = tokenService.Create(myToken);
Tokens are very useful if you don't want to store the customers credit card information on your servers (pci compliance).
var tokenService = new StripeTokenService();
StripeToken stripeToken = tokenService.Get(*tokenId*);
When creating a customer, you can specify any plan they are on, any coupons that will apply, a credit card or token, and various meta data.
var myCustomer = new StripeCustomerCreateOptions();
// set these properties if it makes you happy
myCustomer.Email = "[email protected]";
myCustomer.Description = "Johnny Tenderloin ([email protected])";
// set this property if using a token
myCustomer.TokenId = *tokenId*;
// set these properties if passing full card details (do not
// set these properties if you have set TokenId)
myCustomer.CardNumber = "4242424242424242";
myCustomer.CardExpirationYear = "2012";
myCustomer.CardExpirationMonth = "10";
myCustomer.CardAddressCountry = "US"; // optional
myCustomer.CardAddressLine1 = "24 Beef Flank St"; // optional
myCustomer.CardAddressLine2 = "Apt 24"; // optional
myCustomer.CardAddressCity = "Biggie Smalls"; // optional
myCustomer.CardAddressState = "NC"; // optional
myCustomer.CardAddressZip = "27617"; // optional
myCustomer.CardName = "Joe Meatballs"; // optional
myCustomer.CardCvc = "1223"; // optional
myCustomer.PlanId = *planId*; // only if you have a plan
myCustomer.Coupon = *couponId*; // only if you have a coupon
myCustomer.TrialEnd = DateTime.UtcNow.AddMonths(1); // when the customers trial ends (overrides the plan if applicable)
myCustomer.Quantity = 1; // optional, defaults to 1
var customerService = new StripeCustomerService();
StripeCustomer stripeCustomer = customerService.Create(myCustomer);
Don't let this be intimidating - all of these fields are optional. You could just create a customer with an email if you wanted.
var myCustomer = new StripeCustomerUpdateOptions();
// set these properties if it makes you happy
myCustomer.Email = "[email protected]";
myCustomer.Description = "Johnny Tenderloin ([email protected])";
// set this property if using a token
myCustomer.TokenId = *tokenId*;
// set these properties if passing full card details
// (do not set these properties if you have set TokenId)
myCustomer.CardNumber = "4242424242424242";
myCustomer.CardExpirationYear = "2012";
myCustomer.CardExpirationMonth = "10";
myCustomer.CardAddressCountry = "US"; // optional
myCustomer.CardAddressLine1 = "24 Beef Flank St"; // optional
myCustomer.CardAddressLine2 = "Apt 24"; // optional
myCustomer.CardAddressState = "NC"; // optional
myCustomer.CardAddressZip = "27617"; // optional
myCustomer.CardName = "Joe Meatballs"; // optional
myCustomer.CardCvc = "1223"; // optional
// this will set the default card to use for this customer
myCustomer.DefaultCard = *cardId*;
myCustomer.Coupon = *couponId*; // only if you have a coupon
var customerService = new StripeCustomerService();
StripeCustomer stripeCustomer = customerService.Update(*customerId*, myCustomer);
var customerService = new StripeCustomerService();
StripeCustomer stripeCustomer = customerService.Get(*customerId*);
Customers that are deleted can still be retrieved through the api. The Deleted property will be set to true if they are deleted.
var customerService = new StripeCustomerService();
customerService.Delete(*customerId*);
var customerService = new StripeCustomerService();
IEnumerable<StripeCustomer> response = customerService.List(); // can optionally pass count (defaults to 10) and offset
var myUpdatedSubscription = new StripeCustomerUpdateSubscriptionOptions()
// set these properties if using a card
myUpdatedSubscription.CardNumber = "4242424242424242";
myUpdatedSubscription.CardExpirationYear = "2012";
myUpdatedSubscription.CardExpirationMonth = "10";
myUpdatedSubscription.CardAddressCountry = "US"; // optional
myUpdatedSubscription.CardAddressLine1 = "24 Beef Flank St"; // optional
myUpdatedSubscription.CardAddressLine2 = "Apt 24"; // optional
myUpdatedSubscription.CardAddressState = "NC"; // optional
myUpdatedSubscription.CardAddressZip = "27617"; // optional
myUpdatedSubscription.CardName = "Joe Meatballs"; // optional
myUpdatedSubscription.CardCvc = "1223"; // optional
// set this property if using a token
myUpdatedSubscription.TokenId = *tokenId*;
myUpdatedSubscription.PlanId = *planId*;
myUpdatedSubscription.CouponId = *couponId*;
myUpdatedSubscription.TrialEnd = DateTime.UtcNow.AddMonths(1);
myUpdatedSubscription.Quantity = 1; // optional, defaults to 1
var customerService = new StripeCustomerService();
StripeSubscription subscription = customerService.UpdateSubscription(*customerId*, myUpdatedSubscription);
var customerService = new StripeCustomerService();
StripeSubscription subscription = customerService.CancelSubscription(*customerId*); // you can optionally pass cancelAtPeriodEnd instead of immediately cancelling
When creating a card you can use either a card or a token
var myCard = new StripeCardCreateOptions();
// set these properties if using a card
myCard.CardNumber = "4242424242424242";
myCard.CardExpirationYear = "2015";
myCard.CardExpirationMonth = "10";
myCard.CardAddressCountry = "US"; // optional
myCard.CardAddressLine1 = "24 Beef Flank St" // optional
myCard.CardAddressLine2 = "Apt 24"; // optional
myCard.CardAddressState = "NC"; // optional
myCard.CardAddressZip = "27617"; // optional
myCard.CardName = "Joey Pepperoni Smith"; // optional
myCard.CardCvc = "1223"; // optional
// set this property if using a token
myCard.TokenId = *tokenId*;
var cardService = new StripeCardService();
StripeCard stripeCard = cardService.Create(*customerId*, myCard);
var cardService = new StripeCardService();
StripeCard stripeCard = cardService.Get(*customerId*, *cardId*);
var myCard = new StripeCardUpdateOptions();
myCard.Name = "Cardy MyCardson"
myCard.ExpirationYear = "2016";
myCard.ExpirationMonth = "10";
myCard.AddressCountry = "US";
myCard.AddressLine1 = "1234 ComeOnBabySayYouLoveMe St";
myCard.AddressLine2 = "";
myCard.AddressState = "NC";
myCard.AddressCity = "Raleigh"
myCard.AddressZip = "27617";
var cardService = new StripeCardService();
StripeCard stripeCard = cardService.Update(*customerId*, *cardId*, myCard);
var cardService = new StripeCardService();
cardService.Delete(*customerId*, *cardId*);
var cardService = new StripeCardService();
IEnumerable<StripeCard> response = cardService.List(*customerId*); // can optionally pass count (defaults to 10) and offset
When creating a charge you can use either a card, customer, or a token. Only one is allowed.
var myCharge = new StripeChargeCreateOptions();
// always set these properties
myCharge.AmountInCents = 5153;
myCharge.Currency = "usd";
// set this if you want to
myCharge.Description = "Charge it like it's hot";
// set this property if using a token
myCharge.TokenId = *tokenId*;
// set these properties if passing full card details
// (do not set these properties if you have set a TokenId)
myCharge.CardNumber = "4242424242424242";
myCharge.CardExpirationYear = "2012";
myCharge.CardExpirationMonth = "10";
myCharge.CardAddressCountry = "US"; // optional
myCharge.CardAddressLine1 = "24 Beef Flank St" // optional
myCharge.CardAddressLine2 = "Apt 24"; // optional
myCharge.CardAddressState = "NC"; // optional
myCharge.CardAddressZip = "27617"; // optional
myCharge.CardName = "Joe Meatballs"; // optional
myCharge.CardCvc = "1223"; // optional
// set this property if using a customer
myCharge.CustomerId = *customerId*;
// if using a customer, you may also set this property to charge
// a card other than the customer's default card
myCharge.Card = *cardId*;
// set this if you have your own application fees (you must have your application configured first within Stripe)
myCharge.ApplicationFeeInCents = 25;
// (not required) set this to false if you don't want to capture the charge yet - requires you call capture later
myCharge.Capture = true;
var chargeService = new StripeChargeService();
StripeCharge stripeCharge = chargeService.Create(myCharge);
var chargeService = new StripeChargeService();
StripeCharge stripeCharge = chargeService.Get(*chargeId*);
If you do not specify an amountInCents, the entire charge is refunded. The StripeCharge entity has properties for "Refunded" (bool) and RefundedAmountInCents.
var chargeService = new StripeChargeService();
StripeCharge stripeCharge = chargeService.Refund(*chargeId*, *amountInCents*, *refundApplicationFee*);
If you set a charge to capture = false, you use this to capture the charge later. amountInCents and applicationFeeInCents are not required.
var chargeService = new StripeChargeService();
StripeCharge stripeCharge = chargeService.Capture(*chargeId*, *amountInCents*, *applicationFeeInCents*);
var chargeService = new StripeChargeService();
IEnumerable<StripeCharge> response = chargeService.List(); // can optionally pass count (defaults to 10), offset, and a customerId to get charges for a single customer
var invoiceService = new StripeInvoiceService();
StripeInvoice response = invoiceService.Get(*invoiceId*);
var invoiceService = new StripeInvoiceService();
StripeInvoice response = invoiceService.Upcoming(*customerId*);
var invoiceService = new StripeInvoiceService();
StripeInvoice response = invoiceService.Create(*customerId*);
var stripeInvoiceUpdateOptions = new StripeInvoiceUpdateOptions();
stripeInvoiceUpdateOptions.Closed = true;
var invoiceService = new StripeInvoiceService();
StripeInvoice response = invoiceService.Update(stripeInvoiceUpdateOptions);
var invoiceService = new StripeInvoiceService();
IEnumerable<StripeInvoice> response = invoiceService.List(); // can optionally pass count (defaults to 10), offset, and a customerid
Any invoice items you create for a customer will be added to their bill.
var myItem = new StripeInvoiceItemCreateOptions();
myItem.AmountInCents = 1000; // all amounts on Stripe are in cents
myItem.Currency = "usd"; // "usd" only supported right now
myItem.CustomerId = *customerId*;
myItem.Description = "na"; // not required
var invoiceItemService = new StripeInvoiceItemService();
StripeInvoiceItem response = invoiceItemService.Create(myItem);
var invoiceItemService = new StripeInvoiceItemService();
StripeInvoiceItem response = invoiceItemService.Get(*invoiceItemId*);
var myUpdatedItem = new StripeInvoiceItemUpdateOptions();
myUpdatedItem.AmountInCents = 1010; // all amounts on Stripe are in cents
myUpdatedItem.Currency = "usd"; // "usd" only supported right now
myUpdatedItem.Description = "test"; // not required
var invoiceItemService = new StripeInvoiceItemService();
StripeInvoiceItem response = invoiceItemService.Update(*invoiceItemId*, myUpdatedItem);
var invoiceItemService = new StripeInvoiceItemService();
invoiceItemService.Delete(*invoiceItemId*);
var invoiceItemService = new StripeInvoiceItemService();
IEnumerable<StripeInvoiceItem> response = invoiceItemService.List(); // can optionally pass count (defaults to 10), offset, and a customerid
var accountService = new StripeAccountService();
StripeAccount response = accountService.Get();
var balanceService = new StripeBalanceService();
StripeBalance response = balanceService.Get();
var disputeService = new StripeDisputeService();
// providing the dispute reason is optional
StripeDispute stripeDispute = disputeService.Update(*chargeId*, "customer ate the donut before I charged them, so they said it was free");
var myRecipient = new StripeRecipientCreateOptions();
myRecipient.Name = "Bacon Industries Limited";
myRecipient.Type = "individual"; // "corporation" is also valid here.
myRecipient.TaxId = "000000000"; // optional
myRecipient.Email = "[email protected]"; // optional
myRecipient.Description = "Bacon Industries Ltd. ([email protected])"; //optional
// optional - you must specify all 3 values if you use a bank account
myRecipient.BankAccountCountry = "US";
myRecipient.BankAccountRoutingNumber = "110000000";
myRecipient.BankAccountNumber = "000123456789";
var recipientService = new StripeRecipientService();
StripeRecipient stripeRecipient = recipientService.Create(myRecipient);
var myRecipient = new StripeRecipientUpdateOptions();
myRecipient.Name = "Bacon Industries Limited";
myRecipient.TaxId = "000000000"; // optional
myRecipient.Email = "[email protected]"; // optional
myRecipient.Description = "Bacon Industries Ltd. ([email protected])"; //optional
// optional - you must specify all 3 values if you use a bank account
myRecipient.BankAccountCountry = "US";
myRecipient.BankAccountRoutingNumber = "110000000";
myRecipient.BankAccountNumber = "000123456789";
var recipientService = new StripeRecipientService();
StripeRecipient stripeRecipient = recipientService.Update(*recipientId*, myRecipient);
var recipientService = new StripeRecipientService();
StripeRecipient stripeRecipient = recipientService.Get(*recipientId*);
var recipientService = new StripeRecipientService();
recipientService.Deleted(*recipientId*);
var recipientService = new StripeRecipientService();
IEnumerable<StripeRecipient> response = recipientService.List(); //can optionally pass count (defaults to 10), offset (defaults to 0), and verified (bool)
var myTransfer = new StripeTransferCreateOptions();
myTransfer.AmountInCents = 100;
myTransfer.Currency = "usd";
myTransfer.Recipient = "*recipientId*"; // can also be "self" if you want to send to your own account
myTransfer.Description = "Sales Week #42"; // optional
myTransfer.StatementDescriptor = "Commissions"; // optional
var transferService = new StripeTransferService();
StripeTransfer stripeTransfer = transferService.Create(myTransfer);
var transferService = new StripeTransferService();
StripeTransfer stripeTransfer = transferService.Get(*transferId*);
var transferService = new StripeTransferService();
StripeTransfer stripeTransfer = transferService.Cancel(*transferId*);
var transferService = new StripeTransferService();
IEnumerable<StripeTransfer> response = transferService.List(); //can optionally pass count (defaults to 10), offset (defaults to 0), recipientId, and status
If you do not specify an amountInCents, the entire application fee is refunded.
var feeService = new StripeApplicationFeeService();
StripeApplicationFee stripeApplicationFee = feeService.Get(*applicationFeeId*);
var feeService = new StripeApplicationFeeService();
StripeApplicationFee stripeApplicationFee = feeService.Refund(*applicationFeeId*, *amountInCents*);
Stripe sends Events (or webhooks) whenever an associated action occurs. The list of events Stripe sends is documented here: https://stripe.com/docs/api#event_types
-
In your application, create a handler that looks something like the below:
namespace TheBestApplicationEverCreated { public class StripeHandler : IHttpHandler { public bool IsReusable { get { return true; } }
public void ProcessRequest(HttpContext context) { var json = new StreamReader(context.Request.InputStream).ReadToEnd(); var stripeEvent = StripeEventUtility.ParseEvent(json); switch (stripeEvent.Type) { case "charge.refunded": // take a look at all the types here: https://stripe.com/docs/api#event_types var stripeCharge = Stripe.Mapper<StripeCharge>.MapFromJson(stripeEvent.Data.Object.ToString()); break; } } }
}
-
Create a StripeHandler.ashx in the root of your website (or wherever) that looks like this:
<%@ WebHandler Language="C#" Class="StripeHandler" CodeBehind="StripeHandler.cs" %>
-
Login to Stripe and go to Account Settings, webhooks - from here, you can setup the url that points to your StripeHandler.ashx for testing.
Whenever an Event is received, StripeEventUtility.ParseEvent(json) will convert the response into a StripeEvent object.
If you have the id and you want to retrieve the event
var eventService = new StripeEventService();
StripeEvent response = eventService.Get(*eventId*)
You can list events in the same way everything else works in Stripe.net.
var eventService = new StripeEventService();
IEnumerable<StripeEvent> response = eventService.List(); // can optionally pass count (defaults to 10), offset, and StripeEventSearchOptions
You can also optionally pass a StripeSearchEventOptions which supports a specific Created timestamp, LessThan, LessThanOrEqualTo, GreaterThan, or GreaterThanOrEqualTo.
var eventService = new StripeEventService();
var eventSearchOptions = new StripeEventSearchOptions();
// created will match on an exact date time
eventSearchOptions.Created = DateTime.UtcNow;
// or you could do something like
eventSearchOptions.LessThanOrEqualTo = DateTime.UtcNow;
eventSearchOptions.GreaterThanOrEqualTo = DateTime.UtcNow.AddMonths(-1);
IEnumerable<StripeEvent> response = eventService.List(10, 0, eventSearchOptions);
For information about how to use Stripe Connect, see this comment https://github.com/jaymedavis/stripe.net/pull/43#issuecomment-10903921
Any errors that occur on any of the services will throw a StripeException with the message returned from Stripe. It is a good idea to run your service calls in a try and catch StripeException.
The StripeException contains and HttpStatusCode and a StripeError entity. The StripeError entity contains the type, message, code and param. For more infomation, review the Errors section
of stripe here: https://stripe.com/docs/api#errors