mkdir python-flask-stripe && cd python-flask-stripe
# pip or pip3 depending on env
pip3 install Flask
pip3 install stripe
pip3 install -U python-dotenv
touch .env server.py
Setting up .env
Fetch your keys from Stripe and replace the following in the file:
SK_TEST_KEY=sk... # replace sk...
Writing server.py
Set up the file to look like the following:
from flask import Flask
from flask import request
from dotenv import load_dotenv
import stripe
import os
# Load local .env file and assign key
load_dotenv()
stripe.api_key = os.environ.get("SK_TEST_KEY")
app = Flask(__name__)
@app.route("/api/charge", methods = ['POST'])
def charge():
try:
content = request.get_json()
# Print what JSON comes in for the sake of checking
print(content)
resp = stripe.Charge.create(
amount=content['amount'],
currency="usd",
source="tok_visa",
receipt_email=content['receiptEmail'],
)
print("Success: %r" % (resp))
return "Successfully charged", 201
except Exception as e:
print(e)
return "Charge failed", 500
if __name__ == "__main__":
app.run()
The above:
Fetches and sets OS env from .env file.
Sets the Stripe API key.
Sets a route /api/charge that only takes the POST method and creates a charge based on the amount we pass.
Running the server
python3 server.py will start the server on port 5000.
Running http POST http://localhost:5000/api/charge amount:=1700 receiptEmail=hello_flask@example.com (using HTTPie) will come back with success. Check your Stripe dashboard and you will see a charge made for AUD\$17.00! 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).