Skip to main content

Package to handle various payments provider inside your drf project

Project description

DRF payments

Documentation Build Status 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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

drf_payments-0.0.2.tar.gz (13.9 kB view hashes)

Uploaded Source

Built Distribution

drf_payments-0.0.2-py3-none-any.whl (16.1 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page