Müşterilerimiz İletişim EN

dj-stripe ile Django ve Stripe Entegrasyonu

django

Django projelerinde hangi ödeme kütüphanelerinin kullanıldığını araştırırken dj-stripe’yi inceleme fırsatım oldu. Projenize bir ödeme sistemi entegre edecekseniz, abonelik yönetimi (subscription management) veya tek birim satın alma (single-unit purchase) gibi özelliklere ihtiyaç duyabilirsiniz. Özellikle SaaS projeleri için, abonelik yönetimi oldukça önemli ve zaman alıcı bir konu ve dj-stripe bu konuda çözüm sunuyor.


Ön Gereksinimler:


dj-stripe entegrasyonuna başlamadan önce, aşağıdaki gereksinimleri yerine getirdiğinizden emin olun:


  • Bir Django projesi (Django versiyonu>= 2.2)
  • Python versiyonu >= 3.6
  • Kullanıma hazır bir Stripe projesi

Kurulum


Öncelikle dj-stripe’ı pip ile kuruyoruz:


pip install dj-stripe

Sonra djstripe’ı INSTALLED_APPS’e ekliyoruz:


INSTALLED_APPS=(
... "djstripe", ...

ve urls.py’e ekliyoruz.


path("stripe/", include("djstripe.urls", namespace="djstripe"))

Stripe Ayarları


Webhooks (Web kancaları)


Webhook adresini Stripe’ye eklemek gerekir. Webhook adresiniz [https://domain.com/stripe/webhook] formatında olmalıdır.


Webhook endpoint’lerini Stripe Dashboard’da Developers > Webhooks adresinde bulabilirsiniz. Stripe Dashboard’da bir webhook endpoint oluşturduktan sonra, whsec_ ile başlayan webhook secret key’inizi alın.


Ekran Görüntüsü — https://dashboard.stripe.com/webhooks

API Keys (API Anahtarları)

Ekran Görüntüsü — https://dashboard.stripe.com/apikeys

Stripe public ve secret key’lerini Developers > API Keys menüsünden alıp, .env dosyamıza ekliyoruz. settings.py dosyamız aşağıdaki gibi olmalı:


STRIPE_LIVE_PUBLIC_KEY = os.environ.get("STRIPE_LIVE_PUBLIC_KEY", "<your publishable key>")
STRIPE_LIVE_SECRET_KEY = os.environ.get("STRIPE_LIVE_SECRET_KEY", "<your secret key>")
STRIPE_TEST_PUBLIC_KEY = os.environ.get("STRIPE_TEST_PUBLIC_KEY", "<your publishable key>")
STRIPE_TEST_SECRET_KEY = os.environ.get("STRIPE_TEST_SECRET_KEY", "<your secret key>")
STRIPE_LIVE_MODE = False
DJSTRIPE_WEBHOOK_SECRET = "whsec_xxx"

STRIPE_LIVE_MODE False iken, dj-stripe test key’lerinizi kullanır.


Plans


Plan yaratmak için yan menüdeki Product butonuna tıklayın.


Ekran Görüntüsü — https://dashboard.stripe.com/products/create

Name alanı zorunludur. Ben 3 günlük ücretsiz deneme opsiyonu ile beraber tekrarlanan (recurring) bir plan yarattım.


dj-stripe tabloları oluşturmak, mevcut müşterileri Stripe’ta oluşturmak ve oluşturulan planları Stripe’den dj-stripe tablolarına taşımak için aşağıdaki komutları çalıştırın:


python manage.py migrate
python manage.py djstripe_init_customers
python manage.py djstripe_sync_plans_from_stripe

Events


Stripe event’lerinden bahsetmenin önemli olduğunu düşünüyorum. Stripe’de çok sayıda farklı event var. API’den hangi event’leri dinlemek istediğinizi belirtmelisiniz.


Müşterinize e-posta ile ödemesinin başarısız olduğunu bildirmek veya aboneliğinin x gün içerisinde sona ereceğini hatırlatmak isteyebilirsiniz. Böyle durumlarda, Stripe Dashboard’da dinlemek istediğiniz event’leri seçerek, her biri için bir listener method uygulamanız gerekir.


Developer > Webhooks sayfasında event’lerinizi seçin.


Ekran Görüntüsü — https://dashboard.stripe.com/webhooks/we_xxx

Şimdi müşterinin aboneliğini sonlandırmasıyla ilgili event’ler için bir endpoint yaratalım:


from djstripe import webhooks
from django.core.mail import send_mail

@webhooks.handler("customer.deleted")
def customer_deleted_event_listener(event, **kwargs):
    send_mail(
        'Subscription Deleted',
        'See ya!',
        'from@example.com',
        ['to@example.com'],
        fail_silently=False,
    )

Müşteri bilgisini, event değişkeninin içerisinde bulabilirsiniz.


Checkout


Ben müşterilerin stripe.com üzerinden ödeme yaptığı “Stripe Checkout”u tercih ettim, ancak siz bunu istemci uygulamanız ile de yapabilirsiniz.


Checkout, Stripe’de barınan ve kolayca ödeme alabileceğiniz güvenli bir sayfa sunar. Çoklu cihaz desteği bulunur ve dönüşümü artırmaya yardımcı olur.


Daha fazla bilgi için >> https://stripe.com/docs/payments/checkout


Stripe Checkout kullanırken, eğer bir SaaS uygulama API’si entegre ediyorsanız, ödeme adımında plan name, customer id gibi bazı müşteri bilgilerinin olduğu bir “Stripe” oturumu oluşturmalısınız.


customer = Customer.objects.get(subscriber=request.user)
stripe.api_key = STRIPE_SECRET_KEY
session = stripe.checkout.Session.create(
customer=customer.id,
payment_method_types=['card'],
subscription_data={
'items': [{
'plan': request.data["plan"],
}],
},
success_url='http://example.com/success',
cancel_url='http://example.com/cancelled',
)

data = {
"session_id": session.id
}return JsonResponse(data, status=200)

session_id yarattıktan sonra, bunu istemci uygulamanıza aktarın.


İstemcide ödeme adımlarını uygulamadan önce Stripe.js dosyasını içe aktarmalıyız.


Aşağıdaki satırı .html dosyamıza ekliyoruz:




Stripe nesnesini oluşturuyoruz:


var stripe = Stripe(YOUR_PUBLIC_KEY);

Müşteri “Abone Ol” butonuna tıkladığında, aşağıdaki kod parçasını çalıştırmalıdır:


stripe.redirectToCheckout({
sessionId: this.state.session_id
})
.then(function(result) {
// If `redirectToCheckout` fails due to a browser or network
// error, display the localized error message to your customer
// using `result.error.message`.
var displayError = document.getElementById('error-message');
displayError.textContent = result.error.message;});

Müşteri butona tıkladığında, aşağıda sayfayı görür:


Ekran Görüntüsü — https://stripe.com/docs/payments/checkout

Not: Stripe test key’lerini kullanırsanız sayfa test modunda görünür. Ödeme adımınızı test kartı numaraları ile test edebilirsiniz.


  • Varsayılan ABD kartı — 4242 4242 4242 4242
  • 3D Secure ile kimlik doğrulaması için — 4000 0000 0000 3220

Sonuç:


dj-stripe projesini kullanarak başarılı bir Stripe entegrasyonu yaptık. Hızlıca uygulanabilmesi ve anlaşılabilir olması için mümkün olduğunca basit anlatmaya çalıştım.


Stripe’nin çok çeşitli özellikleri ve harika bir dokümantasyonu var. Stripe’yi kullanmadan önce dokümantasyonunu da okumanızı tavsiye ederim.

 

Yazan: Berat Nakip

Yayınlanma Tarihi: 02.07.2020



Kategoriler

Tümü Açık Kaynak (27) Android Anthos Çekirdekten Yetişenler Çevik Metodoloji Çocuklar ve Teknoloji (2) Ödeme Sistemleri (2) Üretim Sektörü (5) B2B Pazarlama (5) Bamboo Büyük Ölçekli Şirketler (4) BT Bulut (159) Buluta Geçiş (19) Bulutta Yerel Yazılım Geliştirme (4) C++ Chef ClickHouse Dayanıklılık DevOps (13) Dijital Pazarlama (12) Dijital Yerli Firmalar (3) Django (2) E-ticaret (8) Enerji Sektörü Eğitim Sektörü (8) Felaket Kurtarma (2) Finansal Hizmetler (4) FinOps (3) Firebase (10) Flutter Gayrimenkul Sektörü Güvenlik (15) Git Golang (2) Google Cloud (114) Google Labs (14) Google Maps (2) Google Workspace (29) Helm Hibrit ve Çoklu Bulut (8) JavaScript Kadınlar ve STEM (3) Kamu Sektörü (2) KOBİ (5) Kubernetes (5) Kullandığımız Teknolojiler (24) Kullanıcı Arayüzü ve Kullanıcı Deneyimi Linux (6) Looker (7) MariaDB Mobil Uygulama Geliştirme (2) MySQL OpenStack (4) Oyun Sektörü (15) Perakende (14) PostgreSQL Proje Metodolojileri Python (7) Sadakat Programı (5) Sağlık ve Yaşam Bilimleri Sektörü (3) Sürdürülebilirlik (6) Sektöre Özgü Bulut Çözümleri (41) Selenium (2) Sigorta Sektörü Sistem Mimarisi (7) Tüketici Ürünleri (2) Tedarik Zinciri ve Lojistik (4) Teknoloji, Medya, Telekom (3) Terraform Test Etme (4) Turizm ve Eğlence (6) Ulaşım Sektörü (2) Uygulama Modernizasyonu Veri Analitiği (39) Veri Bilimi (2) Veri Depolama Veri Görselleştirme (7) Veri Tabanı (4) Versiyon Kontrolü Yapay Zeka - Makine Öğrenmesi (154) Yasal Uyum Yazılım Geliştirme (9) Yazılım Tarihi (3) Yazılımcı Deneyimi (8) İK Uygulamaları (10) İnşaat Sektörü İşe Alım (7)
Daha Fazla Kategori Göster >> Kategorileri Gizle >>

Kartaca sitesinden daha fazla şey keşfedin

Okumaya devam etmek ve tüm arşive erişim kazanmak için hemen abone olun.

Okumaya Devam Edin