DEV Community

Cover image for Your first Stripe Charge with Dotnet + C# in 5 minutes
Dennis O'Keeffe
Dennis O'Keeffe

Posted on • Originally published at blog.dennisokeeffe.com

Your first Stripe Charge with Dotnet + C# in 5 minutes

In this short series, we are going to look at how to create a charge to Stripe in a number of their officially supported languages!

In this article, we are going to look at how to do so with C# and Dotnet.

The expectations are that you have both Dotnet installed and have your Stripe API keys setup and ready to go.

The following comes in part from my documentation website.

Adding the library

Assuming you have Dotnet setup, run the following:

# install stripe
dotnet add package Stripe.net
# for reading local env file
# NOT REQUIRED unless you want to read from .env
dotnet add package DotNetEnv
# install required code generation code
Microsoft.VisualStudio.Web.CodeGeneration.Design
# global install scaffolding tool
dotnet tool install --global dotnet-aspnet-codegenerator
Enter fullscreen mode Exit fullscreen mode

Adding a Dotenv file

This file will be used to store our credentials to access Stripe.

touch .env
Enter fullscreen mode Exit fullscreen mode

Within the Dotenv file, we need to add your test keys from Stripe's website.

SK_TEST_KEY=<sk_test_key>
PK_TEST_KEY=<pk_test_key>
Enter fullscreen mode Exit fullscreen mode

Updating your settings file

If you are going to use another method to fetch the variables (ie secrets etc), you could add the following to your appsettings.json file:

{
  // previous key/values omitted for brevity
  "Stripe": {
    "SecretKey": "SK_TEST_KEY", // this will eval to sk_test_... .env
    "PublishableKey": "PK_TEST_KEY" // this will eval to sk_test_... from .env
  }
}
Enter fullscreen mode Exit fullscreen mode

Make sure to check the docs on passing parameters to understand how this works.

Add Stripe config to Startup.cs

using Stripe;
using DotNetEnv;

// ... code omitted for brevity

public Startup(IConfiguration configuration)
{
    Configuration = configuration;
    // load .env file
    DotNetEnv.Env.Load();
    // set config using env var
    StripeConfiguration.ApiKey = System.Environment.GetEnvironmentVariable("SK_TEST_KEY");
}
Enter fullscreen mode Exit fullscreen mode

Create the Model

// in Models/StripeCharge.cs
namespace ChargeApi.Models
{
    public class StripeCharge
    {
        public long Amount { get; set; }
        public string Currency { get; set; }
        public string Source { get; set; }
        public string ReceiptEmail { get; set; }
    }
}
Enter fullscreen mode Exit fullscreen mode

Create the Controller

// Controllers/Charge.cs
using System.Collections.Generic;
using Microsoft.AspNetCore.Mvc;
using Stripe;
using ChargeApi.Models;

namespace dotnet_stripe.Controllers
{
    [ApiController]
    [Route("api/charges")]
    public class ChargesController : Controller
    {
        [HttpPost]
        public Stripe.Charge CreateCharge([FromBody] StripeCharge createOptions)
        {
            var options = new ChargeCreateOptions
            {
                Amount = createOptions.Amount,
                Currency = "aud",
                Source = "tok_visa",
                ReceiptEmail = "hello_dotnet@example.com",
            };
            var service = new ChargeService();
            var charge = service.Create(options);
            return charge;
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

Sending the request on HTTPie

Since we are sending back the response from the Stripe.Charge object, it will be very verbose and not what you want to do in reality for the API.

In this example using HTTPie, call http POST http://localhost:5000/api/charges Amount:=1700 ReceiptEmail=hello_dotnet@example.com and we will get back our charge results sent as JSON. Hooray!

I chose to use HTTPie because I feel it is a fun tool that more should know about! Alternative, you could do the above using curl as well (or anything that can make a POST request for a matter of fact).

curl --header "Content-Type: application/json" \
  --request POST \
  --data '{"Amount":1700,"ReceiptEmail":"hello_dotnet@example.com"}' \
  http://localhost:5000/api/charges
Enter fullscreen mode Exit fullscreen mode

If you now go and check your Stripe dashboard, you will be able to see a charge.

Stripe Dashboard

Resources and Further Ready

  1. Setting up Stripe API for Dotnet
  2. Stripe Dotnet API Docs
  3. First Dotnet API
  4. Setting secrets for a Dotnet project
  5. Interfaces in C#
  6. ASP.NET Core API Service with Twilio, Stripe and Stormpath
  7. Process Payments with Dotnet
  8. Process Payments with Dotnet Github
  9. Stripe Development Docs
  10. Toptal ASP.NET WebAPI
  11. Dev.To tutorial
  12. HTTPie JSON

Image credit: Goran Ivos

Originally posted on my blog. Follow me on Twitter for more hidden gems @dennisokeeffe92.

Top comments (1)

Collapse
 
techt01ia profile image
Techtolia

If you are looking the latest solution of Stripe integration in ASP.NET, check out the demo for One Time payments >>> techtolia.com/Stripe/ - the demo for Subscriptions/Recurring payments >>> techtolia.com/StripeSubscriptions/