Package to handle various payments provider inside your drf project
This package will allow you to create transactional payments on various payment providers:
- Stripe
- Paypal
- Braintree
- Authorize.net
Upon creation of your app Payment
model this library will handle:
- Creation of payment on selected provider
- Direct charge
- Checkout session
- Handling webhook event from payment gateway to update
Payment
status - Handle Refund on the payment if payment was processed
- Write along the way all payment gateway responses in
extra_data
json field of yourPayment
model
For example of usage please see example
app inside repository.
pip install drf-payments
- Add to
INSTALLED_APPS
INSTALLED_APPS = [
"django.contrib.admin",
"django.contrib.auth",
"django.contrib.contenttypes",
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
"drf_payments",
...
]
- Add callback url
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path("admin/", admin.site.urls),
...
path("drf-payments/", include("drf_payments.urls")),
]
- Provide required settings
PAYMENT_MODEL = "stripe_checkout.StripeCheckoutPayment"
PAYMENT_CALLBACK_URL = "http://localhost:8000/drf-payments/callback/"
PAYMENT_SUCCESS_URL = "http://localhost:3000/payments/success/"
PAYMENT_FAILURE_URL = "http://localhost:3000/payments/failure/"
PAYMENT_VARIANTS = {
"stripe": (
"drf_payments.stripe.StripeCheckoutProvider",
{
"secret_key": os.environ.get("STRIPE_SECRET_KEY"),
"public_key": os.environ.get("STRIPE_PUBLIC_KEY"),
},
),
"paypal": (
"drf_payments.paypal.PaypalProvider",
{
"client_id": os.environ.get("PAYPAL_CLIENT_ID"),
"secret": os.environ.get("PAYPAL_SECRET_KEY"),
"endpoint": os.environ.get("PAYPAL_URL", "https://api.sandbox.paypal.com"),
},
),
}
For usage you can check example implementation in repo
- Inherit
drf_payments.models.BasePayment
model in your app
from drf_payments.models import BasePayment
class StripeChargePayment(BasePayment):
...
class Meta:
db_table = "stripe_charge"
- Use
drf_payments.mixins.PaymentViewMixin
in view that handles your payment model
from rest_framework.routers import SimpleRouter
from drf_payments.mixins import PaymentViewMixin
app_name = "shop"
router = SimpleRouter()
router.register("payment", PaymentViewMixin, basename="payment")
urlpatterns = [*router.urls]
- Point your payments events to endpoint from settings
PAYMENT_CALLBACK_URL
For more info please check example
app inside repository
For even more detail check documentation