Giter Club home page Giter Club logo

iyzipay-dotnet's Introduction

iyzipay-dotnet

NuGet

You can sign up for an iyzico account at https://iyzico.com

Requirements

One of the runtime environment is required from below

  • .NET Framework 4.5

Installation

For now you'll need to install following libraries:

  • To install Iyzipay, run the following command in the Package Manager Console
Install-Package Iyzipay

Or you can download the latest .dll from: https://github.com/iyzico/iyzipay-dotnet/releases/latest

For .NET Framework:

For .NET Standard 2.1:

Note

For .Net Framework usage, decimal deserialized to string with trim "0" operation from the end by newtonsoft library.

// true for .net 45
bool isEqual = payment.IyziCommissionRateAmount.Equals("0.028875")

For .Net Standard usage, decimal deserialized to string without trim operation by newtonsoft library.

// false for .net standard
bool isEqual = payment.IyziCommissionRateAmount.Equals("0.028875");

// true for .net standard
bool isEqual = payment.IyziCommissionRateAmount.Equals("0.02887500");

Usage

Options options = new Options();
options.ApiKey = "your api key";
options.SecretKey = "your secret key";
options.BaseUrl = "https://sandbox-api.iyzipay.com";
		
CreatePaymentRequest request = new CreatePaymentRequest();
request.Locale = Locale.TR.ToString();
request.ConversationId = "123456789";
request.Price = "1";
request.PaidPrice = "1.2";
request.Currency = Currency.TRY.ToString();
request.Installment = 1;
request.BasketId = "B67832";
request.PaymentChannel = PaymentChannel.WEB.ToString();
request.PaymentGroup = PaymentGroup.PRODUCT.ToString();

PaymentCard paymentCard = new PaymentCard();
paymentCard.CardHolderName = "John Doe";
paymentCard.CardNumber = "5528790000000008";
paymentCard.ExpireMonth = "12";
paymentCard.ExpireYear = "2030";
paymentCard.Cvc = "123";
paymentCard.RegisterCard = 0;
request.PaymentCard = paymentCard;

Buyer buyer = new Buyer();
buyer.Id = "BY789";
buyer.Name = "John";
buyer.Surname = "Doe";
buyer.GsmNumber = "+905350000000";
buyer.Email = "[email protected]";
buyer.IdentityNumber = "74300864791";
buyer.LastLoginDate = "2015-10-05 12:43:35";
buyer.RegistrationDate = "2013-04-21 15:12:09";
buyer.RegistrationAddress = "Nidakule Göztepe, Merdivenköy Mah. Bora Sok. No:1";
buyer.Ip = "85.34.78.112";
buyer.City = "Istanbul";
buyer.Country = "Turkey";
buyer.ZipCode = "34732";
request.Buyer = buyer;

Address shippingAddress = new Address();
shippingAddress.ContactName = "Jane Doe";
shippingAddress.City = "Istanbul";
shippingAddress.Country = "Turkey";
shippingAddress.Description = "Nidakule Göztepe, Merdivenköy Mah. Bora Sok. No:1";
shippingAddress.ZipCode = "34742";
request.ShippingAddress = shippingAddress;

Address billingAddress = new Address();
billingAddress.ContactName = "Jane Doe";
billingAddress.City = "Istanbul";
billingAddress.Country = "Turkey";
billingAddress.Description = "Nidakule Göztepe, Merdivenköy Mah. Bora Sok. No:1";
billingAddress.ZipCode = "34742";
request.BillingAddress = billingAddress;

List<BasketItem> basketItems = new List<BasketItem>();
BasketItem firstBasketItem = new BasketItem();
firstBasketItem.Id = "BI101";
firstBasketItem.Name = "Binocular";
firstBasketItem.Category1 = "Collectibles";
firstBasketItem.Category2 = "Accessories";
firstBasketItem.ItemType = BasketItemType.PHYSICAL.ToString();
firstBasketItem.Price = "0.3";
basketItems.Add(firstBasketItem);

BasketItem secondBasketItem = new BasketItem();
secondBasketItem.Id = "BI102";
secondBasketItem.Name = "Game code";
secondBasketItem.Category1 = "Game";
secondBasketItem.Category2 = "Online Game Items";
secondBasketItem.ItemType = BasketItemType.VIRTUAL.ToString();
secondBasketItem.Price = "0.5";
basketItems.Add(secondBasketItem);

BasketItem thirdBasketItem = new BasketItem();
thirdBasketItem.Id = "BI103";
thirdBasketItem.Name = "Usb";
thirdBasketItem.Category1 = "Electronics";
thirdBasketItem.Category2 = "Usb / Cable";
thirdBasketItem.ItemType = BasketItemType.PHYSICAL.ToString();
thirdBasketItem.Price = "0.2";
basketItems.Add(thirdBasketItem);
request.BasketItems = basketItems;

Payment payment = Payment.Create(request, options);

See other samples under Iyzipay.Samples project.

Testing

You can run particular sample by passing your credential info to "Iyzipay.Samples/Sample.cs"

Mock test cards

Test cards that can be used to simulate a successful payment:

Card Number Bank Card Type
5890040000000016 Akbank Master Card (Debit)
5526080000000006 Akbank Master Card (Credit)
4766620000000001 Denizbank Visa (Debit)
4603450000000000 Denizbank Visa (Credit)
4729150000000005 Denizbank Bonus Visa (Credit)
4987490000000002 Finansbank Visa (Debit)
5311570000000005 Finansbank Master Card (Credit)
9792020000000001 Finansbank Troy (Debit)
9792030000000000 Finansbank Troy (Credit)
5170410000000004 Garanti Bankası Master Card (Debit)
5400360000000003 Garanti Bankası Master Card (Credit)
374427000000003 Garanti Bankası American Express
4475050000000003 Halkbank Visa (Debit)
5528790000000008 Halkbank Master Card (Credit)
4059030000000009 HSBC Bank Visa (Debit)
5504720000000003 HSBC Bank Master Card (Credit)
5892830000000000 Türkiye İş Bankası Master Card (Debit)
4543590000000006 Türkiye İş Bankası Visa (Credit)
4910050000000006 Vakıfbank Visa (Debit)
4157920000000002 Vakıfbank Visa (Credit)
5168880000000002 Yapı ve Kredi Bankası Master Card (Debit)
5451030000000000 Yapı ve Kredi Bankası Master Card (Credit)

Cross border test cards:

Card Number Country
4054180000000007 Non-Turkish (Debit)
5400010000000004 Non-Turkish (Credit)

Test cards to get specific error codes:

Card Number Description
5406670000000009 Success but cannot be cancelled, refund or post auth
4111111111111129 Not sufficient funds
4129111111111111 Do not honour
4128111111111112 Invalid transaction
4127111111111113 Lost card
4126111111111114 Stolen card
4125111111111115 Expired card
4124111111111116 Invalid cvc2
4123111111111117 Not permitted to card holder
4122111111111118 Not permitted to terminal
4121111111111119 Fraud suspect
4120111111111110 Pickup card
4130111111111118 General error
4131111111111117 Success but mdStatus is 0
4141111111111115 Success but mdStatus is 4
4151111111111112 3dsecure initialize failed

iyzipay-dotnet's People

Contributors

ahmtertekn avatar bpekyavas avatar byasarcse avatar caglarp avatar can3ry avatar ccizer avatar dependabot[bot] avatar erdemdmr avatar erhmutlu avatar furkanbatuhan avatar halitsoydemir avatar iyzico-ci avatar kadriyedogan avatar ktoprakucar avatar kurtulussahin avatar mersancengiz avatar ramazanyetis avatar shuetisha avatar sotuzun avatar yyenigun avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

iyzipay-dotnet's Issues

Format Price hatası

RequestFormatter içinde FormatPrice metodunda parametre olarak örn:35.5 gönderilince sonuna .0 ekliyor ilk baştaki kontrol sebebi ile. Bu nedenle de Request "Geçersiz imza" hatası alıyor.

if (!price.ToString().Contains(","))
{
return price + ".0";
}

Sürüm açıklamaları yok

Canlıda kullandığımız eski sürümümüzde bir async-await problemi yasıyoruz. Çok kısa bir süre önce yeni bir versyion cıkmıssınız ancak versiyonlarınızda hic bir sürüm notu yok. Gözümüzü baglayıp son sürüme gecmek istemiyoruz. Sürüm notları paylasmayı düşünüyor musunuz ya da paylastıgınız ve bizim goruntuleyebileceğimiz bir adres var mıdır?

CreateCheckoutFormInitializeRequest Decimal Seperator

Selam arkadaşlar,

CreateCheckoutFormInitializeRequest içerisinde PaidPrice veya Price için Türkçe ondalık ayracı olan virgül ile ondalık bir değer yolladığımızda "geçersiz istek" hatası alıyoruz.

Bu durumun Locale farklılığından ötürü olduğunu tespit ettik. Varsayılan nokta ayraç kullanıldığında sorun yok.

Mevcut durumda aynı request içerisinde "locale" adında bir parametre de gönderiliyor. Dokümantasyonunuzdan okuduğum kadarıyla da bu parametre "istek sonucunda dönen metinlerin dilini ayarlamak için" kullanılıyor, yani genel olarak kültürü belirlemiyor.

Ancak belirlerse daha güzel olabilir. Böylece biz de nokta mı virgül mü gereksiz kasmak zorunda kalmayız:
request.PaidPrice =ShoppingCart.GrandTotal.ToString(new NumberFormatInfo() {NumberDecimalSeparator="." });

Öneridir.

Teşekkürler
Onur

HttpClient/Request problemi ve async/await kullanılamaması

Mevcut versiyondaki RestHttpClient objesi her request için yeniden bir HttpClient yaratıyor.

public T Post<T>(String url, WebHeaderCollection headers, BaseRequest request)
        {
            HttpClient httpClient = new HttpClient();
            foreach (String key in headers.Keys)
            {
                httpClient.DefaultRequestHeaders.Add(key, headers.Get(key));
            }
            HttpResponseMessage httpResponseMessage = httpClient.PostAsync(url, JsonBuilder.ToJsonString(request)).Result;
            return JsonConvert.DeserializeObject<T>(httpResponseMessage.Content.ReadAsStringAsync().Result);
        }

HttpClient objesi bir kere oluşturup çok sefer kullanmak için tasarlanmış bir nesne olmasından dolayı kullanıcıların canını sıkacak durumlar oluşabilir diye düşünüyorum. Bu konuda aşağıdaki linkler değerlendirilebilir.
Improper Instantiation antipattern
HttpClient per call in a Web API client

Ayrıca HttpClient'ın async fonksyionları Task.Result kullanılarak çağıran threadi bloklayacak şekilde kullanılmış. Buna alternatif olarak async/await kullanılması ASP.NET kullanıcılarına faydalı olacaktır diye düşünüyorum.
Async Programming : Introduction to Async/Await on ASP.NET

Task.Result Property

Accessing the property's get accessor blocks the calling thread until the asynchronous operation is complete; it is equivalent to calling the Wait method.

Async and Await

I like to think of “await” as an “asynchronous wait”. That is to say, the async method pauses until the awaitable is complete (so it waits), but the actual thread is not blocked (so it’s asynchronous).

Authorization sorunu

Merhabalar
iyzipay-dotnet kütüphanesi alternatifi yeni bir kütüphane yapıyorum. Taksit sorgulama için aşağıdaki bilgileri post ediyorum. Bu da giden header bilgileri :

HEADERS
POST https://sandbox-api.iyzipay.com/payment/iyzipos/installment
Authorization: IYZWS sandbox-afXhZPW0MQlE4dCUUlHcEopnMBgXnAZI:KGS7m4CDQA40g6r7zjRK+RaDOwM=
x-iyzi-rnd: 270420191009585715
Accept: application/json
Content-Type: application/json; charset=utf-8
Host: sandbox-api.iyzipay.com
Content-Length: 98
Expect: 100-continue

{"binNumber":"554960","price":"100.0","locale":"tr","conversationId":"123456789","currency":"TRY"}

SORUN
Authorization için kullandığım PKI string bu dizilimde olunca taksitleri veriyor :
[locale=tr,conversationId=123456789,binNumber=554960,price=100.0,currency=TRY]

Bu dizilimde gidince yani key sırası değişince :
[binNumber=554960,price=100.0,locale=tr,conversationId=123456789,currency=TRY]

api'nin yanıtı şu şekilde oluyor :
{"status":"failure","errorCode":"1000","errorMessage":"Geçersiz imza","locale":"tr","systemTime":1556392201687,"conversationId":"123456789"}

sorun nerede acaba?

CheckoutForm PaymentStatus Enum'u yok

Selam Arkadaşlar,

Model altında PaymentStatus enum değerleri mevcut değil. Dokümantasyonunuzdan gördüğüm kadarıyla olası değerler şöyle:
SUCCESS, FAILURE, INIT_THREEDS, CALLBACK_THREEDS, BKM_POS_SELECTED, CALLBACK_PECCO

Bu değerler güncel mi?

Enum olarak eklerseniz süper makbule geçer. Keza bizler de kendi kodlarımızda hard coded kullanmak zorunda kalmayız, güncelliğinden de emin oluruz.

Bilginize, Teşekkürler
Onur

iyzico payments form

hello,
how to implement the call to the standard form for iyzico payments, from asp.net page, and retrieve the payment notification state?

thanks

Retrieve Pending Approval Request List ?

I want to query all payments (pendingApproval,approved,disapproved etc.) in a specific time interval like on the iyzico merchant panel. I couldn't find any method related with this subject in iyzipayClient.

The reason why i ask this, i have to see all the pending approval transactions made by Alo-tech.
It is really hard to find Alo Tech's requests merchant panel, I want to approve those payments on my admin panel instead of Iyzico Merchant Panel.

Thanks.

JSONReader Exception

Merhabalar,
Sand-box ortamında test ederken hiçbir sorunla karşılaşmıyorum,bütün sonuçları düzgün alabiliyorum.Fakat
gerçek api ve secretkeyi girip base-url'e kendi sitemin urlsini girdiğimde aşağı daki hatayı alıyorum base-url: options.BaseUrl = "https://www.ornek.com";

hata :

An exception of type 'Newtonsoft.Json.JsonReaderException' occurred in Newtonsoft.Json.dll but was not handled in user code

Additional information: Unexpected character encountered while parsing value: <. Path '', line 0, position 0.

Sandbox hesabıyla Ödeme İşlemleri İşlerken Hata Kodu 11 Alınıyor

Merhaba,
Dil ayarı olarak "tr" ile ödeme yapmaya çalıştığımda, "mesaj: Geçersiz istek" ve "hata grubu: null" ile "hata kodu: 11" alıyorum. "en" olarak değiştirdiğimde işlem başarıyla işleniyor.
Ne yazık ki, yukarıdaki hata dokümantasyonda hata kodlarının altında listelenmiyor, bu yüzden ne anlama geldiğine dair hiçbir fikrim yok, yardımcı olabilirseniz sevinirim.
Şimdiden teşekkürler.

Be careful about third party libraries

There is some other libraries that can steal sensitive information of user's apps.

screen-05

You may report them and remvoe from NuGet, Most of people can use other libraries by mistake. And that libraries can steal sensitive data by sending to their owners before sending iyzico.

there is no commercial parameter in installment and bin services

Hi,
Could you add commercial parameter to the response of installment and bin check services.
Api returns this information but it is not possible to get it on .net.
Thanks
This is raw response of bin service
{
"binNumber": "542119",
"cardType": "CREDIT_CARD",
"cardAssociation": "MASTER_CARD",
"cardFamily": "World",
"bankName": "Vakıfbank",
"bankCode": 15,
"commercial": 0,
"status": "success",
"locale": "tr",
"systemTime": 1596634385507,
"conversationId": "123456789"
}

ItemApproval Hata Kodu: 5067

Item Approval işlemini yapmaya çalıştığımda oluşturduğum Approval objesinde 5067 kodlu "Sadece marketplace üye işyerleri ödeme kırılımı onayı verebilir" mesajlı uyarıyı veriyor. Gönderdiğim tüm verileri kontrol ediyorum, hiç bir yanlışlık yok fakat sonuç böyle oluyor.
ekran resmi 2018-02-07 15 24 14
ekran resmi 2018-02-07 15 23 57
ekran resmi 2018-02-07 15 23 46

3d dönüş ekranında hata mesajları(CheckoutForm) görünmüyor

Merhaba,

İyzipay de hata yönetimi için “başarısız işlem testi” gerçekleştirmek istiyorum.
Hata yönetimini sağlayabilmek için gerçek kart bilgilerini doğru olarak girdim ve kartın 3d ekranında ‘Vazgeç’ yaparak çıktım.
Dönen değerlerde hata mesajı boş geliyor(ErrorCode,ErrorGroup,ErrorMessage).
image

2.0.0'dan 2.1.2'ye update sorunu

Guncelleme yaparken references'tan dll'i kaldiriyor ancak yerine yeni dll'i vermiyor. Packages altinda guncel versiyonu gorebiliyorum.
Framework 4.5.2
Json 9.0.1

FraudStatus boş geliyor !

3D ile ödeme işlemi yapmak istediğimizde eğer kredi kartı fraud korumasına takılırsa (Fraud suspect hatası geri dönerse) FraudStatus değeri boş geliyor. Normalde 0, 1 veya -1 olması gerekmiyor mu ?

3Dsiz ödemede instance almada exceptiona düşme

3dsiz ödeme için
CreatePaymentRequest request = new CreatePaymentRequest();
başta aldığım instance da bazı ödemelerde "Object reference not set to an instance of an object." alıyorum.Diğer ödemelerin çoğunda başarılı olarak geçiyor...

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.