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:



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

Kurulum



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 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 ikendj-stripe test key’lerinizi kullanır.


Plans



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



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 webhooksfrom 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



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:


<script src="https://js.stripe.com/v3/"></script>


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ç:



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