Skip to content

coaxsoft/drf-payments

Repository files navigation

DRF payments

Documentation Tests PyPI GitHub tag (latest SemVer pre-release)

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 your Payment model

For example of usage please see example app inside repository.

Installation

  • 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"),
        },
    ),
}

Usage

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

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published