Sağlayıcı Tahsilatı
Sağlayıcınızla anlaşmanız primi sağlayıcının tahsil etmesini öngörüyorsa prim sizin ödemenize eklenmez. Prim, sizin ödemenizden ayrı olarak sağlayıcınız tarafından çekilir. Çekimi POST /api/v1/insurance/orders/{orderId}/pay ile başlatırsınız.
- Önce sizin ödemeniz alınır. Siparişi bir Lunixi ödemesine bağladıysanız prim, o ödeme tahsil edildikten sonra çekilebilir. Sizin ödemeniz alınmadıysa sağlayıcıya ödeme gönderilmez.
- Prim ayrı bir çekimdir. Alıcı iki ayrı çekim görür: sizin ödemeniz ve sağlayıcının prim çekimi. Primin çekilememesi sizin ödemenizi etkilemez.
- Prim Lunixi ödemenizden geçmez. Prim ödeme kaydınıza ve payout'unuza girmez; sağlayıcıya doğrudan ödenir.
- Poliçe, prim çekildikten sonra otomatik olarak istenir.
issue-policyçağırmanız gerekmez.
Bu yol yalnızca API yolunda kullanılır. Checkout Form'da yalnızca primi sizin tahsil ettiğiniz ürünler sunulur.
Başlamadan önce
- Panelde POS Merkezi > Sigorta sayfasında, bağlantınızdaki üründe Primi kim tahsil ediyor sorusunu Sağlayıcı tahsil eder olarak seçin: Sağlayıcı Bağlantısı › Bağlantıdaki ürünler. Liste yalnızca ürünün desteklediği biçimleri gösterir.
- Bu ürünün teklif seçeneklerinde ve siparişlerinde
premiumCollectedBydeğeriPROVIDER'dır. - Sağlayıcının ürünü primi iki biçimden biriyle çeker:
| Biçim | paymentInput | Sizin göndereceğiniz |
|---|---|---|
| Kartla | CARD | Alıcının kart bilgisi. Yalnızca PCI-DSS sertifikalı merchant'lar gönderebilir; bkz. Kart bilgisi. |
| Sağlayıcının ödeme sayfasında | HOSTED | Kart göndermezsiniz. Alıcıyı nextAction ile yönlendirirsiniz; bkz. Alıcının adımı. |
Akış
…, /api/v1/insurance yerine geçer. Prim ödemenizden geçmez; çekilemezse ödemeniz geçerli kalır. issue-policy çağırmazsınız.Teklif alın ve sipariş oluşturun
Teklif ve sipariş adımları diğer akışlarla aynıdır: Teklif, Sipariş. Seçeneğin süresi dolmadan devam edin; prim çekimi seçeneğin geçerli olmasını ister.
Ödemenizi alın
- Ödemeyi Lunixi ile alıyorsanız ödemeyi sigorta alanlı kalemlerle oluşturun ve siparişi
bind-paymentile ödemeye bağlayın: Ödemeye bağlama. Sepette prim kalemi bulunmaz; prim ödemenize eklenmez. Ödeme ön provizyonsuz (doğrudan satış) olmalıdır. - Ödemeyi Lunixi dışında alıyorsanız siparişi bir ödemeye bağlamazsınız.
confirm-paymentbu siparişlerde kullanılmaz.
Primi çekin
Lunixi ödemeniz tahsil edildikten sonra (ya da kendi ödemenizi aldıktan sonra) /pay ucunu çağırın. Ürün kartla çekiyorsa alıcının kart bilgisini gövdede gönderin.
Sonucu işleyin
Yanıttaki providerPayment.status değerine göre devam edin: Sonuçlar. Sonuç ACTION_REQUIRED ise alıcıyı nextAction.redirectUrl adresine yönlendirin.
Poliçeyi izleyin
Prim çekildiğinde poliçe otomatik olarak istenir. Sonucu sipariş ucundan ya da webhook ile izleyin.
Prim çekimi: POST /api/v1/insurance/orders/{orderId}/pay
Kimlik doğrulama
Bu uç kart verisi taşıyabildiği için doğrudan ödeme uçlarıyla aynı kimlik kuralını uygular: Bearer erişim token'ı ve Ed25519 istek imzası birlikte (Step-Up). Diğer sigorta uçlarından farklı olarak Authorization başlığı zorunludur.
| Başlık | Değer |
|---|---|
Authorization | Bearer <erişim token'ı> |
X-Key-Id, X-Date, X-Nonce, Digest, X-Signature | İmza başlıkları; kurallar Akışlar › Kimlik doğrulama ile aynıdır. |
Idempotency-Key | Zorunlu. 8-200 karakterlik, boşluksuz, yazdırılabilir ASCII. |
Erişim token'ının alınması ve Step-Up kuralları: Kimlik Doğrulama. Token ile imza anahtarı aynı hesaba ve aynı ortama ait olmalıdır.
İstek
| Yol parametresi | Açıklama |
|---|---|
orderId | Sipariş kimliği (inso_…). |
| Alan | Tip | Zorunlu | Açıklama |
|---|---|---|---|
card | nesne | CARD üründe evet | Alıcının kart bilgisi; alanları aşağıda. HOSTED üründe gönderilmez. |
returnUrl | string | Hayır | Alıcının sağlayıcının sayfasından sonra döneceği sizin sayfanız. Yalnızca https; kullanıcı bilgisi ve # parçası içermez; en fazla 2048 karakter. Bkz. Dönüş. |
source lunixi-sign.sh
REQ_PATH="/api/v1/insurance/orders/<orderId>/pay"
BODY='{"card":{"cardNumber":"<kart numarası>","expireMonth":"<AA>","expireYear":"<YYYY>","cvcNumber":"<güvenlik kodu>","cardHolderName":"<kart sahibi>"},"returnUrl":"https://example.com/insurance/return"}'
lunixi_sign POST "$REQ_PATH" "$BODY"
curl -X POST "https://api-gateway.lunixi.com$REQ_PATH" \
-H "Authorization: Bearer $LUNIXI_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: insurance-pay-1001" \
-H "X-Key-Id: $LUNIXI_KEY_ID" \
-H "X-Date: $DATE" \
-H "X-Nonce: $NONCE" \
-H "Digest: $DIGEST" \
-H "X-Signature: $SIGNATURE" \
--data-raw "$BODY"Ürün sağlayıcının ödeme sayfasında çekiyorsa (HOSTED) gövde yalnızca returnUrl taşır.
Kart bilgisi
Ham kart verisini yalnızca PCI-DSS sertifikalı merchant'lar gönderebilir. Kart numarasını ve güvenlik kodunu sunucunuzda almak, saklamak ya da iletmek sistemlerinizi PCI DSS kapsamına alır. Sertifikanız yoksa bu uca kart göndermeyin. Bkz. PCI DSS.
| Alan | Tip | Açıklama |
|---|---|---|
card.cardNumber | string | Kart numarası; boşluksuz 12-19 hane. |
card.expireMonth | string | Son kullanma ayı; iki hane (01-12). |
card.expireYear | string | Son kullanma yılı; iki ya da dört hane. |
card.cvcNumber | string | Güvenlik kodu; 3 hane (AMEX'te 4). |
card.cardHolderName | string | Kartın üzerindeki ad ve soyad; en fazla 100 karakter. |
- Hesabınız PCI-DSS sertifikalı olarak tanımlı değilse kartlı üründe istek, kart işlenmeden
403 insurance.card.pci_requireddöner; sağlayıcıya istek gitmez. - Kart Lunixi'de saklanmaz. Yalnızca istek sırasında işlenir ve sağlayıcınıza iletilir. Güvenlik kodu hiçbir yerde tutulmaz.
- Kart bilgisi yanıtlara, hata iletilerine, istek kayıtlarına ve webhook'lara girmez. Hata yanıtında yalnızca hangi alanın geçersiz olduğu döner.
- Kart biçimi geçersizse (ör. kart numarası doğrulamadan geçmiyor ya da kartın süresi dolmuş) istek
422 insurance.card.invaliddöner; geçersiz alandetails.fieldalanındadır. Sağlayıcıya istek gitmez.
Yanıt
İstek tamamlandığında 200 döner. data iki nesne taşır:
| Alan | Açıklama |
|---|---|
order | Siparişin güncel hâli: Sipariş nesnesi. |
providerPayment | Prim çekimi denemesi; alanları aşağıda. |
providerPayment:
| Alan | Tip | Açıklama |
|---|---|---|
insurancePaymentId | string | Çekim denemesinin kimliği (inspay_…). |
orderId | string | Siparişin kimliği (inso_…). |
status | string | Denemenin sonucu; bkz. Sonuçlar. |
paymentInput | string | Primin nasıl çekildiği: CARD ya da HOSTED. |
amount | integer | Çekilen prim, kuruş. |
currency | string | Para birimi, ISO 4217. |
failureCode | string ya da null | Deneme başarısızsa Lunixi hata kodu, ör. insurance.payment.declined. |
nextAction | nesne ya da null | Alıcının atması gereken adım; bkz. Alıcının adımı. |
createdAt | string | Denemenin oluşturulma zamanı, ISO 8601. |
updatedAt | string | Son değişiklik zamanı, ISO 8601. |
Yanıtta sağlayıcının referansları, ödeme sayfasının adresi ve hata kodları bulunmaz. Kart bilgisi yanıtta hiçbir biçimde yer almaz.
Sonuçlar
providerPayment.status | Siparişte | Ne yapmalı |
|---|---|---|
SUCCEEDED | Tahsilat COLLECTED, poliçe PENDING | Prim çekildi. Poliçe otomatik olarak istenir; sonucu insurance.policy.issued ile alırsınız. |
ACTION_REQUIRED | Tahsilat ACTION_REQUIRED; order.nextAction dolu | Alıcıyı nextAction.redirectUrl adresine yönlendirin: Alıcının adımı. |
FAILED | Tahsilat FAILED, errorCode insurance.payment.declined | Sağlayıcı çekimi reddetti. Sizin ödemeniz geçerli kalır. insurance.policy.failed gönderilir. Alıcı başka bir kartla denemek isterse yeni bir Idempotency-Key ile yeniden çağırın. |
UNKNOWN | Tahsilat UNKNOWN | Çekimin sonucu kesinleşmedi. Çekim tekrarlanmaz; sonuç doğrulanana kadar sipariş bu durumda kalır. Alıcıdan yeniden ödeme almayın ve yeni deneme başlatmayın. |
PENDING | Tahsilat PENDING | Deneme sürüyor. Bu değeri yalnızca aynı Idempotency-Key ile tekrarladığınız isteklerde görürsünüz; siparişi sipariş ucundan izleyin. |
- Bir siparişte aynı anda tek bir açık deneme bulunur. Açık (
PENDING,ACTION_REQUIRED,UNKNOWN) ya da başarılı bir deneme varken yeni deneme başlatılamaz; aynı karta ikinci çekim yapılmaz. - İstek sağlayıcıya ulaşmadan düşerse (ör. sağlayıcıya ulaşılamıyor) para hareket etmez: hata yanıtı döner ve sipariş önceki tahsilat durumuna geri döner. İsteği bir süre sonra tekrarlayabilirsiniz.
Tekrar ve Idempotency-Key
- Prim çekimi teklifin sağlayıcıya iletilmesini ve çekimi aynı istekte yapar. İstek bir dakikadan uzun sürebilir; istemcinizin zaman aşımını buna göre ayarlayın.
- Zaman aşımı ya da
5xxsonrasında isteği aynıIdempotency-Keyve aynı gövdeyle tekrarlayın. Aynı anahtar aynı denemeyi döner; kart yeniden işlenmez ve ikinci çekim yapılmaz. - Yeni bir deneme (ör. reddedilen çekimden sonra başka bir kart) için yeni bir anahtar üretin.
Alıcının adımı (nextAction)
Sağlayıcı çekim için alıcının bir adım atmasını isterse (3D Secure doğrulaması ya da sağlayıcının ödeme sayfası) deneme ACTION_REQUIRED olur ve nextAction döner. Aynı nesne, adım beklendiği sürece siparişin nextAction alanında da bulunur.
| Alan | Tip | Açıklama |
|---|---|---|
type | string | REDIRECT |
redirectUrl | string | Alıcının tarayıcısını yönlendireceğiniz Lunixi adresi. |
expiresAt | string ya da null | Adımın son anı, ISO 8601. |
redirectUrlbir Lunixi adresidir (/api/v1/insurance/payments/{insurancePaymentId}/redirect). Lunixi alıcıyı buradan sağlayıcının sayfasına yönlendirir; sağlayıcının sayfa adresi size iletilmez.- Adresi yalnızca alıcının tarayıcısında açın. Dönüş işlendikten sonra ya da deneme artık alıcının adımını beklemiyorsa adres
404 insurance.payment.not_founddöner. - Alıcı
expiresAtanına kadar dönmezse sonuç sağlayıcıdan doğrulanır.
Dönüş
Alıcı sağlayıcının sayfasındaki adımı tamamladığında sağlayıcı Lunixi'ye döner. Ardından:
returnUrlgönderdiyseniz alıcı bu adrese yönlendirilir. Adrese şu sorgu parametreleri eklenir:insurancePaymentId,orderId,status.returnUrlgöndermediyseniz alıcıya sonuç JSON olarak gösterilir. Alıcıyı yönlendirdiğiniz her istektereturnUrlgönderin.
Dönüş tek başına ödeme kanıtı değildir. status sorgu parametresini yalnızca alıcıya ne göstereceğinizi seçmek için kullanın; primin çekildiğini ve poliçenin kesildiğini sipariş ucundan ya da webhook'tan doğrulayın.
Hatalar
| HTTP | code | Ne yapmalı |
|---|---|---|
400 | VALIDATION_ERROR | Biçimi düzeltin; Idempotency-Key eksikse de bu hata döner. |
401 | Kimlik kodları | Bearer token'ı ve imza başlıklarını kontrol edin: Kimlik Doğrulama. |
403 | AUTH_MERCHANT_MISMATCH, AUTH_ENVIRONMENT_MISMATCH | Token ile imza anahtarı aynı hesaba ve aynı ortama ait olmalıdır. |
403 | PRODUCT_NOT_ENABLED | Sigorta ürünü hesabınızda ya da anahtarınızda açık değil. |
403 | insurance.card.pci_required | Ürün primi kartla çekiyor, ancak hesabınız PCI-DSS sertifikalı olarak tanımlı değil. Kart işlenmez ve sağlayıcıya istek gitmez. |
404 | insurance.order.not_found | Sipariş bulunamadı ya da başka bir hesaba ait. |
409 | insurance.order.state_conflict | details.reason alanına bakın; aşağıdaki tablo. |
409 | insurance.quote.expired | Seçeneğin süresi doldu; yeni teklif alın ve yeni sipariş oluşturun. |
412 | insurance.payment.merchant_payment_not_captured | Siparişe bağlı Lunixi ödemeniz henüz tahsil edilmedi. Ödeme tahsil edildikten sonra tekrar deneyin. |
422 | insurance.payment.method_not_supported | Bu sipariş için sağlayıcı tahsilatı kullanılamıyor; details.reason alanına bakın, aşağıdaki tablo. |
422 | insurance.card.invalid | Kart bilgisi geçersiz; details.field alanını düzeltin. |
422 | insurance.validation.invalid | details.errors[] alanlarını düzeltin. Örneğin CARD üründe card gönderilmedi (field: card, reason: required) ya da returnUrl geçersiz (reason: https_required ya da invalid). |
422 | insurance.reference.unknown | Siparişteki bir referans kodu bu sağlayıcıda karşılanmıyor; sağlayıcıya istek gitmez. |
422 | insurance.quote.declined | Sağlayıcı teklifi aynı koşullarla kabul etmedi; yeni teklif alın. |
503 | insurance.provider.unavailable | Sağlayıcıya ulaşılamadı; para hareket etmedi. Bir süre sonra tekrar deneyin. |
Ortak kodlar: Akışlar › Yanıt ve hatalar.
Durum çakışması
reason | Anlamı |
|---|---|
not_provider_collection | Siparişin primini siz tahsil ediyorsunuz (premiumCollectedBy: MERCHANT). Primi Prim ve Ödeme sayfasındaki gibi tahsil edin. |
provider_payment_in_progress | Siparişte açık bir deneme var: sürüyor, alıcının adımını bekliyor ya da sonucu kesinleşmedi. |
premium_collected | Prim zaten çekildi. |
offer_outcome_unknown | Teklifin sağlayıcıya iletilmesinin sonucu kesinleşmedi; prim çekilmez. Sipariş incelenir. |
Desteklenmeyen tahsilat
reason | Anlamı |
|---|---|
card_path_not_enabled | Kartla sağlayıcı tahsilatı bu ortamda kullanıma açık değil. |
card_not_accepted | Ürün primi sağlayıcının ödeme sayfasında çeker (HOSTED); card göndermeyin. |
preauth_payment | Siparişe bağlı ödeme ön provizyonlu. Sağlayıcı tahsilatı yalnızca doğrudan satış ödemelerinde kullanılır. |
provider_payment_not_supported | Bu ürün ya da sağlayıcı primi sağlayıcı çekimiyle almıyor. |
İptal ve iade
- Poliçeyi
cancelucuyla iptal edebilirsiniz: İptal ve Prim İadesi › Poliçe iptali. - Prim sağlayıcıya ödendiği için prim iadesi Lunixi üzerinden yapılmaz;
refund-premiumbu siparişlerde409(reason: collected_by_provider) döner. - Kendi ödemenizden yaptığınız iadeler sigortaya bağlı değildir ve poliçeyi iptal etmez.
İlgili
- Sipariş ve Ödeme Bağlama: sipariş nesnesi ve
bind-payment - Prim ve Ödeme: primi sizin tahsil ettiğiniz akışlar
- Yalnız Sigorta Entegrasyonu: Lunixi ödemesi olmadan uçtan uca akış
- Webhook Olayları:
insurance.policy.issuedveinsurance.policy.failed - Hata Kodları: sağlayıcı tahsilatının kodları