diff --git a/iyzipay/__init__.py b/iyzipay/__init__.py index 8c034d6..b405bec 100644 --- a/iyzipay/__init__.py +++ b/iyzipay/__init__.py @@ -50,9 +50,13 @@ RetrievePaymentDetails, RetrieveTransactions, IyziLinkProduct, + SubscriptionProduct, + SubscriptionPlan, + SubscriptionCustomer, + SubscriptionCheckoutForm, + SubscriptionCheckoutDirect, IyziFileBase64Encoder) from iyzipay.pki_builder import ( # noqa PKIBuilder, ) - diff --git a/iyzipay/iyzipay_resource.py b/iyzipay/iyzipay_resource.py index be806ed..e77171a 100644 --- a/iyzipay/iyzipay_resource.py +++ b/iyzipay/iyzipay_resource.py @@ -14,7 +14,7 @@ class IyzipayResource: RANDOM_STRING_SIZE = 8 RE_SEARCH_V2 = r'/v2/' header = { - "Accept": "application/json", + "Accept": "application/json", "Content-type": "application/json", 'x-iyzi-client-version': 'iyzipay-python-1.0.38' } @@ -72,8 +72,8 @@ def prepare_auth_string(self, options, random_str, pki_string): def generate_random_string(self, size): return "".join( - random.SystemRandom().choice(string.ascii_letters + string.digits) for _ in - range(size)) + random.SystemRandom().choice(string.ascii_letters + string.digits) for _ in + range(size)) @staticmethod def generate_hash(api_key, secret_key, random_string, pki_string): @@ -89,7 +89,8 @@ def format_header_string(api_key, hashed): @staticmethod def resource_pki(request): - return 'locale=' + request.get('locale') + (',conversationId=' + request.get('conversationId') + ',' if request.get('conversationId') else ',') + return 'locale=' + request.get('locale') + ( + ',conversationId=' + request.get('conversationId') + ',' if request.get('conversationId') else ',') @staticmethod def buyer_pki(buyer): @@ -835,7 +836,9 @@ def to_pki_string(self, request): class RetrievePaymentDetails(IyzipayResource): def retrieve(self, request, options): payment_conversation_id = str(request.get('paymentConversationId')) - return self.connect('GET', '/v2/reporting/payment/details?paymentConversationId=' + payment_conversation_id, options) + return self.connect('GET', '/v2/reporting/payment/details?paymentConversationId=' + payment_conversation_id, + options) + class RetrieveTransactions(IyzipayResource): @@ -856,7 +859,7 @@ def encode(file_path): class IyziLinkProduct(IyzipayResource): def create(self, request, options): return self.connect('POST', '/v2/iyzilink/products/', options, request) - + def retrieve(self, request, options): if request.get('token') is None: raise Exception('token must be in request') @@ -873,9 +876,125 @@ def update(self, request, options): raise Exception('token must be in request') token = str(request.get('token')) return self.connect('PUT', '/v2/iyzilink/products/' + token, options, request) - + def delete(self, request, options): if request.get('token') is None: raise Exception('token must be in request') token = str(request.get('token')) return self.connect('DELETE', '/v2/iyzilink/products/' + token, options) + + +class SubscriptionProduct(IyzipayResource): + def create(self, request, options): + return self.connect('POST', '/v2/subscription/products/', options, request) + + def retrieve(self, request, options): + if request.get('referenceCode') is None: + raise Exception('referenceCode') + referenceCode = str(request.get('referenceCode')) + return self.connect('GET', '/v2/subscription/products/' + referenceCode, options, request) + + def get(self, request, options): + page = str(request.get('page') or 1) + count = str(request.get('count') or 10) + return self.connect('GET', '/v2/subscription/products/?page=' + page + '&count=' + count, options) + + def update(self, request, options): + if request.get('pricingPlanReferenceCode') is None: + raise Exception('productReferenceCode must be in request') + pricingPlanReferenceCode = str(request.get('pricingPlanReferenceCode')) + return self.connect('PUT', '/v2/subscription/products/' + pricingPlanReferenceCode, options, request) + + def delete(self, request, options): + if request.get('referenceCode') is None: + raise Exception('referenceCode must be in request') + referenceCode = str(request.get('referenceCode')) + return self.connect('DELETE', '/v2/subscription/products/' + referenceCode, options) + + +class SubscriptionPlan(IyzipayResource): + def create(self, request, options): + if request.get('referenceCode') is None: + raise Exception('referenceCode') + referenceCode = str(request.get('referenceCode')) + return self.connect('POST', '/v2/subscription/products/' + referenceCode + '/' + 'pricing-plans', options, + request) + + def retrieve(self, request, options): + if request.get('referenceCode') is None: + raise Exception('referenceCode') + referenceCode = str(request.get('referenceCode')) + return self.connect('GET', '/v2/subscription/pricing-plans/' + referenceCode, options, request) + + def get(self, request, options): + if request.get('referenceCode') is None: + raise Exception('referenceCode') + referenceCode = str(request.get('referenceCode')) + page = str(request.get('page') or 1) + count = str(request.get('count') or 10) + return self.connect('GET', + '/v2/subscription/products/' + referenceCode + '/' + 'pricing-plans?page=' + page + '&count=' + count, + options) + + def update(self, request, options): + if request.get('referenceCode') is None: + raise Exception('referenceCode must be in request') + referenceCode = str(request.get('referenceCode')) + return self.connect('PUT', '/v2/subscription/pricing-plans/' + referenceCode, options, request) + + def delete(self, request, options): + if request.get('referenceCode') is None: + raise Exception('referenceCode must be in request') + referenceCode = str(request.get('referenceCode')) + return self.connect('DELETE', '/v2/subscription/pricing-plans/' + referenceCode, options) + + +class SubscriptionCustomer(IyzipayResource): + def create(self, request, options): + return self.connect('POST', '/v2/subscription/customers', options, + request) + + def retrieve(self, request, options): + if request.get('customerReferenceCode') is None: + raise Exception('customerReferenceCode') + customerReferenceCode = str(request.get('customerReferenceCode')) + return self.connect('GET', '/v2/subscription/customers/' + customerReferenceCode, options, request) + + def get(self, request, options): + page = str(request.get('page') or 1) + count = str(request.get('count') or 10) + return self.connect('GET', + '/v2/subscription/customers/?page=' + page + '&count=' + count, + options) + + def update(self, request, options): + if request.get('customerReferenceCode') is None: + raise Exception('customerReferenceCode must be in request') + customerReferenceCode = str(request.get('customerReferenceCode')) + return self.connect('PUT', '/v2/subscription/customers/' + customerReferenceCode, options, request) + + def delete(self, request, options): + if request.get('customerReferenceCode') is None: + raise Exception('customerReferenceCode must be in request') + customerReferenceCode = str(request.get('customerReferenceCode')) + return self.connect('DELETE', '/v2/subscription/customers/' + customerReferenceCode, options) + + +class SubscriptionCheckoutForm(IyzipayResource): + def create(self, request, options): + return self.connect('POST', '/v2/subscription/checkoutform/initialize', options, request) + + def get(self, request, options): + if request.get('token') is None: + raise Exception('token must be in request') + return self.connect('POST', '/v2/subscription/checkoutform/', options, request) + +class SubscriptionCheckoutDirect(IyzipayResource): + def create(self, request, options): + return self.connect('POST', '/v2/subscription/initialize', options, request) + + def get(self, request, options): + if request.get('token') is None: + raise Exception('token must be in request') + return self.connect('POST', '/v2/subscription/checkoutform/', options, request) + diff --git a/samples/subscription_checkout_form_check.py b/samples/subscription_checkout_form_check.py new file mode 100644 index 0000000..441459c --- /dev/null +++ b/samples/subscription_checkout_form_check.py @@ -0,0 +1,36 @@ +# coding=utf-8 + +import iyzipay + +options = { + 'api_key': iyzipay.api_key, + 'secret_key': iyzipay.secret_key, + 'base_url': iyzipay.base_url +} + +address = { + 'contactName': 'Jane Doe', + 'city': 'Istanbul', + 'country': 'Turkey', + 'address': 'Nidakule Göztepe, Merdivenköy Mah. Bora Sok. No:1', + 'zipCode': '34732' +} + +request = { + 'locale': 'tr', + 'conversationId': '123456789', + 'pricingPlanReferenceCode': 'b6e6b124-f7bf-452e-b902-1fb3075fae65', + 'name': 'Adı', + 'surname': 'Soyadı', + 'email': 'test@iyzipay.com', + 'gsmNumber': '+905555555555', + 'identityNumber': '00000000000', + 'subscriptionInitialStatus': 'ACTIVE', + "callbackUrl": "https://www.merchant.com/callback", + 'shippingAddress': address, + 'billingAddress': address, +} + +checkout_form_initialize = iyzipay.SubscriptionCheckoutFormInitialize().create(request, options) + +print(checkout_form_initialize.read().decode('utf-8')) diff --git a/samples/subscription_checkout_form_initialize.py b/samples/subscription_checkout_form_initialize.py new file mode 100644 index 0000000..321a7b1 --- /dev/null +++ b/samples/subscription_checkout_form_initialize.py @@ -0,0 +1,39 @@ +# coding=utf-8 + +import iyzipay + +options = { + 'api_key': iyzipay.api_key, + 'secret_key': iyzipay.secret_key, + 'base_url': iyzipay.base_url +} + +address = { + 'contactName': 'Jane Doe', + 'city': 'Istanbul', + 'country': 'Turkey', + 'address': 'Nidakule Göztepe, Merdivenköy Mah. Bora Sok. No:1', + 'zipCode': '34732' +} + +request = { + 'locale': 'tr', + 'conversationId': '123456789', + 'pricingPlanReferenceCode': 'b6e6b124-f7bf-452e-b902-1fb3075fae65', + 'subscriptionInitialStatus': 'ACTIVE', + "callbackUrl": "https://www.merchant.com/callback", + "customer": { + 'name': 'Adı', + 'surname': 'Soyadı', + 'email': 'test@iyzipay.com', + 'gsmNumber': '+905555555555', + 'identityNumber': 11111113333, + 'shippingAddress': address, + 'billingAddress': address, + } + +} + +checkout_form_initialize = iyzipay.SubscriptionCheckoutForm().create(request, options) + +print(checkout_form_initialize.read().decode('utf-8')) diff --git a/samples/subscription_customer_create.py b/samples/subscription_customer_create.py new file mode 100644 index 0000000..c1d22a7 --- /dev/null +++ b/samples/subscription_customer_create.py @@ -0,0 +1,37 @@ +# coding=utf-8 + +import iyzipay + +options = { + 'api_key': iyzipay.api_key, + 'secret_key': iyzipay.secret_key, + 'base_url': iyzipay.base_url +} + +request = { + 'locale': 'tr', + 'conversationId': '8138', + 'name': 'Müşteri Adı', + 'surname': 'Müşteri Soyadı', + 'email': 'test@bmsumer.com', + 'gsmNumber': '+905445555555', + 'identityNumber': '00000000000', + 'billingAddress': { + 'address': 'Fatura Adres Bilgisi', + 'contactName': 'Fatura Adı Soyadı', + 'city': 'Fatura Şehri', + 'country': 'Fatura Ülkesi', + 'zipCode': 'Fatura Posta Kodu', + }, + 'shippingAddress': { + 'contactName': 'Teslimat Adı Soyadı', + 'city': 'Teslimat Şehri', + 'country': 'Teslimat Ülkesi', + 'address': 'Teslimat Adres Bilgisi', + 'zipCode': 'Teslimat Posta Kodu', + } + +} + +report = iyzipay.SubscriptionCustomer().create(request, options) +print(report.read().decode('utf-8')) diff --git a/samples/subscription_customer_get.py b/samples/subscription_customer_get.py new file mode 100644 index 0000000..16efd73 --- /dev/null +++ b/samples/subscription_customer_get.py @@ -0,0 +1,18 @@ +# coding=utf-8 + +import iyzipay + +options = { + 'api_key': iyzipay.api_key, + 'secret_key': iyzipay.secret_key, + 'base_url': iyzipay.base_url +} + +request = { + 'page': 1, + 'count': 1, + +} + +report = iyzipay.SubscriptionCustomer().get(request, options) +print(report.read().decode('utf-8')) diff --git a/samples/subscription_customer_retrieve.py b/samples/subscription_customer_retrieve.py new file mode 100644 index 0000000..6779a26 --- /dev/null +++ b/samples/subscription_customer_retrieve.py @@ -0,0 +1,18 @@ +# coding=utf-8 + +import iyzipay + +options = { + 'api_key': iyzipay.api_key, + 'secret_key': iyzipay.secret_key, + 'base_url': iyzipay.base_url +} + +request = { + 'locale': 'tr', + 'conversationId': '8138', + 'customerReferenceCode': '2eac778a-1379-4f82-93b1-8bd67ac86c05', +} + +report = iyzipay.SubscriptionCustomer().retrieve(request, options) +print(report.read().decode('utf-8')) diff --git a/samples/subscription_customer_update.py b/samples/subscription_customer_update.py new file mode 100644 index 0000000..470be1a --- /dev/null +++ b/samples/subscription_customer_update.py @@ -0,0 +1,38 @@ +# coding=utf-8 + +import iyzipay + +options = { + 'api_key': iyzipay.api_key, + 'secret_key': iyzipay.secret_key, + 'base_url': iyzipay.base_url +} + +request = { + 'customerReferenceCode': '2eac778a-1379-4f82-93b1-8bd67ac86c05', + 'locale': 'tr', + 'conversationId': '8138', + 'name': 'Müşteri Adı', + 'surname': 'Müşteri Soyadı', + 'email': 'test@bmsumer.com', + 'gsmNumber': '+905445555555', + 'identityNumber': '00000000000', + 'billingAddress': { + 'address': 'Fatura Adres Bilgisi', + 'contactName': 'Fatura Adı Soyadı', + 'city': 'Fatura Şehri', + 'country': 'Fatura Ülkesi', + 'zipCode': 'Fatura Posta Kodu', + }, + 'shippingAddress': { + 'contactName': 'Teslimat Adı Soyadı', + 'city': 'Teslimat Şehri', + 'country': 'Teslimat Ülkesi', + 'address': 'Teslimat Adres Bilgisi', + 'zipCode': 'Teslimat Posta Kodu', + } + +} + +report = iyzipay.SubscriptionCustomer().update(request, options) +print(report.read().decode('utf-8')) diff --git a/samples/subscription_plans_create.py b/samples/subscription_plans_create.py new file mode 100644 index 0000000..f75b8f9 --- /dev/null +++ b/samples/subscription_plans_create.py @@ -0,0 +1,26 @@ +# coding=utf-8 + +import iyzipay + +options = { + 'api_key': iyzipay.api_key, + 'secret_key': iyzipay.secret_key, + 'base_url': iyzipay.base_url +} + +request = { + 'locale': 'tr', + 'conversationId': 1234, + 'name': 'Premium Monthly', + 'price': 500, + 'currencyCode': 'USD', + 'paymentInterval': 'MONTHLY', + 'paymentIntervalCount': 1, + 'trialPeriodDays': 30, + 'planPaymentType': 'RECURRING', + 'recurrenceCount': 12, + 'referenceCode': '6b4803fb-c4f0-4f37-9df7-899a186e1451' +} + +report = iyzipay.SubscriptionPlan().create(request, options) +print(report.read().decode('utf-8')) diff --git a/samples/subscription_plans_delete_plan.py b/samples/subscription_plans_delete_plan.py new file mode 100644 index 0000000..d0763a1 --- /dev/null +++ b/samples/subscription_plans_delete_plan.py @@ -0,0 +1,17 @@ +# coding=utf-8 + +import iyzipay + +options = { + 'api_key': iyzipay.api_key, + 'secret_key': iyzipay.secret_key, + 'base_url': iyzipay.base_url +} + +request = { + 'locale': 'tr', + 'referenceCode': 'b6e6b124-f7bf-452e-b902-1fb3075fae65' +} + +report = iyzipay.SubscriptionPlan().delete(request, options) +print(report.read().decode('utf-8')) diff --git a/samples/subscription_plans_get_list.py b/samples/subscription_plans_get_list.py new file mode 100644 index 0000000..fb61389 --- /dev/null +++ b/samples/subscription_plans_get_list.py @@ -0,0 +1,19 @@ +# coding=utf-8 + +import iyzipay + +options = { + 'api_key': iyzipay.api_key, + 'secret_key': iyzipay.secret_key, + 'base_url': iyzipay.base_url +} + +request = { + 'locale': 'tr', + 'referenceCode': '6b4803fb-c4f0-4f37-9df7-899a186e1451', + 'page': 1, + 'count': 1 +} + +report = iyzipay.SubscriptionPlan().get(request, options) +print(report.read().decode('utf-8')) diff --git a/samples/subscription_plans_retrieve_plan.py b/samples/subscription_plans_retrieve_plan.py new file mode 100644 index 0000000..6993e22 --- /dev/null +++ b/samples/subscription_plans_retrieve_plan.py @@ -0,0 +1,17 @@ +# coding=utf-8 + +import iyzipay + +options = { + 'api_key': iyzipay.api_key, + 'secret_key': iyzipay.secret_key, + 'base_url': iyzipay.base_url +} + +request = { + 'locale': 'tr', + 'referenceCode': 'b6e6b124-f7bf-452e-b902-1fb3075fae65' +} + +report = iyzipay.SubscriptionPlan().retrieve(request, options) +print(report.read().decode('utf-8')) diff --git a/samples/subscription_plans_update.py b/samples/subscription_plans_update.py new file mode 100644 index 0000000..39860fb --- /dev/null +++ b/samples/subscription_plans_update.py @@ -0,0 +1,18 @@ +# coding=utf-8 + +import iyzipay + +options = { + 'api_key': iyzipay.api_key, + 'secret_key': iyzipay.secret_key, + 'base_url': iyzipay.base_url +} + +request = { + 'locale': 'tr', + 'name': 'Premium Monthly', + 'referenceCode': 'b6e6b124-f7bf-452e-b902-1fb3075fae65' +} + +report = iyzipay.SubscriptionPlan().update(request, options) +print(report.read().decode('utf-8')) diff --git a/samples/subscription_product_create.py b/samples/subscription_product_create.py new file mode 100644 index 0000000..61a8b6b --- /dev/null +++ b/samples/subscription_product_create.py @@ -0,0 +1,19 @@ +# coding=utf-8 + +import iyzipay + +options = { + 'api_key': iyzipay.api_key, + 'secret_key': iyzipay.secret_key, + 'base_url': iyzipay.base_url +} + +request = { + 'locale': 'tr', + 'conversationId': 1234, + 'name': 'Standart', + 'Description': 'Standart Test Product Description' +} + +report = iyzipay.SubscriptionProduct().create(request, options) +print(report.read().decode('utf-8')) diff --git a/samples/subscription_product_delete.py b/samples/subscription_product_delete.py new file mode 100644 index 0000000..c89d904 --- /dev/null +++ b/samples/subscription_product_delete.py @@ -0,0 +1,16 @@ +# coding=utf-8 + +import iyzipay + +options = { + 'api_key': iyzipay.api_key, + 'secret_key': iyzipay.secret_key, + 'base_url': iyzipay.base_url +} + +request = { + 'referenceCode': "8df0a549-ab22-43ce-a31d-0c38be9723b0", +} + +report = iyzipay.SubscriptionProduct().delete(request, options) +print(report.read().decode('utf-8')) diff --git a/samples/subscription_product_list_retrieve.py b/samples/subscription_product_list_retrieve.py new file mode 100644 index 0000000..03e7961 --- /dev/null +++ b/samples/subscription_product_list_retrieve.py @@ -0,0 +1,18 @@ +# coding=utf-8 + +import iyzipay + +options = { + 'api_key': iyzipay.api_key, + 'secret_key': iyzipay.secret_key, + 'base_url': iyzipay.base_url +} + +request = { + 'locale': 'tr', + 'page': 1, + 'count': 1 +} + +report = iyzipay.SubscriptionProduct().get(request, options) +print(report.read().decode('utf-8')) diff --git a/samples/subscription_product_retrieve.py b/samples/subscription_product_retrieve.py new file mode 100644 index 0000000..0e63aa5 --- /dev/null +++ b/samples/subscription_product_retrieve.py @@ -0,0 +1,16 @@ +# coding=utf-8 + +import iyzipay + +options = { + 'api_key': iyzipay.api_key, + 'secret_key': iyzipay.secret_key, + 'base_url': iyzipay.base_url +} + +request = { + 'referenceCode': "8df0a549-ab22-43ce-a31d-0c38be9723b0", +} + +report = iyzipay.SubscriptionProduct().retrieve(request, options) +print(report.read().decode('utf-8')) diff --git a/samples/subscription_product_update.py b/samples/subscription_product_update.py new file mode 100644 index 0000000..60ed155 --- /dev/null +++ b/samples/subscription_product_update.py @@ -0,0 +1,17 @@ +# coding=utf-8 + +import iyzipay + +options = { + 'api_key': iyzipay.api_key, + 'secret_key': iyzipay.secret_key, + 'base_url': iyzipay.base_url +} + +request = { + 'name': 'Standart Update', + 'referenceCode': "8df0a549-ab22-43ce-a31d-0c38be9723b0", +} + +report = iyzipay.SubscriptionProduct().update(request, options) +print(report.read().decode('utf-8'))