|
Project Information
Featured
Downloads
Links
|
Python ESTÖzgür Vatansever <ozgurvt@gmail.com> Bu arabirim EST tabanlı sanal pos arabirimlerine bağlanıp, belirli metodları çalıştırmak için tasarlanmıştır. EST Türkiye'nin e-Ticaret güvenli ödeme sistem ve hizmetleri sağlayıcısıdır. Türkiye'de e-Ticaret ödemeleri alanında faaliyet gösteren bankaların tamamına yakını bunu EST Ürün, Çözüm, Hizmetlerinden bir veya daha fazlasını kullanarak gerçekleştirmektedir. PHP programlama diliyle geliştirilmiş aynı arabirimi kullanmak için aşağıdaki sayfayı ziyaret ediniz: Önemli not: Bu arabirim sadece aşağıdaki bankaların Sanal POS arabirimleri ile uyumludur. Diğer EST tabanlı banka arabirimleri için kullanılamamaktadır. KURULUM Öncelikle; sudo apt-get install python-setuptools Kütüphaneyi bilgisayarınıza indirmek için 2 tane seçeneğiniz var. KULLANIMIÖnemli Not Sanal POS sistemine yapılan bütün istekler EST sınıfı tarafından düzenlenmektedir. EST sınıfının yukarıdaki işlemleri yapabilmesi için aşağıdaki metodlar tanımlanmıştır. >>> from est import est
>>> est.EST?
>>> Constructor information:
>>> Definition: est.EST(self, slug, company, name, password, debug=False)
>>> Docstring:
@slug: is a parameter that indicates which pos service you are going to connect.
@company: is a string value which is your company id.
@name: is your username.
@password: is your password.
>>> api = est.EST("akbank", "100100000", "AKTEST", "AKTEST123", debug = True)
>>> # api = est.EST("isbank", "isyerino", "kullaniciadi", "parola", debug = True)
>>> # api = est.EST("finansbank", "isyerino", "kullaniciadi", "parola", debug = True) Sipariş verme isteği göndermemiz için pay() metodunu çağırmanız gerekmektedir. Bu metodu çağırmak için sırasıyla aşağıdaki parametreler gerekmektedir. Sipariş numarası vermeniz şiddetle tavsiye edilir. Vermezseniz POS sistemi yaptığınız siparişe sizin yerinize sipariş numarası verir.
>>> cc_num = "4848480011226398" # kart numarası
>>> cc_cvv = "000"
>>> month = "06" # Haziran
>>> year = "14"
>>> amount = Decimal("25")
>>> taksit = None # peşin
>>> order_num = "qwaszx" # sipariş numarası
>>> result, details = api.pay(cc_num, cc_cvv, month, year, amount, taksit, order_num)
>>> print result
>>> True
>>> print details
>>> {'error_msg': '',
>>> 'groupid': u'qwaszx',
>>> 'host_msg': '',
>>> 'orderid': u'qwaszx',
>>> 'response': u'Approved',
>>> 'return_code': u'00',
>>> 'transaction_time': datetime.datetime(2010, 4, 19, 17, 20, 47),
>>> 'transid': u'4b5c6fb1-16dc-3000-002e-0003bafa9a61',
>>> } >>> result, details = api.pay(cc_num, cc_cvv, month, year, amount, taksit, order_num)
>>> print result
>>> False
>>> print details
>>> {'error_msg': u"The transaction type 'Auth' requested is not allowed for an order
>>> that already has a valid transaction associated with it.",
>>> 'groupid': '',
>>> 'host_msg': u'Onay alinamadi lutfen tekrar deneyiniz.',
>>> 'orderid': u'qwaszx',
>>> 'response': u'Error',
>>> 'return_code': u'99',
>>> 'transaction_time': '',
>>> 'transid': u'4b5c6fb1-16f0-3000-002e-0003bafa9a61',
>>> } Ekstra parametrelerde fatura ve teslimat adresi ile ilgili detayları set edebilirsiniz. Kullanabileceğiniz ekstra parametreler;
Sipariş numarası girmeyelim ve teslimat ve fatura adreslerine isim verelim.
>>> result, details = api.pay(cc_num, cc_cvv, month, year, amount, taksit, shipping_address_name = "Teslimat Adresi Adı", billing_address_name = "Fatura Adresi Adı")
>>> print result
>>> True
>>> print details
>>> {'error_msg': '',
>>> 'groupid': u'1271689783855-84.51.49.52-1665',
>>> 'host_msg': '',
>>> 'orderid': u'1271689783855-84.51.49.52-1665',
>>> 'response': u'Approved',
>>> 'return_code': u'00',
>>> 'transaction_time': datetime.datetime(2010, 4, 19, 18, 9, 46),
>>> 'transid': u'4b5c6fb1-1760-3000-002e-0003bafa9a61'
>>> } >>> result, details = api.pay(cc_num, cc_cvv, month, year, amount, taksit, orderid = "abcdef", typ = "PreAuth")
>>> print result
>>> True
>>> print details
>>> {'auth_code': u'852468',
>>> 'error_msg': '',
>>> 'groupid': u'abcdef',
>>> 'host_msg': u'Onay',
>>> 'orderid': u'abcdef',
>>> 'response': u'Approved',
>>> 'return_code': u'00',
>>> 'transaction_time': datetime.datetime(2010, 5, 6, 3, 44, 3),
>>> 'transid': u'10126-DsDJ-1-0341'
>>> } >>> result, details = api.postAuth(amount, "abcdef")
>>> print result
>>> True
>>> print details
>>> {'auth_code': u'950599',
>>> 'error_msg': '',
>>> 'groupid': u'abcdef',
>>> 'host_msg': '',
>>> 'orderid': u'abcdef',
>>> 'response': u'Approved',
>>> 'return_code': u'00',
>>> 'transaction_time': datetime.datetime(2010, 5, 6, 3, 48, 40),
>>> 'transid': u'10126-DwoI-1-0347'
>>> } Siparişi yada yaptığınız postAuth isteğini iptal etmek için cancel() metodu çağrılmalıdır. Sipariş numarası parametre olarak verilmelidir. >>> result, details = api.cancel("abcdef")
>>> print result
>>> True
>>> print details
>>> {'error_msg': '',
>>> 'groupid': 'abcdef',
>>> 'host_msg': '',
>>> 'host_ref_num': u'123456789012',
>>> 'orderid': u'abcdef',
>>> 'response': u'Approved',
>>> 'return_code': u'00',
>>> 'transid': u'4b5c6fb1-16dc-3000-002e-0003bafa9a61'
>>> } Var olmayan ya da daha önceden iptal edilmiş bir siparişi tekrar iptal etmeye çalışılırsa sunucudan aşağıdaki gibi bir cevap alınır. >>> result, details = api.cancel("3efesfsdfsdfds")
>>> print result
>>> False
>>> print details
>>> {'error_msg': u"Did not find a unique, qualifying transaction for Order
>>> '3efesfsdfsdfds'.",
>>> 'groupid': '',
>>> 'host_msg': u'Girilen siparis numarasina ait uygun islem bulunamadi.',
>>> 'host_ref_num': '',
>>> 'orderid': u'3efesfsdfsdfds',
>>> 'response': u'Error',
>>> 'return_code': u'99',
>>> 'transid': ''
>>> } Siparişten belli bir miktarın tutarının müşterinin kartına geri yüklenmesi işlem için refund() metodu çağrılmalıdır. >>> result, details = api.refund(amount = decimal.Decimal("10"), orderid = "1271689783855-84.51.49.52-1665")
>>> print result
>>> True
>>> print details
>>> {'error_msg': '',
>>> 'groupid': u'1271689783855-84.51.49.52-1665',
>>> 'host_msg': '',
>>> 'host_ref_num': u'123456789012',
>>> 'orderid': u'1271689783855-84.51.49.52-1665',
>>> 'response': u'Approved',
>>> 'return_code': u'00',
>>> 'transid': u'4bc5525c-6798-3000-002d-0003bafa9a61',
>>> } >>> result, details = api.refund(amount = decimal.Decimal("9999"), orderid = "1271689783855-84.51.49.52-1665")
>>> print result
>>> False
>>> print details
>>> {'error_msg': u'Credit cannot be performed because the credit amount is greater than >>> the sum of settled and captured transactions.',
>>> 'groupid': '',
>>> 'host_msg': u'Iade tutari satis tutarindan buyuk olamaz.',
>>> 'host_ref_num': '',
>>> 'orderid': u'1271689783855-84.51.49.52-1665',
>>> 'response': u'Error',
>>> 'return_code': u'99',
>>> 'transid': u'4bc5525c-679c-3000-002d-0003bafa9a61'
>>> } >>> result, details = api.cancel(orderid = '1271689783855-84.51.49.52-1665', transid = '4bc5525c-679c-3000-002d-0003bafa9a61') >>> print result >>> True İptal(cancel) ile İade(refund) Arasındaki Farklar Bilindiği gibi sanal poslarda da gerçek pos hesapları gibi gün sonu kavramı
vardır. Gün sonu kavramı; gün içinde pos ile ilgili yapılan işlemlerin (para
çekimi(pay) ve para iadesi(refund) gibi) gün sonunda pos sahibinin banka hesabına
aktarılması demektir.
Siparişin iptal(cancel) işlemi gün sonu gelmeden sadece aynı gün içinde
yapılabilir. Önceki güne ait siparişler iptal edilemezler. Önceki güne ait siparişler
ancak refund() metodu ile siparişin tutarı girilerek iade edilirler. Eğer sipariş cancel() metodu ile iptal edilirse; siparişin yapıldığı ve
iptal edildiği gibi detaylar kart sahibinin ektresinde görünmez. Eğer refund()
metodu ile iade yapılırsa iade işlemi kart sahibinin ekstresine yansır. Bankaların
çoğunda gün sonu akşam saat 22:00 dir. Fakat bunu bankalar kendilerine göre
değiştirebilirler. Daha önceden verilmiş bir siparişin detayı öğrenilmek isteniyorsa getDetail() metodu kullanılmalıdır. Bu metoda sipariş numarası parametre olarak verilir. >>> result = api.getDetail("1271689783855-84.51.49.52-1665")
>>> print result
>>> {'amount': Decimal('1.00'),
>>> 'error_msg': u'00:1271689783855-84.51.49.52-1665 numarali siparise ait kayit
>>> bulundu',
>>> 'host_ref_num': u'123456789012',
>>> 'num_code': u'01800099999999',
>>> 'orderid': '1271689783855-84.51.49.52-1665',
>>> 'return_code': u'00',
>>> 'transaction_time': datetime.datetime(2010, 4, 19, 15, 56, 35),
>>> 'transid': u'4bc5525c-67a0-3000-002d-0003bafa9a61',
>>> } >>> now = datetime.datetime.now()
>>> td = datetime.timedelta(days = 1)
>>> yesterday = now - td
>>> result = api.getDetails(yesterday, now)
>>> {'details': [<est.est.OrderDetail object at 0x263edd0>,
>>> <est.est.OrderDetail object at 0x263ee90>,
>>> <est.est.OrderDetail object at 0x263ef90>,
>>> <est.est.OrderDetail object at 0x2661050>,
>>> <est.est.OrderDetail object at 0x26610d0>,
>>> <est.est.OrderDetail object at 0x2661150>,
>>> <est.est.OrderDetail object at 0x26612d0>,
>>> <est.est.OrderDetail object at 0x2661950>],
>>> }
>>> details = result.get("details")
>>> siparis = details[0]
>>> print siparis.type
>>> 'SATIS'
>>> siparis.amount
>>> Decimal("99.90")
>>> print siparis.installment
>>> 0
>>> siparis.orderid
>>> "qwaszx"
>>> siparis.date
>>> '2010-04-19 03:09:00'
|
Akbank
İşbank
Finansbank
Halkbank
Anadolubank