Abonelik
Abonelik, recurring türündeki ürünler için aylık ya da yıllık dönemlerle tahsilat yapar. İlk dönem gateway'in ödeme sayfasında ödenir ve ödemede kart saklanır. Sonraki dönemler müşterinin varsayılan kayıtlı kartından çekilir.
Ön koşullar
- Çalışma alanının planı abonelikleri ve kayıtlı kartları kapsamalıdır.
- Aboneliğin ödeneceği hesap kart saklamayı ve 3D ödemeyi desteklemelidir.
- Abonelikteki ürünler aynı kanalda
save-productiletype: recurringolarak kaydedilmiş veis_active: trueolmalıdır. Ürünlerinperiodvecurrencydeğerleri aynı olmalıdır.
Yaşam döngüsü
- Açma —
subscription-paymentçağrılır. Abonelikpendingaçılır; yanıtsubscription.tokenvesubscription.checkout_urldöner. - İlk ödeme — Tarayıcı
checkout_urladresine yönlendirilir. Ödeme başarılı olursa kart saklanır ve müşterinin varsayılan kartı olur; abonelikactiveolur,activewebhook'u gönderilir ve tarayıcısuccess_urladresine dönüş formunuPOSTeder. - Yenileme — Dönem bittiğinde yeni dönem açılır ve tutarı katalogdaki güncel fiyatlardan hesaplanır. Tutar müşterinin varsayılan kartından çekilir. Başarılı çekimde
activewebhook'u gönderilir. - Başarısız yenileme — Çekim 3, 6, 9 ve 12 saat aralıklarla yeniden denenir (toplam 5 deneme). Hepsi başarısız olursa abonelik
past_dueolur,past_duewebhook'u gönderilir vesubscription.checkout_urldönemin ödeme sayfasını gösterir. Müşterinin kayıtlı kartı yoksa yeniden deneme yapılmaz. past_duesonrası ödeme — Dönemcheckout_urlüzerinden ödenirse abonelikactiveolur veactivewebhook'u gönderilir. Dönemin bitiş zamanı geçmişse yeni dönem ödeme anından başlar. Ödemede kullanılan kart varsayılan kart olur.- İptal —
cancel-subscription. İade yapılmaz; ödenmiş dönem bitene kadar abonelikactivekalır.
Durumlar
status | Anlamı |
|---|---|
pending | İlk dönem ödenmedi. |
active | Ödenmiş bir dönemin içinde (iptal edilmişse cancelled_at dolu). |
past_due | Yenileme tahsil edilemedi; dönem checkout_url üzerinden ödenmeyi bekliyor. Süre sınırı yoktur. |
cancelled | Sona erdi. |
Fiyat
subscription.amountiçinde bulunulan dönemin tutarıdır.- İlk dönem için kalemde
unit_amountgönderilirse yalnızca ilk dönem o fiyatla hesaplanır. - Yenileme dönemlerinin tutarı, dönem açılırken katalogdaki fiyatlardan hesaplanır.
save-productile yapılan fiyat değişikliği yürüyen dönemi değiştirmez.
Ortam
Abonelik, ilk ödemenin yapıldığı moda (is_test) bağlanır. Yenilemeler yalnızca aynı modda saklanmış varsayılan karttan çekilir.
Örnek
- PHP
- Node.js
- Python
- Java
use Gurmehub\Odemehub\Request\{RetrieveSubscription, SubscriptionItem, SubscriptionPayment};
$subscription = $client->subscriptionPayment(new SubscriptionPayment(
channelReference: 'UYELIK-4471',
items: [new SubscriptionItem(channelReference: 'PREMIUM-AYLIK')],
successUrl: 'https://magazam.com/tesekkurler',
customer: $customer,
webhookUrl: 'https://magazam.com/odemehub/abonelik',
));
$token = $subscription->token; // saklayın
header('Location: '.$subscription->checkoutUrl);
// Sonra:
$current = $client->retrieveSubscription(new RetrieveSubscription(subscriptionToken: $token));
const subscription = await client.subscriptionPayment({
channelReference: 'UYELIK-4471',
items: [{ channelReference: 'PREMIUM-AYLIK' }],
successUrl: 'https://magazam.com/tesekkurler',
customer,
webhookUrl: 'https://magazam.com/odemehub/abonelik',
});
const token = subscription.token; // saklayın
res.redirect(subscription.checkoutUrl!);
// Sonra:
const current = await client.retrieveSubscription({ subscriptionToken: token });
from odemehub.request import RetrieveSubscription, SubscriptionItem, SubscriptionPayment
subscription = client.subscription_payment(SubscriptionPayment(
channel_reference="UYELIK-4471",
items=[SubscriptionItem(channel_reference="PREMIUM-AYLIK")],
success_url="https://magazam.com/tesekkurler",
customer=customer,
webhook_url="https://magazam.com/odemehub/abonelik",
))
token = subscription.token # saklayın
# Sonra:
current = client.retrieve_subscription(RetrieveSubscription(subscription_token=token))
import com.odemehub.request.RetrieveSubscription;
import com.odemehub.request.SubscriptionItem;
import com.odemehub.request.SubscriptionPayment;
import java.util.List;
var subscription = client.subscriptionPayment(SubscriptionPayment.builder()
.channelReference("UYELIK-4471")
.items(List.of(SubscriptionItem.of("PREMIUM-AYLIK")))
.successUrl("https://magazam.com/tesekkurler")
.customer(customer)
.webhookUrl("https://magazam.com/odemehub/abonelik")
.build());
String token = subscription.getToken(); // saklayın
// Sonra:
var current = client.retrieveSubscription(new RetrieveSubscription(token));
Bildirimler
Durum değişiklikleri webhook_url adresine gönderilir: Abonelik Webhook'u. webhook_url verilmediyse durum retrieve-subscription ile sorgulanır.