cempehlivan/CP.VPOS

taksitlendirme seçenekleri hk

Closed this issue · 10 comments

Merhaba,

test bölümünde taksitlendirme ile ilgili örnekler konulabilir mi?

Merhabalar,
Ortak poslarda taksit seçenekleri API üzerinden veriliyor. VPOSClient.BINInstallmentQuery methodunu kullanarak kartın ilk 6 hanesi ve çekilecek olan tutarı göndererek bu karta yapılabilecek taksit seçeneklerini(varsa) alabilirsiniz.

Ancak direkt olarak bankalardan sanal pos aldıysanız, bankalar bu şekilde servis vermiyor. Bankalar sadece kendine ait kredi kartlarına ve ortaklık programındaki başka banka kartlara taksit yapabiliyor. Mesela garanti bankasından sanal pos aldınız, garanti bankası kredi kartlarına + bonus özellikli başka banka kartlarına taksit yapabiliyor. Yani hem garanti bonus kredi kartına hem de teb bonus kredi kartına taksit yapabilirsiniz.

Tabi bunun kurgusu tamamiyle manuel ilerliyor. Bankalar kartlarının BIN listesisini API üzerinden vermiyor. Bazılar excel olarak satıcı panelinde paylaşıyor bazılar sanal pos dökümanları sayfasında paylaşıyor. Ben de tüm bankaların BIN bilgilerini toplayıp yine CP.VPOS dll içerisine servis olarak koydum. VPOSClient.CreditCardBinQuery methodunu kullanarak BIN numarasına ait detaylı bilgilere ulaşabilirsiniz. Aynı zamanda bu BIN numarasına hangi bankaların taksit yapabileceği bilgisini de alabilirsiniz.

Örneğin yapıkredi world özellikli kredi kartını sorguladığınızda banksWithInstallments alanında size ["0067", "0015", "0203", "0135"] şeklinde bu karta taksit yapabilecek banka kodları dönecek. Bu bankalardan herhangi birinde sanal posunuz varsa kendi sisteminizde ilgili banka için tanımladığınız taksit seçeneklerini ekrana yükleyebilirsiniz. Banka entegrasyonun ortak pos mu, taksitler API den mi sorgulanmalı yoksa kendimden mi çekmeliyim? cevaplarını ise VPOSClient.AllBankList methodundan sizin bankanızın modelinde CollectiveVPOS true ise bu ortak postur. InstallmentAPI true ise taksit seçeneklerini API üzerinden sorgulayabilirsiniz.

Özetle;
Bankadan direkt pos aldıysanız, taksit seçeneklerini kendi sisteminizde tanımlamanız gerekmekte. Girilen kart bilgisine taksit yapabilir miyim kısmında VPOSClient.CreditCardBinQuery sorgulamasında bu karta taksit yapabilen bankalar listesinde sizin bankanız varsa taksit yapabilirsiniz.

Bununla ilgili örnekleri unittest e ekleyeceğim.

Elinize sağlık.
teşekkürler bilgilendirme için...

taksitleri api ile nasıl çektiğimizi ve api den taksitleri çekemiyorsak sistemimizden taksitleri nasıl organize edeceğimize ilişkin örneği ne zaman yayınlarsınız... bankaları tespit edebiliyorum ama taksitleri nasıl göstereceğiz.

[TestMethod]
public void NestpayCreditCardBinQuery()
{
    CreditCardBinQueryRequest request= new CreditCardBinQueryRequest();
    request.binNumber = "557113";
    var resp = VPOSClient.CreditCardBinQuery(request);
    Console.WriteLine($"card bank: {resp.bankCode}");

    foreach (var item in resp.banksWithInstallments)
    {
        Console.WriteLine($"supported bank code: {item}");
    }
    //AllInstallmentQueryRequest allInstallmentQueryRequest = new();
    //var list = VPOSClient.AllInstallmentQuery(allInstallmentQueryRequest, _nestpayAkbank);
    
    var bank = VPOSClient.AllBankList(i=>i.BankCode == CP.VPOS.Services.BankService.HSBC).FirstOrDefault();

    Console.WriteLine($"CollectiveVPOS: {bank.CollectiveVPOS} ");
    Console.WriteLine($"InstallmentAPI: {bank.InstallmentAPI} ");

    if (bank.CollectiveVPOS && bank.InstallmentAPI)
    {
        Console.WriteLine($"message: api is ok ");
    }
    Assert.IsTrue(true);
}

Merhaba,
hocam ortak pos sistemi kullanmıyorsak database de bir tabloda hangi bankaya hangi taksitleri uyguladığımızı kaydediyoruz (varsa komisyonu yansıtarak). Bu durumda hangi bankalara desteklediği bilgisine gerek kalmıyor değil mi? Biz zaten onları kendi database imize kaydediyoruz.

InstallmentOptions

ID BankCode Installment CommissionPercentage
9 0046 2 0
10 0046 3 0
11 0046 4 0
13 0046 5 0

foreach (var item in resp.banksWithInstallments)
{
Console.WriteLine($"bank code: {item}");
}

Evet aynen öyle. CreditCardBinQuery metodundan kartın bankasını ve hangi banka poslarının bu karta taksit yapabileceğini responsedaki banksWithInstallments listinden alıyorsunuz. Bu listedeki bankalar bu karta taksit yapabiliyor. Listedeki bankalardan bir tanesinin sanal posuna sahipseniz onun taksit seçeneklerini db den çekip gösteriyorsunuz ve ödeme işlemini de o banka sanal posunuza gönderiyorsunuz.
Benim taksit tablom aşağıdaki gibi;

CREATE TABLE [b2c].[VPOSBankInstallment](
	[BankCode] [VARCHAR](4) NOT NULL,
	[Installment] [TINYINT] NOT NULL,
	[CommissionRate] [REAL] NOT NULL,
 CONSTRAINT [PK_VPOSBankInstallment] PRIMARY KEY CLUSTERED 
(
	[BankCode] ASC,
	[Installment] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 95, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO

ALTER TABLE [b2c].[VPOSBankInstallment] ADD  CONSTRAINT [DF_VPOSBankInstallment_CommissionRate]  DEFAULT ((0)) FOR [CommissionRate]
GO

Teşekkürler hocam...

ortak pos sistemi ile ilgili bir örnek yok. test sistemi bilgisi, kart bilgisine ve api ile taksitlerin nasıl geldiğine dair örnek olsa ortak pos sisteminin nasıl çalıştığını anlayabiliriz.

iyzico test ortamına kayıt olup api keylerini hemen alabilirsiniz. daha sonra repomuzdaki readme de belirtildiği şekilde iyzico ayarlarınızı girin ve ortak posta nasıl olduğunu test edin.

https://sandbox-merchant.iyzipay.com/auth/register buradan kayıt olun.

test kartları ise dökümanlarında mevcut: https://dev.iyzipay.com/tr/test-kartlari

Teşekkürler hocam
buraya üye oluşturup deneme yapacağım.

Kendi banka postumuzu kullandığımızda kart tipini kontrol etmemiz gerekiyor mu?Debit, Credit... Eğer debit kart ise tek çekim göndermemiz gerekli diye düşünüyorum. Teorik kısmı bilmediğim için detay soruyorum. Debit karta taksit seçeneği gönderirsek sistem hata verir değil mi? (bu karta taksit yapamazsınız şeklinde)

if (response.cardType == CP.VPOS.Enums.CreditCardType.Credit)
{
//taksit seçenekleri
}

Evet, debit kart ön ödemeli kart olduğu için taksit yapılamaz. Taksitli gönderseniz bile sanal pos hata verecektir.

CreditCardBinQueryResponse modelinin içerisine bankName public string bankCode { get; set; }
de konulsa VPOSClient.CreditCardBinQuery(bin) sorgularında banka isminin de getirilmesi sağlanabilir mi ?

sandbox üzerinden deneme yapıyorum ancak "3D Secure doğrulaması geçersiz" hatası alıyorum. bu hatayı nasıl geçebilirim
https://ibb.co/dQM7p8c
https://ibb.co/4pS0KHF

hocam iyzico da hesap oluşturdum. 3d ile ilgili sorun yaşıyorum. Yukarıdaki soruyu iyzico ya ilettim verdikleri cevap aşağıdaki gibidir. Akbak test işleminde sorun çıkmıyor 3d yi geçebiliyorum ancak iyzico da hata alıyorum. Yukarıdaki resimdeki gibi kodu giriyorum 3D Secure doğrulaması geçersiz diyor.

Details

Merhaba,

İletmiş olduğunuz bilgiler için teşekkür ederiz. Sms onay aşaması (OTP) başarılı gerçekleştiğini görüntülemekteyiz. mdStatus = 1 --> Doğrulama başarılıdır. 3ds ilk aşaması başarılı tamamalanmıştır. Request belirtmiş olduğunuz callbackUrl adresinize 3ds şifresi girdikten sonra callbackUrl adresinize paymentID, conversationID ve conversationData parametreleri post edilir. Bu parametreler ile bir sorgu daha gerçekleştirip ödemeyi tamamlayabilirsiniz.

https://github.com/iyzico/iyzipay-php/blob/master/samples/create_threeds_payment.php

Ek olarak kontrolünüzü rica ederiz;
Entegrasyon sırasında sandbox(test) ortamının api anahtarları ile product(gerçek ortam) endpointi kullanıldığında bu hata mesajı alınabilmektedir.

https://merchant.iyzipay.com/login panelinizin ayarlar - firma ayarları sekmesinde bulunan api ve güvenlik anahtarlarını kullanıyorsanız baseurl değeri olarak https://api.iyzipay.com

https://sandbox-merchant.iyzipay.com/login panelinizin ayarlar - firma ayarları sekmesinde bulunan api ve güvenlik anahtarlarını kullanıyorsanız baseurl değeri olarak https://sandbox-api.iyzipay.com baseurl değerini kullanmalısınız.

Saygılarımla,

pairs de mesaj success olarak gözüküyor. response error olarak düşüyor.

https://ibb.co/R4bnDjd