diff --git a/.github/workflows/github_master.yml b/.github/workflows/github_master.yml index 6dfb67e..e08c5bd 100644 --- a/.github/workflows/github_master.yml +++ b/.github/workflows/github_master.yml @@ -13,9 +13,9 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set up Python - uses: actions/setup-python@v3 + uses: actions/setup-python@v5 with: python-version: '3.x' diff --git a/.github/workflows/github_pull_request.yml b/.github/workflows/github_pull_request.yml index f29c2ed..45fea81 100644 --- a/.github/workflows/github_pull_request.yml +++ b/.github/workflows/github_pull_request.yml @@ -14,12 +14,12 @@ jobs: strategy: matrix: - python-version: ['3.12', '3.13', '3.14'] + python-version: ['3.9', '3.10', '3.11', '3.12', '3.13'] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Set up Python - uses: actions/setup-python@v3 + uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - name: Install dependencies diff --git a/iyzipay/__init__.py b/iyzipay/__init__.py index 72a1583..ed315d6 100644 --- a/iyzipay/__init__.py +++ b/iyzipay/__init__.py @@ -21,6 +21,7 @@ Payment, ThreedsInitialize, ThreedsPayment, + ThreedsV2Payment, Cancel, Refund, Card, @@ -49,11 +50,19 @@ BasicBkmInitialize, RetrievePaymentDetails, RetrieveTransactions, + ReportingScrollTransaction, IyziLinkProduct, IyziFileBase64Encoder, - RetrieveLoyalty) + RetrieveLoyalty, + PayWithIyzico, + SubscriptionProduct, + SubscriptionPricingPlan, + SubscriptionCheckoutForm, + Subscription, + SubscriptionCardUpdate, + SubscriptionCustomer +) from iyzipay.pki_builder import ( # noqa PKIBuilder, ) - diff --git a/iyzipay/iyzipay_resource.py b/iyzipay/iyzipay_resource.py index 6cd4ce9..4788287 100644 --- a/iyzipay/iyzipay_resource.py +++ b/iyzipay/iyzipay_resource.py @@ -5,13 +5,15 @@ import json import random import string +from urllib.parse import urlencode import iyzipay + class IyzipayResource: RANDOM_STRING_SIZE = 8 header = { - "Accept": "application/json", + "Accept": "application/json", "Content-type": "application/json", 'x-iyzi-client-version': 'iyzipay-python-1.0.45' } @@ -19,49 +21,45 @@ class IyzipayResource: def __init__(self): self.httplib = importlib.import_module('http.client') - def strip_zero(self, number): - has_zero = number.endswith('.0') - return number.replace('.0', '') if has_zero else number - - def calculate_hmac_sha256_signature(self, params, secret_key): - secret_key = bytes(secret_key.encode('utf-8')) - msg = ':'.join(params).encode('utf-8') - - hmac_obj = hmac.new(secret_key, digestmod=hashlib.sha256) - hmac_obj.update(msg) - return hmac_obj.hexdigest() - def verify_signature(self, params, secret_key, signature): calculated_signature = self.calculate_hmac_sha256_signature(params, secret_key) verified = signature == calculated_signature print('Signature verified:', verified) - def connect(self, method, url, options, request_body_dict=None, pki=None): + def connect(self, method, url, options, request_body_dict=None): connection = self.httplib.HTTPSConnection(options['base_url']) body_str = json.dumps(request_body_dict) - header = self.get_http_header(url, options, body_str, pki) + header = self.get_http_header(url, options, body_str) connection.request(method, url, body_str, header) return connection.getresponse() - def get_http_header(self, url, options=None, body_str=None, pki_string=None): + def get_http_header(self, url, options=None, body_str=None): random_str = self.generate_random_string(self.RANDOM_STRING_SIZE) self.header.update({'x-iyzi-rnd': random_str}) - self.get_http_header_v1(options, pki_string, random_str) return self.get_http_header_v2(url, options, random_str, body_str) - def get_http_header_v1(self, options, pki_string, random_str=None): - if pki_string is not None: - self.header.update( - {'Authorization_Fallback': self.prepare_auth_string(options, random_str, pki_string)}) - return self.header - def get_http_header_v2(self, url, options, random_str, body_str): url = url.split('?')[0] hashed_v2_str = self.generate_v2_hash(options['api_key'], url, options['secret_key'], random_str, body_str) self.header.update({'Authorization': 'IYZWSv2 %s' % hashed_v2_str}) return self.header - def generate_v2_hash(self, api_key, url, secret_key, random_str, body_str): + @staticmethod + def strip_zero(number): + has_zero = number.endswith('.0') + return number.replace('.0', '') if has_zero else number + + @staticmethod + def calculate_hmac_sha256_signature(params, secret_key): + secret_key = bytes(secret_key.encode('utf-8')) + msg = ':'.join(params).encode('utf-8') + + hmac_obj = hmac.new(secret_key, digestmod=hashlib.sha256) + hmac_obj.update(msg) + return hmac_obj.hexdigest() + + @staticmethod + def generate_v2_hash(api_key, url, secret_key, random_str, body_str): secret_key = bytes(secret_key.encode('utf-8')) msg = (random_str + url + body_str).encode('utf-8') @@ -75,78 +73,16 @@ def generate_v2_hash(self, api_key, url, secret_key, random_str, body_str): ] return base64.b64encode('&'.join(authorization_params).encode()).decode() - def get_plain_http_header(self, options): - return self.get_http_header_v1(None, options) - - def prepare_auth_string(self, options, random_str, pki_string): - hashed = self.generate_hash(options['api_key'], options['secret_key'], random_str, pki_string) - return self.format_header_string(options['api_key'], hashed) - - def generate_random_string(self, size): - return "".join( - random.SystemRandom().choice(string.ascii_letters + string.digits) for _ in - range(size)) - - @staticmethod - def generate_hash(api_key, secret_key, random_string, pki_string): - hash_str = api_key + random_string + secret_key + pki_string - hex_dig = hashlib.sha1(hash_str.encode()).digest() - - return base64.b64encode(hex_dig) - @staticmethod - def format_header_string(api_key, hashed): - hashed = hashed.decode('utf-8') - return 'IYZWS %s:%s' % (api_key, hashed) + def generate_random_string(size): + return "".join( + random.SystemRandom().choice(string.ascii_letters + string.digits) for _ in + range(size)) @staticmethod def resource_pki(request): - return 'locale=' + request.get('locale') + (',conversationId=' + request.get('conversationId') + ',' if request.get('conversationId') else ',') - - @staticmethod - def buyer_pki(buyer): - pki_builder = iyzipay.PKIBuilder('') - pki_builder.append('id', buyer.get('id')) - pki_builder.append('name', buyer.get('name')) - pki_builder.append('surname', buyer.get('surname')) - pki_builder.append('identityNumber', buyer.get('identityNumber')) - pki_builder.append('email', buyer.get('email')) - pki_builder.append('gsmNumber', buyer.get('gsmNumber')) - pki_builder.append('registrationDate', buyer.get('registrationDate')) - pki_builder.append('lastLoginDate', buyer.get('lastLoginDate')) - pki_builder.append('registrationAddress', buyer.get('registrationAddress')) - pki_builder.append('city', buyer.get('city')) - pki_builder.append('country', buyer.get('country')) - pki_builder.append('zipCode', buyer.get('zipCode')) - pki_builder.append('ip', buyer.get('ip')) - return pki_builder.get_request_string() - - @staticmethod - def address_pki(address): - pki_builder = iyzipay.PKIBuilder('') - pki_builder.append('address', address.get('address')) - pki_builder.append('zipCode', address.get('zipCode')) - pki_builder.append('contactName', address.get('contactName')) - pki_builder.append('city', address.get('city')) - pki_builder.append('country', address.get('country')) - return pki_builder.get_request_string() - - @staticmethod - def basket_pki(basket_items): - basket_items_pki = [] - for item in basket_items: - pki_builder = iyzipay.PKIBuilder('') - pki_builder.append('id', item.get('id')) - pki_builder.append_price('price', item.get('price')) - pki_builder.append('name', item.get('name')) - pki_builder.append('category1', item.get('category1')) - pki_builder.append('category2', item.get('category2')) - pki_builder.append('itemType', item.get('itemType')) - pki_builder.append('subMerchantKey', item.get('subMerchantKey')) - pki_builder.append_price('subMerchantPrice', item.get('subMerchantPrice')) - pki_builder.append_price('withholdingTax', item.get('withholdingTax')) - basket_items_pki.append(pki_builder.get_request_string()) - return basket_items_pki + return 'locale=' + request.get('locale') + ( + ',conversationId=' + request.get('conversationId') + ',' if request.get('conversationId') else ',') @staticmethod def payment_card_pki(payment_card): @@ -162,43 +98,6 @@ def payment_card_pki(payment_card): pki_builder.append('cardUserKey', payment_card.get('cardUserKey')) return pki_builder.get_request_string() - @staticmethod - def installment_details_pki(installment_details): - installments_pki = [] - for item in installment_details: - pki_builder = iyzipay.PKIBuilder('') - pki_builder.append('bankId', item.get('bankId')) - pki_builder.append_array('installmentPrices', - IyzipayResource.installment_prices_pki(item.get('installmentPrices'))) - installments_pki.append(pki_builder.get_request_string()) - return installments_pki - - @staticmethod - def installment_prices_pki(installment_prices): - installments_pki = [] - for item in installment_prices: - pki_builder = iyzipay.PKIBuilder('') - pki_builder.append('installmentNumber', item.get('installmentNumber')) - pki_builder.append_price('totalPrice', item.get('totalPrice')) - installments_pki.append(pki_builder.get_request_string()) - return installments_pki - - @staticmethod - def card_pki(card): - pki_builder = iyzipay.PKIBuilder('') - pki_builder.append('cardAlias', card.get('cardAlias')) - pki_builder.append('cardNumber', card.get('cardNumber')) - pki_builder.append('expireYear', card.get('expireYear')) - pki_builder.append('expireMonth', card.get('expireMonth')) - pki_builder.append('cardHolderName', card.get('cardHolderName')) - return pki_builder.get_request_string() - - @staticmethod - def reward_usage_pki(reward_usage): - pki_builder = iyzipay.PKIBuilder('') - pki_builder.append('rewardAmount', reward_usage.get('rewardAmount')) - pki_builder.append('rewardUsage', reward_usage.get('rewardUsage')) - return pki_builder.get_request_string() class ApiTest(IyzipayResource): def retrieve(self, options): @@ -207,656 +106,216 @@ def retrieve(self, options): class BinNumber(IyzipayResource): def retrieve(self, request, options): - pki = self.to_pki_string(request) - return self.connect('POST', '/payment/bin/check', options, request, pki) - - def to_pki_string(self, request): - pki_builder = iyzipay.PKIBuilder(self.resource_pki(request)) - pki_builder.append('binNumber', request.get('binNumber')) - return pki_builder.get_request_string() + return self.connect('POST', '/payment/bin/check', options, request) class InstallmentInfo(IyzipayResource): def retrieve(self, request, options): - pki = self.to_pki_string(request) - return self.connect('POST', '/payment/iyzipos/installment', options, request, pki) - - def to_pki_string(self, request): - pki_builder = iyzipay.PKIBuilder(self.resource_pki(request)) - pki_builder.append('binNumber', request.get('binNumber')) - pki_builder.append_price('price', request.get('price')) - return pki_builder.get_request_string() + return self.connect('POST', '/payment/iyzipos/installment', options, request) class Approval(IyzipayResource): def create(self, request, options): - pki = self.to_pki_string(request) - return self.connect('POST', '/payment/iyzipos/item/approve', options, request, pki) - - def to_pki_string(self, request): - pki_builder = iyzipay.PKIBuilder(self.resource_pki(request)) - pki_builder.append('paymentTransactionId', request.get('paymentTransactionId')) - return pki_builder.get_request_string() + return self.connect('POST', '/payment/iyzipos/item/approve', options, request) class Disapproval(IyzipayResource): def create(self, request, options): - pki = self.to_pki_string(request) - return self.connect('POST', '/payment/iyzipos/item/disapprove', options, request, pki) - - def to_pki_string(self, request): - pki_builder = iyzipay.PKIBuilder(self.resource_pki(request)) - pki_builder.append('paymentTransactionId', request.get('paymentTransactionId')) - return pki_builder.get_request_string() + return self.connect('POST', '/payment/iyzipos/item/disapprove', options, request) class CheckoutFormInitialize(IyzipayResource): def create(self, request, options): - pki = self.to_pki_string(request) - return self.connect('POST', '/payment/iyzipos/checkoutform/initialize/ecom', options, request, pki) - - def to_pki_string(self, request): - pki_builder = iyzipay.PKIBuilder(self.resource_pki(request)) - pki_builder.append_price('price', request.get('price')) - pki_builder.append('basketId', request.get('basketId')) - pki_builder.append('paymentGroup', request.get('paymentGroup')) - pki_builder.append('buyer', self.buyer_pki(request.get('buyer'))) - pki_builder.append('shippingAddress', self.address_pki(request.get('shippingAddress'))) - pki_builder.append('billingAddress', self.address_pki(request.get('billingAddress'))) - pki_builder.append_array('basketItems', self.basket_pki(request.get('basketItems'))) - pki_builder.append('callbackUrl', request.get('callbackUrl')) - pki_builder.append('paymentSource', request.get('paymentSource')) - pki_builder.append('currency', request.get('currency')) - pki_builder.append('posOrderId', request.get('posOrderId')) - pki_builder.append_price('paidPrice', request.get('paidPrice')) - pki_builder.append('forceThreeDS', request.get('forceThreeDS')) - pki_builder.append('cardUserKey', request.get('cardUserKey')) - pki_builder.append_array('enabledInstallments', request.get('enabledInstallments')) - pki_builder.append('debitCardAllowed', request.get('debitCardAllowed')) - return pki_builder.get_request_string() + return self.connect('POST', '/payment/iyzipos/checkoutform/initialize/ecom', options, request) class CheckoutForm(IyzipayResource): def retrieve(self, request, options): - pki = self.to_pki_string(request) - return self.connect('POST', '/payment/iyzipos/checkoutform/auth/ecom/detail', options, request, pki) - - def to_pki_string(self, request): - pki_builder = iyzipay.PKIBuilder(self.resource_pki(request)) - pki_builder.append('token', request.get('token')) - return pki_builder.get_request_string() + return self.connect('POST', '/payment/iyzipos/checkoutform/auth/ecom/detail', options, request) class Payment(IyzipayResource): def create(self, request, options): - pki = self.to_pki_string_create(request) - return self.connect('POST', '/payment/auth', options, request, pki) + return self.connect('POST', '/payment/auth', options, request) def retrieve(self, request, options): - pki = self.to_pki_string_retrieve(request) - return self.connect('POST', '/payment/detail', options, request, pki) - - def to_pki_string_create(self, request): - pki_builder = iyzipay.PKIBuilder(self.resource_pki(request)) - pki_builder.append_price('price', request.get('price')) - pki_builder.append_price('paidPrice', request.get('paidPrice')) - pki_builder.append('installment', request.get('installment')) - pki_builder.append('paymentChannel', request.get('paymentChannel')) - pki_builder.append('basketId', request.get('basketId')) - pki_builder.append('paymentGroup', request.get('paymentGroup')) - pki_builder.append('paymentCard', self.payment_card_pki(request.get('paymentCard'))) - pki_builder.append('buyer', self.buyer_pki(request.get('buyer'))) - pki_builder.append('shippingAddress', self.address_pki(request.get('shippingAddress'))) - pki_builder.append('billingAddress', self.address_pki(request.get('billingAddress'))) - pki_builder.append_array('basketItems', self.basket_pki(request.get('basketItems'))) - pki_builder.append('paymentSource', request.get('paymentSource')) - pki_builder.append('currency', request.get('currency')) - pki_builder.append('posOrderId', request.get('posOrderId')) - pki_builder.append('connectorName', request.get('connectorName')) - pki_builder.append('plusInstallmentUsage', request.get('plusInstallmentUsage')) - return pki_builder.get_request_string() + return self.connect('POST', '/payment/detail', options, request) - def to_pki_string_retrieve(self, request): - pki_builder = iyzipay.PKIBuilder(self.resource_pki(request)) - pki_builder.append('paymentId', request.get('paymentId')) - pki_builder.append('paymentConversationId', request.get('paymentConversationId')) - return pki_builder.get_request_string() + def refund(self, request, options): + return self.connect('POST', '/v2/payment/refund', options, request) class ThreedsInitialize(IyzipayResource): def create(self, request, options): - pki = self.to_pki_string(request) - return self.connect('POST', '/payment/3dsecure/initialize', options, request, pki) - - def to_pki_string(self, request): - pki_builder = iyzipay.PKIBuilder(self.resource_pki(request)) - pki_builder.append_price('price', request.get('price')) - pki_builder.append_price('paidPrice', request.get('paidPrice')) - pki_builder.append('installment', request.get('installment')) - pki_builder.append('paymentChannel', request.get('paymentChannel')) - pki_builder.append('basketId', request.get('basketId')) - pki_builder.append('paymentGroup', request.get('paymentGroup')) - pki_builder.append('paymentCard', self.payment_card_pki(request.get('paymentCard'))) - pki_builder.append('buyer', self.buyer_pki(request.get('buyer'))) - pki_builder.append('shippingAddress', self.address_pki(request.get('shippingAddress'))) - pki_builder.append('billingAddress', self.address_pki(request.get('billingAddress'))) - pki_builder.append_array('basketItems', self.basket_pki(request.get('basketItems'))) - pki_builder.append('paymentSource', request.get('paymentSource')) - pki_builder.append('currency', request.get('currency')) - pki_builder.append('posOrderId', request.get('posOrderId')) - pki_builder.append('connectorName', request.get('connectorName')) - pki_builder.append('plusInstallmentUsage', request.get('plusInstallmentUsage')) - pki_builder.append('callbackUrl', request.get('callbackUrl')) - return pki_builder.get_request_string() + return self.connect('POST', '/payment/3dsecure/initialize', options, request) class ThreedsPayment(IyzipayResource): def create(self, request, options): - pki = self.to_pki_string_create(request) - return self.connect('POST', '/payment/3dsecure/auth', options, request, pki) + return self.connect('POST', '/payment/3dsecure/auth', options, request) def retrieve(self, request, options): - pki = self.to_pki_string_retrieve(request) - return self.connect('POST', '/payment/detail', options, request, pki) + return self.connect('POST', '/payment/detail', options, request) - def to_pki_string_create(self, request): - pki_builder = iyzipay.PKIBuilder(self.resource_pki(request)) - pki_builder.append('paymentId', request.get('paymentId')) - pki_builder.append('conversationData', request.get('conversationData')) - return pki_builder.get_request_string() - def to_pki_string_retrieve(self, request): - pki_builder = iyzipay.PKIBuilder(self.resource_pki(request)) - pki_builder.append('paymentId', request.get('paymentId')) - pki_builder.append('paymentConversationId', request.get('paymentConversationId')) - return pki_builder.get_request_string() +class ThreedsV2Payment(IyzipayResource): + def create(self, request, options): + return self.connect('POST', '/payment/v2/3dsecure/auth', options, request) class Cancel(IyzipayResource): def create(self, request, options): - pki = self.to_pki_string(request) - return self.connect('POST', '/payment/cancel', options, request, pki) - - def to_pki_string(self, request): - pki_builder = iyzipay.PKIBuilder(self.resource_pki(request)) - pki_builder.append('paymentId', request.get('paymentId')) - pki_builder.append('ip', request.get('ip')) - pki_builder.append('reason', request.get('reason')) - pki_builder.append('description', request.get('description')) - return pki_builder.get_request_string() + return self.connect('POST', '/payment/cancel', options, request) class Refund(IyzipayResource): def create(self, request, options): - pki = self.to_pki_string(request) - return self.connect('POST', '/payment/refund', options, request, pki) - - def to_pki_string(self, request): - pki_builder = iyzipay.PKIBuilder(self.resource_pki(request)) - pki_builder.append('paymentTransactionId', request.get('paymentTransactionId')) - pki_builder.append_price('price', request.get('price')) - pki_builder.append('ip', request.get('ip')) - pki_builder.append('currency', request.get('currency')) - pki_builder.append('reason', request.get('reason')) - pki_builder.append('description', request.get('description')) - return pki_builder.get_request_string() + return self.connect('POST', '/payment/refund', options, request) class Card(IyzipayResource): def create(self, request, options): - pki = self.to_pki_string_create(request) - return self.connect('POST', '/cardstorage/card', options, request, pki) + return self.connect('POST', '/cardstorage/card', options, request) def delete(self, request, options): - pki = self.to_pki_string_delete(request) - return self.connect('DELETE', '/cardstorage/card', options, request, pki) - - def to_pki_string_create(self, request): - pki_builder = iyzipay.PKIBuilder(self.resource_pki(request)) - pki_builder.append('externalId', request.get('externalId')) - pki_builder.append('email', request.get('email')) - pki_builder.append('cardUserKey', request.get('cardUserKey')) - pki_builder.append('card', self.card_pki(request.get('card'))) - return pki_builder.get_request_string() - - def to_pki_string_delete(self, request): - pki_builder = iyzipay.PKIBuilder(self.resource_pki(request)) - pki_builder.append('cardUserKey', request.get('cardUserKey')) - pki_builder.append('cardToken', request.get('cardToken')) - return pki_builder.get_request_string() + return self.connect('DELETE', '/cardstorage/card', options, request) class CardList(IyzipayResource): def retrieve(self, request, options): - pki = self.to_pki_string(request) - return self.connect('POST', '/cardstorage/cards', options, request, pki) - - def to_pki_string(self, request): - pki_builder = iyzipay.PKIBuilder(self.resource_pki(request)) - pki_builder.append('cardUserKey', request.get('cardUserKey')) - return pki_builder.get_request_string() + return self.connect('POST', '/cardstorage/cards', options, request) class Bkm(IyzipayResource): def retrieve(self, request, options): - pki = self.to_pki_string(request) - return self.connect('POST', '/payment/bkm/auth/detail', options, request, pki) - - def to_pki_string(self, request): - pki_builder = iyzipay.PKIBuilder(self.resource_pki(request)) - pki_builder.append('token', request.get('token')) - return pki_builder.get_request_string() + return self.connect('POST', '/payment/bkm/auth/detail', options, request) class BkmInitialize(IyzipayResource): def create(self, request, options): - pki = self.to_pki_string(request) - return self.connect('POST', '/payment/bkm/initialize', options, request, pki) - - def to_pki_string(self, request): - pki_builder = iyzipay.PKIBuilder(self.resource_pki(request)) - pki_builder.append_price('price', request.get('price')) - pki_builder.append('basketId', request.get('basketId')) - pki_builder.append('paymentGroup', request.get('paymentGroup')) - pki_builder.append('buyer', self.buyer_pki(request.get('buyer'))) - pki_builder.append('shippingAddress', self.address_pki(request.get('shippingAddress'))) - pki_builder.append('billingAddress', self.address_pki(request.get('billingAddress'))) - pki_builder.append_array('basketItems', self.basket_pki(request.get('basketItems'))) - pki_builder.append('callbackUrl', request.get('callbackUrl')) - pki_builder.append('paymentSource', request.get('paymentSource')) - pki_builder.append_array('enabledInstallments', request.get('enabledInstallments')) - return pki_builder.get_request_string() + return self.connect('POST', '/payment/bkm/initialize', options, request) class PeccoInitialize(IyzipayResource): def create(self, request, options): - pki = self.to_pki_string(request) - return self.connect('POST', '/payment/pecco/initialize', options, request, pki) - - def to_pki_string(self, request): - pki_builder = iyzipay.PKIBuilder(self.resource_pki(request)) - pki_builder.append_price('price', request.get('price')) - pki_builder.append('basketId', request.get('basketId')) - pki_builder.append('paymentGroup', request.get('paymentGroup')) - pki_builder.append('buyer', self.buyer_pki(request.get('buyer'))) - pki_builder.append('shippingAddress', self.address_pki(request.get('shippingAddress'))) - pki_builder.append('billingAddress', self.address_pki(request.get('billingAddress'))) - pki_builder.append_array('basketItems', self.basket_pki(request.get('basketItems'))) - pki_builder.append('callbackUrl', request.get('callbackUrl')) - pki_builder.append('paymentSource', request.get('paymentSource')) - pki_builder.append('currency', request.get('currency')) - pki_builder.append_price('paidPrice', request.get('paidPrice')) - return pki_builder.get_request_string() + return self.connect('POST', '/payment/pecco/initialize', options, request) class PeccoPayment(IyzipayResource): def create(self, request, options): - pki = self.to_pki_string(request) - return self.connect('POST', '/payment/pecco/auth', options, request, pki) - - def to_pki_string(self, request): - pki_builder = iyzipay.PKIBuilder(self.resource_pki(request)) - pki_builder.append('token', request.get('token')) - return pki_builder.get_request_string() + return self.connect('POST', '/payment/pecco/auth', options, request) class CheckoutFormInitializePreAuth(IyzipayResource): def create(self, request, options): - pki = self.to_pki_string(request) - return self.connect('POST', '/payment/iyzipos/checkoutform/initialize/preauth/ecom', options, request, pki) - - def to_pki_string(self, request): - pki_builder = iyzipay.PKIBuilder(self.resource_pki(request)) - pki_builder.append_price('price', request.get('price')) - pki_builder.append('basketId', request.get('basketId')) - pki_builder.append('paymentGroup', request.get('paymentGroup')) - pki_builder.append('buyer', self.buyer_pki(request.get('buyer'))) - pki_builder.append('shippingAddress', self.address_pki(request.get('shippingAddress'))) - pki_builder.append('billingAddress', self.address_pki(request.get('billingAddress'))) - pki_builder.append_array('basketItems', self.basket_pki(request.get('basketItems'))) - pki_builder.append('callbackUrl', request.get('callbackUrl')) - pki_builder.append('paymentSource', request.get('paymentSource')) - pki_builder.append('currency', request.get('currency')) - pki_builder.append('posOrderId', request.get('posOrderId')) - pki_builder.append_price('paidPrice', request.get('paidPrice')) - pki_builder.append('forceThreeDS', request.get('forceThreeDS')) - pki_builder.append('cardUserKey', request.get('cardUserKey')) - pki_builder.append_array('enabledInstallments', request.get('enabledInstallments')) - return pki_builder.get_request_string() + return self.connect('POST', '/payment/iyzipos/checkoutform/initialize/preauth/ecom', options, request) class PaymentPreAuth(IyzipayResource): def create(self, request, options): - pki = self.to_pki_string_create(request) - return self.connect('POST', '/payment/preauth', options, request, pki) + return self.connect('POST', '/payment/preauth', options, request) def retrieve(self, request, options): - pki = self.to_pki_string_retrieve(request) - return self.connect('POST', '/payment/detail', options, request, pki) - - def to_pki_string_create(self, request): - pki_builder = iyzipay.PKIBuilder(self.resource_pki(request)) - pki_builder.append_price('price', request.get('price')) - pki_builder.append_price('paidPrice', request.get('paidPrice')) - pki_builder.append('installment', request.get('installment')) - pki_builder.append('paymentChannel', request.get('paymentChannel')) - pki_builder.append('basketId', request.get('basketId')) - pki_builder.append('paymentGroup', request.get('paymentGroup')) - pki_builder.append('paymentCard', self.payment_card_pki(request.get('paymentCard'))) - pki_builder.append('buyer', self.buyer_pki(request.get('buyer'))) - pki_builder.append('shippingAddress', self.address_pki(request.get('shippingAddress'))) - pki_builder.append('billingAddress', self.address_pki(request.get('billingAddress'))) - pki_builder.append_array('basketItems', self.basket_pki(request.get('basketItems'))) - pki_builder.append('paymentSource', request.get('paymentSource')) - pki_builder.append('currency', request.get('currency')) - return pki_builder.get_request_string() - - def to_pki_string_retrieve(self, request): - pki_builder = iyzipay.PKIBuilder(self.resource_pki(request)) - pki_builder.append('paymentId', request.get('paymentId')) - pki_builder.append('paymentConversationId', request.get('paymentConversationId')) - return pki_builder.get_request_string() + return self.connect('POST', '/payment/detail', options, request) class PaymentPostAuth(IyzipayResource): def create(self, request, options): - pki = self.to_pki_string_create(request) - return self.connect('POST', '/payment/postauth', options, request, pki) - - def to_pki_string_create(self, request): - pki_builder = iyzipay.PKIBuilder(self.resource_pki(request)) - pki_builder.append('paymentId', request.get('paymentId')) - pki_builder.append('ip', request.get('ip')) - pki_builder.append_price('paidPrice', request.get('paidPrice')) - pki_builder.append('currency', request.get('currency')) - return pki_builder.get_request_string() + return self.connect('POST', '/payment/postauth', options, request) class ThreedsInitializePreAuth(IyzipayResource): def create(self, request, options): - pki = self.to_pki_string(request) - return self.connect('POST', '/payment/3dsecure/initialize/preauth', options, request, pki) - - def to_pki_string(self, request): - pki_builder = iyzipay.PKIBuilder(self.resource_pki(request)) - pki_builder.append_price('price', request.get('price')) - pki_builder.append_price('paidPrice', request.get('paidPrice')) - pki_builder.append('installment', request.get('installment')) - pki_builder.append('paymentChannel', request.get('paymentChannel')) - pki_builder.append('basketId', request.get('basketId')) - pki_builder.append('paymentGroup', request.get('paymentGroup')) - pki_builder.append('paymentCard', self.payment_card_pki(request.get('paymentCard'))) - pki_builder.append('buyer', self.buyer_pki(request.get('buyer'))) - pki_builder.append('shippingAddress', self.address_pki(request.get('shippingAddress'))) - pki_builder.append('billingAddress', self.address_pki(request.get('billingAddress'))) - pki_builder.append_array('basketItems', self.basket_pki(request.get('basketItems'))) - pki_builder.append('paymentSource', request.get('paymentSource')) - pki_builder.append('currency', request.get('currency')) - pki_builder.append('callbackUrl', request.get('callbackUrl')) - return pki_builder.get_request_string() + return self.connect('POST', '/payment/3dsecure/initialize/preauth', options, request) class RefundChargedFromMerchant(IyzipayResource): def create(self, request, options): - pki = self.to_pki_string(request) - return self.connect('POST', '/payment/iyzipos/refund/merchant/charge', options, request, pki) - - def to_pki_string(self, request): - pki_builder = iyzipay.PKIBuilder(self.resource_pki(request)) - pki_builder.append('paymentTransactionId', request.get('paymentTransactionId')) - pki_builder.append_price('price', request.get('price')) - pki_builder.append('ip', request.get('ip')) - pki_builder.append('currency', request.get('currency')) - return pki_builder.get_request_string() + return self.connect('POST', '/payment/iyzipos/refund/merchant/charge', options, request) class PayoutCompletedTransactionList(IyzipayResource): def retrieve(self, request, options): - pki = self.to_pki_string(request) - return self.connect('POST', '/reporting/settlement/payoutcompleted', options, request, pki) - - def to_pki_string(self, request): - pki_builder = iyzipay.PKIBuilder(self.resource_pki(request)) - pki_builder.append('date', request.get('date')) - return pki_builder.get_request_string() + return self.connect('POST', '/reporting/settlement/payoutcompleted', options, request) class BouncedBankTransferList(IyzipayResource): def retrieve(self, request, options): - pki = self.to_pki_string(request) - return self.connect('POST', '/reporting/settlement/bounced', options, request, pki) - - def to_pki_string(self, request): - pki_builder = iyzipay.PKIBuilder(self.resource_pki(request)) - pki_builder.append('date', request.get('date')) - return pki_builder.get_request_string() + return self.connect('POST', '/reporting/settlement/bounced', options, request) class SubMerchant(IyzipayResource): def create(self, request, options): - pki = self.to_pki_string_create(request) - return self.connect('POST', '/onboarding/submerchant', options, request, pki) + return self.connect('POST', '/onboarding/submerchant', options, request) def update(self, request, options): - pki = self.to_pki_string_update(request) - return self.connect('PUT', '/onboarding/submerchant', options, request, pki) + return self.connect('PUT', '/onboarding/submerchant', options, request) - def retrieve(self, request, options): - pki = self.to_pki_string_retrieve(request) - return self.connect('POST', '/onboarding/submerchant/detail', options, request, pki) + def update_item(self, request, options): + return self.connect('PUT', '/payment/item', options, request) - def to_pki_string_create(self, request): - pki_builder = iyzipay.PKIBuilder(self.resource_pki(request)) - pki_builder.append('name', request.get('name')) - pki_builder.append('email', request.get('email')) - pki_builder.append('gsmNumber', request.get('gsmNumber')) - pki_builder.append('address', request.get('address')) - pki_builder.append('iban', request.get('iban')) - pki_builder.append('taxOffice', request.get('taxOffice')) - pki_builder.append('contactName', request.get('contactName')) - pki_builder.append('contactSurname', request.get('contactSurname')) - pki_builder.append('legalCompanyTitle', request.get('legalCompanyTitle')) - pki_builder.append('swiftCode', request.get('swiftCode')) - pki_builder.append('currency', request.get('currency')) - pki_builder.append('subMerchantExternalId', request.get('subMerchantExternalId')) - pki_builder.append('identityNumber', request.get('identityNumber')) - pki_builder.append('taxNumber', request.get('taxNumber')) - pki_builder.append('subMerchantType', request.get('subMerchantType')) - return pki_builder.get_request_string() - - def to_pki_string_update(self, request): - pki_builder = iyzipay.PKIBuilder(self.resource_pki(request)) - pki_builder.append('name', request.get('name')) - pki_builder.append('email', request.get('email')) - pki_builder.append('gsmNumber', request.get('gsmNumber')) - pki_builder.append('address', request.get('address')) - pki_builder.append('iban', request.get('iban')) - pki_builder.append('taxOffice', request.get('taxOffice')) - pki_builder.append('contactName', request.get('contactName')) - pki_builder.append('contactSurname', request.get('contactSurname')) - pki_builder.append('legalCompanyTitle', request.get('legalCompanyTitle')) - pki_builder.append('swiftCode', request.get('swiftCode')) - pki_builder.append('currency', request.get('currency')) - pki_builder.append('subMerchantKey', request.get('subMerchantKey')) - pki_builder.append('identityNumber', request.get('identityNumber')) - pki_builder.append('taxNumber', request.get('taxNumber')) - return pki_builder.get_request_string() - - def to_pki_string_retrieve(self, request): - pki_builder = iyzipay.PKIBuilder(self.resource_pki(request)) - pki_builder.append('subMerchantExternalId', request.get('subMerchantExternalId')) - return pki_builder.get_request_string() + def retrieve(self, request, options): + return self.connect('POST', '/onboarding/submerchant/detail', options, request) class CrossBookingToSubMerchant(IyzipayResource): def create(self, request, options): - pki = self.to_pki_string(request) - return self.connect('POST', '/crossbooking/send', options, request, pki) - - def to_pki_string(self, request): - pki_builder = iyzipay.PKIBuilder(self.resource_pki(request)) - pki_builder.append('subMerchantKey', request.get('subMerchantKey')) - pki_builder.append_price('price', request.get('price')) - pki_builder.append('reason', request.get('reason')) - pki_builder.append('currency', request.get('currency')) - return pki_builder.get_request_string() + return self.connect('POST', '/crossbooking/send', options, request) class CrossBookingFromSubMerchant(IyzipayResource): def create(self, request, options): - pki = self.to_pki_string(request) - return self.connect('POST', '/crossbooking/receive', options, request, pki) - - def to_pki_string(self, request): - pki_builder = iyzipay.PKIBuilder(self.resource_pki(request)) - pki_builder.append('subMerchantKey', request.get('subMerchantKey')) - pki_builder.append_price('price', request.get('price')) - pki_builder.append('reason', request.get('reason')) - pki_builder.append('currency', request.get('currency')) - return pki_builder.get_request_string() + return self.connect('POST', '/crossbooking/receive', options, request) class BasicPayment(IyzipayResource): def create(self, request, options): - pki = self.to_pki_string(request) - return self.connect('POST', '/payment/auth/basic', options, request, pki) - - def to_pki_string(self, request): - pki_builder = iyzipay.PKIBuilder(self.resource_pki(request)) - pki_builder.append_price('price', request.get('price')) - pki_builder.append_price('paidPrice', request.get('paidPrice')) - pki_builder.append('installment', request.get('installment')) - pki_builder.append('buyerEmail', request.get('buyerEmail')) - pki_builder.append('buyerId', request.get('buyerId')) - pki_builder.append('buyerIp', request.get('buyerIp')) - pki_builder.append('posOrderId', request.get('posOrderId')) - pki_builder.append('paymentCard', self.payment_card_pki(request.get('paymentCard'))) - pki_builder.append('currency', request.get('currency')) - pki_builder.append('connectorName', request.get('connectorName')) - pki_builder.append('callbackUrl', request.get('callbackUrl')) - return pki_builder.get_request_string() + return self.connect('POST', '/payment/auth/basic', options, request) class BasicPaymentPreAuth(IyzipayResource): def create(self, request, options): - pki = self.to_pki_string(request) - return self.connect('POST', '/payment/preauth/basic', options, request, pki) - - def to_pki_string(self, request): - pki_builder = iyzipay.PKIBuilder(self.resource_pki(request)) - pki_builder.append_price('price', request.get('price')) - pki_builder.append_price('paidPrice', request.get('paidPrice')) - pki_builder.append('installment', request.get('installment')) - pki_builder.append('buyerEmail', request.get('buyerEmail')) - pki_builder.append('buyerId', request.get('buyerId')) - pki_builder.append('buyerIp', request.get('buyerIp')) - pki_builder.append('posOrderId', request.get('posOrderId')) - pki_builder.append('paymentCard', self.payment_card_pki(request.get('paymentCard'))) - pki_builder.append('currency', request.get('currency')) - pki_builder.append('connectorName', request.get('connectorName')) - return pki_builder.get_request_string() + return self.connect('POST', '/payment/preauth/basic', options, request) class BasicPaymentPostAuth(IyzipayResource): def create(self, request, options): - pki = self.to_pki_string_create(request) - return self.connect('POST', '/payment/postauth/basic', options, request, pki) - - def to_pki_string_create(self, request): - pki_builder = iyzipay.PKIBuilder(self.resource_pki(request)) - pki_builder.append('paymentId', request.get('paymentId')) - pki_builder.append('ip', request.get('ip')) - pki_builder.append_price('paidPrice', request.get('paidPrice')) - pki_builder.append('currency', request.get('currency')) - return pki_builder.get_request_string() + return self.connect('POST', '/payment/postauth/basic', options, request) class BasicThreedsInitialize(IyzipayResource): def create(self, request, options): - pki = self.to_pki_string(request) - return self.connect('POST', '/payment/3dsecure/initialize/basic', options, request, pki) - - def to_pki_string(self, request): - pki_builder = iyzipay.PKIBuilder(self.resource_pki(request)) - pki_builder.append_price('price', request.get('price')) - pki_builder.append_price('paidPrice', request.get('paidPrice')) - pki_builder.append('installment', request.get('installment')) - pki_builder.append('buyerEmail', request.get('buyerEmail')) - pki_builder.append('buyerId', request.get('buyerId')) - pki_builder.append('buyerIp', request.get('buyerIp')) - pki_builder.append('posOrderId', request.get('posOrderId')) - pki_builder.append('paymentCard', self.payment_card_pki(request.get('paymentCard'))) - pki_builder.append('currency', request.get('currency')) - pki_builder.append('connectorName', request.get('connectorName')) - return pki_builder.get_request_string() + return self.connect('POST', '/payment/3dsecure/initialize/basic', options, request) class BasicThreedsInitializePreAuth(IyzipayResource): def create(self, request, options): - pki = self.to_pki_string(request) - return self.connect('POST', '/payment/iyziconnect/initialize3ds/preauth', options, request, pki) - - def to_pki_string(self, request): - pki_builder = iyzipay.PKIBuilder(self.resource_pki(request)) - pki_builder.append_price('price', request.get('price')) - pki_builder.append_price('paidPrice', request.get('paidPrice')) - pki_builder.append('installment', request.get('installment')) - pki_builder.append('buyerEmail', request.get('buyerEmail')) - pki_builder.append('buyerId', request.get('buyerId')) - pki_builder.append('buyerIp', request.get('buyerIp')) - pki_builder.append('posOrderId', request.get('posOrderId')) - pki_builder.append('paymentCard', self.payment_card_pki(request.get('paymentCard'))) - pki_builder.append('currency', request.get('currency')) - pki_builder.append('connectorName', request.get('connectorName')) - pki_builder.append('callbackUrl', request.get('callbackUrl')) - return pki_builder.get_request_string() + return self.connect('POST', '/payment/iyziconnect/initialize3ds/preauth', options, request) class BasicThreedsPayment(IyzipayResource): def create(self, request, options): - pki = self.to_pki_string(request) - return self.connect('POST', '/payment/3dsecure/auth/basic', options, request, pki) - - def to_pki_string(self, request): - pki_builder = iyzipay.PKIBuilder(self.resource_pki(request)) - pki_builder.append('paymentId', request.get('paymentId')) - pki_builder.append('conversationData', request.get('conversationData')) - return pki_builder.get_request_string() + return self.connect('POST', '/payment/3dsecure/auth/basic', options, request) class BasicBkm(IyzipayResource): def retrieve(self, request, options): - pki = self.to_pki_string(request) - return self.connect('POST', '/payment/bkm/auth/detail/basic', options, request, pki) - - def to_pki_string(self, request): - pki_builder = iyzipay.PKIBuilder(self.resource_pki(request)) - pki_builder.append('token', request.get('token')) - return pki_builder.get_request_string() + return self.connect('POST', '/payment/bkm/auth/detail/basic', options, request) class BasicBkmInitialize(IyzipayResource): def create(self, request, options): - pki = self.to_pki_string(request) - return self.connect('POST', '/payment/bkm/initialize/basic', options, request, pki) - - def to_pki_string(self, request): - pki_builder = iyzipay.PKIBuilder(self.resource_pki(request)) - pki_builder.append('connectorName', request.get('connectorName')) - pki_builder.append_price('price', request.get('price')) - pki_builder.append('callbackUrl', request.get('callbackUrl')) - pki_builder.append('buyerEmail', request.get('buyerEmail')) - pki_builder.append('buyerId', request.get('buyerId')) - pki_builder.append('buyerIp', request.get('buyerIp')) - pki_builder.append('posOrderId', request.get('posOrderId')) - pki_builder.append_array('installmentDetails', self.installment_details_pki(request.get('installmentDetails'))) - return pki_builder.get_request_string() + return self.connect('POST', '/payment/bkm/initialize/basic', options, request) class RetrievePaymentDetails(IyzipayResource): def retrieve(self, request, options): + payment_id = str(request.get('paymentId')) payment_conversation_id = str(request.get('paymentConversationId')) - return self.connect('GET', '/v2/reporting/payment/details?paymentConversationId=' + payment_conversation_id, options) + param_name = 'paymentId' if payment_id else 'paymentConversationId' + param_value = payment_id if payment_id else payment_conversation_id + param = param_name + '=' + param_value + return self.connect('GET', '/v2/reporting/payment/details?' + param, options) class RetrieveTransactions(IyzipayResource): @@ -867,6 +326,16 @@ def retrieve(self, request, options): return self.connect('GET', '/v2/reporting/payment/transactions?' + query_params, options) +class ReportingScrollTransaction(IyzipayResource): + def retrieve(self, request, options): + transaction_date = request.get('transactionDate') + document_scrolling_vo_sort_order = request.get('documentScrollVoSortingOrder') + last_id = request.get('lastId') + conversation_id = request.get('conversationId') + params = 'transactionDate=' + transaction_date + '&documentScrollVoSortingOrder=' + document_scrolling_vo_sort_order + '&lastId=' + last_id + '&conversationId=' + conversation_id + return self.connect('GET', '/v2/reporting/payment/scroll-transactions?' + params, options) + + class IyziFileBase64Encoder: @staticmethod def encode(file_path): @@ -876,8 +345,12 @@ def encode(file_path): class IyziLinkProduct(IyzipayResource): def create(self, request, options): - return self.connect('POST', '/v2/iyzilink/products/', options, request) - + return self.connect('POST', '/v2/iyzilink/products', options, request) + + def fast_link(self, request, options): + locale = str(request.get('locale', 'tr')) + return self.connect('POST', '/v2/iyzilink/fast-link/products?locale=' + locale, options, request) + def retrieve(self, request, options): if request.get('token') is None: raise Exception('token must be in request') @@ -894,7 +367,16 @@ 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 update_product_status(self, request, options): + if request.get('token') is None: + raise Exception('token must be in request') + token = str(request.get('token')) + if request.get('status') is None: + raise Exception('status must be in request') + status = str(request.get('status')) + return self.connect('PATCH', '/v2/iyzilink/products/' + token + '/status/' + status, options) + def delete(self, request, options): if request.get('token') is None: raise Exception('token must be in request') @@ -904,11 +386,147 @@ def delete(self, request, options): class RetrieveLoyalty(IyzipayResource): def retrieve(self, request, options): - pki = self.to_pki_string_create(request) - return self.connect('POST', '/payment/loyalty/inquire', options, request, pki) + return self.connect('POST', '/payment/loyalty/inquire', options, request) def to_pki_string_create(self, request): pki_builder = iyzipay.PKIBuilder(self.resource_pki(request)) pki_builder.append('paymentCard', self.payment_card_pki(request.get('paymentCard'))) pki_builder.append('currency', request.get('currency')) return pki_builder.get_request_string() + + +class PayWithIyzico(IyzipayResource): + def create(self, request, options): + return self.connect('POST', '/payment/pay-with-iyzico/initialize', options, request) + + +class SubscriptionProduct(IyzipayResource): + url = '/v2/subscription/products' + + def create(self, request, options): + return self.connect('POST', self.url, options, request) + + def list(self, options): + return self.connect('GET', self.url, options) + + def retrieve(self, request, options): + product_reference_code = str(request.get('product_reference_code')) + return self.connect('GET', self.url + '/' + product_reference_code, options) + + def delete(self, request, options): + product_reference_code = str(request.get('product_reference_code')) + return self.connect('DELETE', self.url + '/' + product_reference_code, options) + + def update(self, request, options): + product_reference_code = str(request.get('product_reference_code')) + return self.connect('POST', self.url + '/' + product_reference_code, options, request) + + +class SubscriptionPricingPlan(IyzipayResource): + product_url = '/v2/subscription/products/' + pricing_plan_url = '/v2/subscription/pricing-plans/' + + def create(self, request, options): + product_reference_code = str(request.get('product_reference_code')) + return self.connect('POST', self.product_url + product_reference_code + '/pricing-plans', options, request) + + def list(self, request, options): + product_reference_code = str(request.get('product_reference_code')) + return self.connect('GET', self.product_url + product_reference_code + '/pricing-plans', options) + + def update(self, request, options): + pricing_plan_reference_code = str(request.get('pricing_plan_reference_code')) + return self.connect('POST', self.pricing_plan_url + pricing_plan_reference_code, options, request) + + def retrieve(self, request, options): + pricing_plan_reference_code = str(request.get('pricing_plan_reference_code')) + return self.connect('GET', self.pricing_plan_url + pricing_plan_reference_code, options) + + def delete(self, request, options): + pricing_plan_reference_code = str(request.get('pricing_plan_reference_code')) + return self.connect('DELETE', self.pricing_plan_url + pricing_plan_reference_code, options) + + +class SubscriptionCheckoutForm(IyzipayResource): + url = '/v2/subscription/checkoutform' + + def create(self, request, options): + return self.connect('POST', self.url + '/initialize', options, request) + + def retrieve(self, request, options): + token = str(request.get('token')) + return self.connect('GET', self.url + '/' + token, options, request) + + +class Subscription(IyzipayResource): + url = '/v2/subscription' + + def retrieve(self, options): + return self.connect('GET', self.url + '/subscriptions', options) + + def initialize(self, request, options): + return self.connect('POST', self.url + '/initialize', options, request) + + def initialize_with_customer(self, request, options): + return self.connect('POST', self.url + '/initialize/with-customer', options, request) + + def list(self, request, options): + query = urlencode({k: v for k, v in (request or {}).items() if v is not None}, doseq=True) + list_url = self.url + '/subscriptions' + if query: + list_url += '?' + query + return self.connect('GET', list_url, options) + + def activate(self, request, options): + subscription_reference_code = str(request.get('referenceCode')) + activate_url = '/subscriptions/' + subscription_reference_code + '/activate' + return self.connect('POST', self.url + activate_url, options, request) + + def retry(self, request, options): + return self.connect('POST', self.url + '/operation/retry', options, request) + + def cancel(self, request, options): + subscription_reference_code = str(request.get('subscriptionReferenceCode')) + cancel_url = '/subscriptions/' + subscription_reference_code + '/cancel' + return self.connect('POST', self.url + cancel_url, options, request) + + def upgrade(self, request, options): + subscription_reference_code = str(request.get('subscriptionReferenceCode')) + upgrade_url = '/subscriptions/' + subscription_reference_code + '/upgrade' + return self.connect('POST', self.url + upgrade_url, options, request) + + +class SubscriptionCardUpdate(IyzipayResource): + url = "/v2/subscription/card-update/checkoutform/initialize" + + def initialize(self, request, options): + return self.connect('POST', self.url, options, request) + + def initialize_with_subscription(self, request, options): + return self.connect('POST', self.url + '/with-subscription', options, request) + + +class SubscriptionCustomer(IyzipayResource): + url = "/v2/subscription/customers" + + def create(self, request, options): + return self.connect('POST', self.url, options, request) + + def update(self, request, options): + customer_reference_code = str(request.get('customerReferenceCode')) + return self.connect('POST', self.url + '/' + customer_reference_code, options, request) + + def retrieve(self, request, options): + customer_reference_code = str(request.get('customerReferenceCode')) + return self.connect('GET', self.url + '/' + customer_reference_code, options) + + def delete(self, request, options): + customer_reference_code = str(request.get('customerReferenceCode')) + return self.connect('POST', self.url + '/delete/' + customer_reference_code, options) + + def list(self, request, options): + query = urlencode({k: v for k, v in (request or {}).items() if v is not None}, doseq=True) + list_url = self.url + if query: + list_url += '?' + query + return self.connect('GET', list_url, options) diff --git a/samples/api_test.py b/samples/api_test.py index f55c7a1..59e25c4 100644 --- a/samples/api_test.py +++ b/samples/api_test.py @@ -1,7 +1,9 @@ import iyzipay options = { - 'base_url': iyzipay.base_url + 'secret_key': iyzipay.secret_key, + 'api_key': iyzipay.api_key, + 'base_url': iyzipay.base_url, } api_test = iyzipay.ApiTest().retrieve(options) diff --git a/samples/create_threeds_v2_payment.py b/samples/create_threeds_v2_payment.py new file mode 100644 index 0000000..4ad9bc3 --- /dev/null +++ b/samples/create_threeds_v2_payment.py @@ -0,0 +1,33 @@ +import json +import iyzipay + +options = { + 'api_key': iyzipay.api_key, + 'secret_key': iyzipay.secret_key, + 'base_url': iyzipay.base_url +} + +request = { + 'locale': 'tr', + 'conversationId': '123456789', + 'paymentId': '1', + 'paidPrice': 1.2, + 'basketId': 'B67832', + 'currency': 'TRY' +} + +threeds_payment = iyzipay.ThreedsV2Payment() +threeds_payment_result = threeds_payment.create(request, options) +threeds_payment_response = json.load(threeds_payment_result) +print('response:', threeds_payment_response) + +if threeds_payment_response['status'] == 'success': + secret_key = options['secret_key'] + paymentId = threeds_payment_response['paymentId'] + currency = threeds_payment_response['currency'] + basketId = threeds_payment_response['basketId'] + conversationId = threeds_payment_response['conversationId'] + paidPrice = threeds_payment.strip_zero(str(threeds_payment_response['paidPrice'])) + price = threeds_payment.strip_zero(str(threeds_payment_response['price'])) + signature = threeds_payment_response['signature'] + threeds_payment.verify_signature([paymentId, currency, basketId, conversationId, paidPrice, price], secret_key, signature) diff --git a/samples/images/image.png b/samples/images/image.png new file mode 100644 index 0000000..0397e50 Binary files /dev/null and b/samples/images/image.png differ diff --git a/samples/initialize_pay_with_iyzico.py b/samples/initialize_pay_with_iyzico.py new file mode 100644 index 0000000..11764aa --- /dev/null +++ b/samples/initialize_pay_with_iyzico.py @@ -0,0 +1,61 @@ +import iyzipay + +options = { + 'api_key': iyzipay.api_key, + 'secret_key': iyzipay.secret_key, + 'base_url': iyzipay.base_url +} + +buyer = { + "id": "buyerID", + "name": "buyerName", + "surname": "buyerSurname", + "identityNumber": "11111", + "email": "test@gmail.com", + "gsmNumber": "+905554443322", + "registrationAddress": "Burhaniye Mahallesi Atilla Sokak No:7 Üsküdar", + "city": "Istanbul", + "country": "Turkey", + "ip": "85.34.78.112" +} + +address = { + "address": "Burhaniye Mahallesi Atilla Sokak No:7 Üsküdar", + "contactName": "Contact Name", + "city": "Istanbul", + "country": "Turkey" +} + +basket_items = [ + { + "id": "ItemID", + "price": "1000.0", + "name": "IPHONE 11 64GB WHITE NON ACC Beden:KK06 ,Renk:Beyaz", + "category1": "IPHONE 11", + "itemType": "PHYSICAL", + "chargedFromMerchant": "True" + } +] + +request = { + "locale": "tr", + "conversationId": "conversationID", + "price": "1000.0", + "basketId": "B67832", + "paymentGroup": "PRODUCT", + "callbackUrl": "https://callback.requestcatcher.com/test", + "currency": "TRY", + "cancelUrl": "https://www.cancelUrl.com/", + "paidPrice": "30.0", + "enabledInstallments": [ + 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 + ], + 'buyer': buyer, + 'shippingAddress': address, + 'billingAddress': address, + 'basketItems': basket_items +} + +report = iyzipay.PayWithIyzico().create(request, options) + +print(report.read().decode('utf-8')) diff --git a/samples/iyzilink_create_product.py b/samples/iyzilink_create_product.py index 1e52c1a..436f6fb 100644 --- a/samples/iyzilink_create_product.py +++ b/samples/iyzilink_create_product.py @@ -11,7 +11,7 @@ "conversationId": "123456789", "currencyCode": "TRY", "description": "test product new", - "encodedImageFile": iyzipay.IyziFileBase64Encoder.encode("image.png"), + "encodedImageFile": iyzipay.IyziFileBase64Encoder.encode("./images/image.png"), "installmentRequested": False, "locale": "tr", "name": "awsome product", diff --git a/samples/iyzilink_fast_link.py b/samples/iyzilink_fast_link.py new file mode 100644 index 0000000..0d388d1 --- /dev/null +++ b/samples/iyzilink_fast_link.py @@ -0,0 +1,19 @@ +import iyzipay + +options = { + 'api_key': iyzipay.api_key, + 'secret_key': iyzipay.secret_key, + 'base_url': iyzipay.base_url +} + +request = { + "description": "ft-description-fast-link", + "price": 10, + "currencyCode": "TRY", + "sourceType": "WEB", + "locale": "tr", + "conversationId": "123456789" +} + +report = iyzipay.IyziLinkProduct().fast_link(request, options) +print(report.read().decode('utf-8')) diff --git a/samples/iyzilink_update_product.py b/samples/iyzilink_update_product.py index fcc0f01..4fb9fc1 100644 --- a/samples/iyzilink_update_product.py +++ b/samples/iyzilink_update_product.py @@ -11,7 +11,7 @@ "conversationId": "123456789", "currencyCode": "TRY", "description": "iyzi product name", - "encodedImageFile": iyzipay.IyziFileBase64Encoder.encode("image.png"), + "encodedImageFile": iyzipay.IyziFileBase64Encoder.encode("./images/image.png"), "installmentRequested": False, "locale": "tr", "name": "iyzi product", diff --git a/samples/iyzilink_update_product_status.py b/samples/iyzilink_update_product_status.py new file mode 100644 index 0000000..ad0a998 --- /dev/null +++ b/samples/iyzilink_update_product_status.py @@ -0,0 +1,17 @@ +import iyzipay + +options = { + 'api_key': iyzipay.api_key, + 'secret_key': iyzipay.secret_key, + 'base_url': iyzipay.base_url +} + +request = { + "conversationId": "123456789", + "locale": "tr", + "token": "WxI", + "status": "PASSIVE" +} + +report = iyzipay.IyziLinkProduct().update_product_status(request, options) +print(report.read().decode('utf-8')) diff --git a/samples/refund_payment.py b/samples/refund_payment.py new file mode 100644 index 0000000..f073cec --- /dev/null +++ b/samples/refund_payment.py @@ -0,0 +1,19 @@ +import iyzipay + +options = { + 'api_key': iyzipay.api_key, + 'secret_key': iyzipay.secret_key, + 'base_url': iyzipay.base_url +} + +request = { + "locale": "tr", + "conversationId": "conversationId", + "paymentId": "2921546163", + "price": "3.0", + "ip": "85.34.78.112" +} + +sub_merchant = iyzipay.Payment().refund(request, options) + +print(sub_merchant.read().decode('utf-8')) diff --git a/samples/retrieve_payment_detail.py b/samples/retrieve_payment_detail.py index 8d6e544..4759c76 100644 --- a/samples/retrieve_payment_detail.py +++ b/samples/retrieve_payment_detail.py @@ -7,8 +7,10 @@ } request = { - 'paymentConversationId': '123456s789' + 'paymentConversationId': '123456s789', + 'paymentId': 1 } +# Both parameters are not mandatory; one of two is enough + report = iyzipay.RetrievePaymentDetails().retrieve(request, options) print(report.read().decode('utf-8')) - diff --git a/samples/subscriptions/subscription_activate.py b/samples/subscriptions/subscription_activate.py new file mode 100644 index 0000000..bcc5e6f --- /dev/null +++ b/samples/subscriptions/subscription_activate.py @@ -0,0 +1,15 @@ +import iyzipay + +options = { + 'api_key': iyzipay.api_key, + 'secret_key': iyzipay.secret_key, + 'base_url': iyzipay.base_url +} + +request = { + "referenceCode": "a2077643-bab7-4b73-85a5-7676c78d7c66" +} + +subscription = iyzipay.Subscription().activate(request, options) + +print(subscription.read().decode('utf-8')) diff --git a/samples/subscriptions/subscription_cancel.py b/samples/subscriptions/subscription_cancel.py new file mode 100644 index 0000000..488ef5a --- /dev/null +++ b/samples/subscriptions/subscription_cancel.py @@ -0,0 +1,15 @@ +import iyzipay + +options = { + 'api_key': iyzipay.api_key, + 'secret_key': iyzipay.secret_key, + 'base_url': iyzipay.base_url +} + +request = { + "subscriptionReferenceCode": "a2077643-bab7-4b73-85a5-7676c78d7c66" +} + +subscription = iyzipay.Subscription().cancel(request, options) + +print(subscription.read().decode('utf-8')) diff --git a/samples/subscriptions/subscription_card_update_init.py b/samples/subscriptions/subscription_card_update_init.py new file mode 100644 index 0000000..ab3d862 --- /dev/null +++ b/samples/subscriptions/subscription_card_update_init.py @@ -0,0 +1,17 @@ +import iyzipay + +options = { + 'api_key': iyzipay.api_key, + 'secret_key': iyzipay.secret_key, + 'base_url': iyzipay.base_url +} + +request = { + "locale": "tr", + "callbackUrl": "https://www.merchant.com/callback", + "customerReferenceCode": "7d96e96c-7850-4c63-9ae0-1c9d359e6565" +} + +subscription = iyzipay.SubscriptionCardUpdate().initialize(request, options) + +print(subscription.read().decode('utf-8')) diff --git a/samples/subscriptions/subscription_card_update_init_with_subscription.py b/samples/subscriptions/subscription_card_update_init_with_subscription.py new file mode 100644 index 0000000..d410ca3 --- /dev/null +++ b/samples/subscriptions/subscription_card_update_init_with_subscription.py @@ -0,0 +1,18 @@ +import iyzipay + +options = { + 'api_key': iyzipay.api_key, + 'secret_key': iyzipay.secret_key, + 'base_url': iyzipay.base_url +} + +request = { + "locale": "tr", + "conversationId": "123456", + "callbackUrl": "https://www.merchant.com/callback", + "subscriptionReferenceCode": "7d96e96c-7850-4c63-9ae0-1c9d359e6565" +} + +subscription = iyzipay.SubscriptionCardUpdate().initialize_with_subscription(request, options) + +print(subscription.read().decode('utf-8')) diff --git a/samples/subscriptions/subscription_checkout_form_initialize.py b/samples/subscriptions/subscription_checkout_form_initialize.py new file mode 100644 index 0000000..97d583e --- /dev/null +++ b/samples/subscriptions/subscription_checkout_form_initialize.py @@ -0,0 +1,39 @@ +import iyzipay + +options = { + 'api_key': iyzipay.api_key, + 'secret_key': iyzipay.secret_key, + 'base_url': iyzipay.base_url +} + +request = { + "callbackUrl": "http://localhost", + "pricingPlanReferenceCode": "36fcd8e3-f99b-4b19-9dc4-f7c30d7f0cd4", + "subscriptionInitialStatus": "ACTIVE", + "conversationId": "123456789", + "customer": { + "name": "John", + "surname": "Stone", + "email": "john@gmail.com", + "gsmNumber": "+905545545512", + "identityNumber": "1234567890", + "billingAddress": { + "address": "Altunizade Mah. İnci Çıkmazı Sokak No: 3 İç Kapı No: 10 Üsküdar İstanbul", + "zipCode": "34345", + "contactName": "contactName", + "city": "Istanbul", + "country": "Türkiye" + }, + "shippingAddress": { + "address": "Altunizade Mah. İnci Çıkmazı Sokak No: 3 İç Kapı No: 10 Üsküdar İstanbul", + "zipCode": "34345", + "contactName": "contactName", + "city": "Istanbul", + "country": "Türkiye" + } + } +} + +checkout_form = iyzipay.SubscriptionCheckoutForm().create(request, options) + +print(checkout_form.read().decode('utf-8')) diff --git a/samples/subscriptions/subscription_checkout_form_retrieve.py b/samples/subscriptions/subscription_checkout_form_retrieve.py new file mode 100644 index 0000000..500428a --- /dev/null +++ b/samples/subscriptions/subscription_checkout_form_retrieve.py @@ -0,0 +1,15 @@ +import iyzipay + +options = { + 'api_key': iyzipay.api_key, + 'secret_key': iyzipay.secret_key, + 'base_url': iyzipay.base_url +} + +token = { + 'token': 'b94c27b3-e65f-4e87-880c-54720174d970' +} + +checkout_form = iyzipay.SubscriptionCheckoutForm().retrieve(token, options) + +print(checkout_form.read().decode('utf-8')) diff --git a/samples/subscriptions/subscription_customer_create.py b/samples/subscriptions/subscription_customer_create.py new file mode 100644 index 0000000..304c79e --- /dev/null +++ b/samples/subscriptions/subscription_customer_create.py @@ -0,0 +1,34 @@ +import iyzipay + +options = { + 'api_key': iyzipay.api_key, + 'secret_key': iyzipay.secret_key, + 'base_url': iyzipay.base_url +} + +request = { + "locale": "tr", + "name": "Orhan", + "surname": "Test", + "email": "test@mail.com", + "gsmNumber": "+905064728758", + "identityNumber": "111111", + "billingAddress": { + "address": "address1", + "zipCode": "zipCode1", + "contactName": "contactName1", + "city": "city1", + "country": "country1" + }, + "shippingAddress": { + "address": "address", + "zipCode": "zipCode", + "contactName": "contactName", + "city": "city", + "country": "country" + } +} + +subscription = iyzipay.SubscriptionCustomer().create(request, options) + +print(subscription.read().decode('utf-8')) diff --git a/samples/subscriptions/subscription_customer_delete.py b/samples/subscriptions/subscription_customer_delete.py new file mode 100644 index 0000000..61e80e0 --- /dev/null +++ b/samples/subscriptions/subscription_customer_delete.py @@ -0,0 +1,15 @@ +import iyzipay + +options = { + 'api_key': iyzipay.api_key, + 'secret_key': iyzipay.secret_key, + 'base_url': iyzipay.base_url +} + +request = { + 'customerReferenceCode': '994cbfca-2858-42cb-b2f0-5cc81b1f658c' +} + +subscription = iyzipay.SubscriptionCustomer().delete(request, options) + +print(subscription.read().decode('utf-8')) diff --git a/samples/subscriptions/subscription_customer_list.py b/samples/subscriptions/subscription_customer_list.py new file mode 100644 index 0000000..f74e097 --- /dev/null +++ b/samples/subscriptions/subscription_customer_list.py @@ -0,0 +1,16 @@ +import iyzipay + +options = { + 'api_key': iyzipay.api_key, + 'secret_key': iyzipay.secret_key, + 'base_url': iyzipay.base_url +} + +request = { + 'page': 1, + 'count': 10, +} + +subscription = iyzipay.SubscriptionCustomer().list(request, options) + +print(subscription.read().decode('utf-8')) diff --git a/samples/subscriptions/subscription_customer_retrieve.py b/samples/subscriptions/subscription_customer_retrieve.py new file mode 100644 index 0000000..a8315f8 --- /dev/null +++ b/samples/subscriptions/subscription_customer_retrieve.py @@ -0,0 +1,15 @@ +import iyzipay + +options = { + 'api_key': iyzipay.api_key, + 'secret_key': iyzipay.secret_key, + 'base_url': iyzipay.base_url +} + +request = { + 'customerReferenceCode': '994cbfca-2858-42cb-b2f0-5cc81b1f658c' +} + +subscription = iyzipay.SubscriptionCustomer().retrieve(request, options) + +print(subscription.read().decode('utf-8')) diff --git a/samples/subscriptions/subscription_customer_update.py b/samples/subscriptions/subscription_customer_update.py new file mode 100644 index 0000000..53aa4e3 --- /dev/null +++ b/samples/subscriptions/subscription_customer_update.py @@ -0,0 +1,35 @@ +import iyzipay + +options = { + 'api_key': iyzipay.api_key, + 'secret_key': iyzipay.secret_key, + 'base_url': iyzipay.base_url +} + +request = { + "customerReferenceCode": "994cbfca-2858-42cb-b2f0-5cc81b1f658c", + "name": "John", + "surname": "Doe", + "email": "email@gmail.com", + "gsmNumber": "+905554443333", + "identityNumber": "11111111111", + "billingAddress": { + "address": "address1", + "zipCode": "34940", + "contactName": "John Doe", + "city": "Istanbul", + "district": "District", + "country": "Turkey" + }, + "shippingAddress": { + "address": "address", + "zipCode": "34940", + "contactName": "John Doe", + "city": "Istanbul", + "country": "Turkey" + } +} + +subscription = iyzipay.SubscriptionCustomer().update(request, options) + +print(subscription.read().decode('utf-8')) diff --git a/samples/subscriptions/subscription_initialize.py b/samples/subscriptions/subscription_initialize.py new file mode 100644 index 0000000..4651e7d --- /dev/null +++ b/samples/subscriptions/subscription_initialize.py @@ -0,0 +1,45 @@ +import iyzipay + +options = { + 'api_key': iyzipay.api_key, + 'secret_key': iyzipay.secret_key, + 'base_url': iyzipay.base_url +} + +request = { + "locale": "tr", + "pricingPlanReferenceCode": "36fcd8e3-f99b-4b19-9dc4-f7c30d7f0cd4", + "conversationId": "conv-1001", + "subscriptionInitialStatus": "ACTIVE", + "customer": { + "name": "John", + "surname": "Stone", + "email": "john@gmail.com", + "gsmNumber": "+905545545512", + "identityNumber": "1234567890", + "billingAddress": { + "address": "Altunizade Mah. İnci Çıkmazı Sokak No: 3 İç Kapı No: 10 Üsküdar İstanbul", + "contactName": "contactName", + "city": "Istanbul", + "country": "Türkiye" + }, + "shippingAddress": { + "address": "address", + "zipCode": "zipCode", + "contactName": "contactName", + "city": "city", + "country": "country" + } + }, + "paymentCard": { + "cardHolderName": "John Doe", + "cardNumber": "5528790000000008", + "expireMonth": "12", + "expireYear": "2030", + "cvc": "123" + } +} + +subscription = iyzipay.Subscription().initialize(request, options) + +print(subscription.read().decode('utf-8')) diff --git a/samples/subscriptions/subscription_initialize_for_customer.py b/samples/subscriptions/subscription_initialize_for_customer.py new file mode 100644 index 0000000..0ad2f38 --- /dev/null +++ b/samples/subscriptions/subscription_initialize_for_customer.py @@ -0,0 +1,17 @@ +import iyzipay + +options = { + 'api_key': iyzipay.api_key, + 'secret_key': iyzipay.secret_key, + 'base_url': iyzipay.base_url +} + +request = { + 'subscriptionInitialStatus': 'ACTIVE', + 'pricingPlanReferenceCode': '36fcd8e3-f99b-4b19-9dc4-f7c30d7f0cd4', + 'customerReferenceCode': 'c9fba719-bf17-45fa-9cc7-8fbb70321023' +} + +subscription = iyzipay.Subscription().initialize_with_customer(request, options) + +print(subscription.read().decode('utf-8')) diff --git a/samples/subscriptions/subscription_list.py b/samples/subscriptions/subscription_list.py new file mode 100644 index 0000000..d188470 --- /dev/null +++ b/samples/subscriptions/subscription_list.py @@ -0,0 +1,22 @@ +import iyzipay + +options = { + 'api_key': iyzipay.api_key, + 'secret_key': iyzipay.secret_key, + 'base_url': iyzipay.base_url +} + +request = { + "page": "1", + "count": "10", + "subscriptionStatus": "ACTIVE", + "subscriptionReferenceCode": "c8ab43da-f4b3-40d2-b1ef-620da93ece9", + "customerReferenceCode": "566b2e1a-5046-4438-9b62-c8cf761f6d1", + "pricingPlanReferenceCode": "c1d489b6-9adc-42fa-88ae-47ea2e5db1e", + "parentReferenceCode": "f219267d-ce05-4039-a773-225ea44aad1", + "startDate": "2026-01-01 08:00:00", + "endDate": "2025-08-24 20:00:00", +} +subscription_list = iyzipay.Subscription().list(request, options) + +print(subscription_list.read().decode('utf-8')) diff --git a/samples/subscriptions/subscription_pricing_plan_create.py b/samples/subscriptions/subscription_pricing_plan_create.py new file mode 100644 index 0000000..36041fe --- /dev/null +++ b/samples/subscriptions/subscription_pricing_plan_create.py @@ -0,0 +1,25 @@ +import iyzipay + +options = { + 'api_key': iyzipay.api_key, + 'secret_key': iyzipay.secret_key, + 'base_url': iyzipay.base_url +} + +pricing_plan = { + 'locale': 'tr', + 'conversationId': 'conv-001', + 'name': 'Aylık Plan', + 'recurrenceCount': 12, + 'planPaymentType': 'RECURRING', + 'trialPeriodDays': 0, + 'paymentIntervalCount': 1, + 'paymentInterval': 'MONTHLY', + 'currencyCode': 'TRY', + 'price': 99.99, + 'product_reference_code': 'fe7b7a27-4192-45da-964e-7a5934b3a6ef' +} + +subscription_pricing_plan = iyzipay.SubscriptionPricingPlan().create(pricing_plan, options) + +print(subscription_pricing_plan.read().decode('utf-8')) diff --git a/samples/subscriptions/subscription_pricing_plan_delete.py b/samples/subscriptions/subscription_pricing_plan_delete.py new file mode 100644 index 0000000..f9b4830 --- /dev/null +++ b/samples/subscriptions/subscription_pricing_plan_delete.py @@ -0,0 +1,15 @@ +import iyzipay + +options = { + 'api_key': iyzipay.api_key, + 'secret_key': iyzipay.secret_key, + 'base_url': iyzipay.base_url +} + +request = { + 'pricing_plan_reference_code': 'e0b8e566-5c6c-430f-8b6e-281c44215bbf' +} + +subscription_pricing_plan_delete = iyzipay.SubscriptionPricingPlan().delete(request, options) + +print(subscription_pricing_plan_delete.read().decode('utf-8')) diff --git a/samples/subscriptions/subscription_pricing_plan_list.py b/samples/subscriptions/subscription_pricing_plan_list.py new file mode 100644 index 0000000..6c634fd --- /dev/null +++ b/samples/subscriptions/subscription_pricing_plan_list.py @@ -0,0 +1,19 @@ +import iyzipay + +options = { + 'api_key': iyzipay.api_key, + 'secret_key': iyzipay.secret_key, + 'base_url': iyzipay.base_url +} + +request = { + 'locale': 'tr', + 'conversationId': '123456789', + 'page': 1, + 'count': 10, + 'product_reference_code': 'fe7b7a27-4192-45da-964e-7a5934b3a6ef' +} + +subscription_pricing_plan_list = iyzipay.SubscriptionPricingPlan().list(request, options) + +print(subscription_pricing_plan_list.read().decode('utf-8')) diff --git a/samples/subscriptions/subscription_pricing_plan_retrieve.py b/samples/subscriptions/subscription_pricing_plan_retrieve.py new file mode 100644 index 0000000..17f66a4 --- /dev/null +++ b/samples/subscriptions/subscription_pricing_plan_retrieve.py @@ -0,0 +1,15 @@ +import iyzipay + +options = { + 'api_key': iyzipay.api_key, + 'secret_key': iyzipay.secret_key, + 'base_url': iyzipay.base_url +} + +request = { + 'pricing_plan_reference_code': 'e0b8e566-5c6c-430f-8b6e-281c44215bbf' +} + +subscription_pricing_plan = iyzipay.SubscriptionPricingPlan().retrieve(request, options) + +print(subscription_pricing_plan.read().decode('utf-8')) diff --git a/samples/subscriptions/subscription_pricing_plan_update.py b/samples/subscriptions/subscription_pricing_plan_update.py new file mode 100644 index 0000000..a473111 --- /dev/null +++ b/samples/subscriptions/subscription_pricing_plan_update.py @@ -0,0 +1,17 @@ +import iyzipay + +options = { + 'api_key': iyzipay.api_key, + 'secret_key': iyzipay.secret_key, + 'base_url': iyzipay.base_url +} + +request = { + 'name': 'Aylık Yeni Plan', + 'trialPeriodDays': 5, + 'pricing_plan_reference_code': 'e0b8e566-5c6c-430f-8b6e-281c44215bbf' +} + +subscription_pricing_plan = iyzipay.SubscriptionPricingPlan().update(request, options) + +print(subscription_pricing_plan.read().decode('utf-8')) diff --git a/samples/subscriptions/subscription_product_create.py b/samples/subscriptions/subscription_product_create.py new file mode 100644 index 0000000..8fc0a8a --- /dev/null +++ b/samples/subscriptions/subscription_product_create.py @@ -0,0 +1,18 @@ +import iyzipay + +options = { + 'api_key': iyzipay.api_key, + 'secret_key': iyzipay.secret_key, + 'base_url': iyzipay.base_url +} + +product = { + 'locale': 'tr', + 'conversationId': '123456789', + 'name': 'Coffee Pack', + 'description': 'Turkish Coffee' +} + +subscription_product = iyzipay.SubscriptionProduct().create(product, options) + +print(subscription_product.read().decode('utf-8')) diff --git a/samples/subscriptions/subscription_product_delete.py b/samples/subscriptions/subscription_product_delete.py new file mode 100644 index 0000000..71f03e3 --- /dev/null +++ b/samples/subscriptions/subscription_product_delete.py @@ -0,0 +1,15 @@ +import iyzipay + +options = { + 'api_key': iyzipay.api_key, + 'secret_key': iyzipay.secret_key, + 'base_url': iyzipay.base_url +} + +request = { + 'product_reference_code': '9f7cbae3-bb85-4649-981c-707ac034ca4d' +} + +subscription_product_delete = iyzipay.SubscriptionProduct().delete(request, options) + +print(subscription_product_delete.read().decode('utf-8')) diff --git a/samples/subscriptions/subscription_product_list.py b/samples/subscriptions/subscription_product_list.py new file mode 100644 index 0000000..1e67bc4 --- /dev/null +++ b/samples/subscriptions/subscription_product_list.py @@ -0,0 +1,11 @@ +import iyzipay + +options = { + 'api_key': iyzipay.api_key, + 'secret_key': iyzipay.secret_key, + 'base_url': iyzipay.base_url +} + +subscription_product = iyzipay.SubscriptionProduct().list(options) + +print(subscription_product.read().decode('utf-8')) diff --git a/samples/subscriptions/subscription_product_retrieve.py b/samples/subscriptions/subscription_product_retrieve.py new file mode 100644 index 0000000..6f336a3 --- /dev/null +++ b/samples/subscriptions/subscription_product_retrieve.py @@ -0,0 +1,15 @@ +import iyzipay + +options = { + 'api_key': iyzipay.api_key, + 'secret_key': iyzipay.secret_key, + 'base_url': iyzipay.base_url +} + +request = { + 'product_reference_code': '9f7cbae3-bb85-4649-981c-707ac034ca4d' +} + +subscription_product = iyzipay.SubscriptionProduct().retrieve(request, options) + +print(subscription_product.read().decode('utf-8')) diff --git a/samples/subscriptions/subscription_product_update.py b/samples/subscriptions/subscription_product_update.py new file mode 100644 index 0000000..b1faa65 --- /dev/null +++ b/samples/subscriptions/subscription_product_update.py @@ -0,0 +1,19 @@ +import iyzipay + +options = { + 'api_key': iyzipay.api_key, + 'secret_key': iyzipay.secret_key, + 'base_url': iyzipay.base_url +} + +product = { + 'locale': 'tr', + 'conversationId': '123456789', + 'name': 'New Coffee Pack', + 'description': 'Delicious Turkish Coffee', + 'product_reference_code': 'fdb7bc8b-c7a7-44a0-a143-1ce3a6aaeb41' +} + +subscription_product = iyzipay.SubscriptionProduct().update(product, options) + +print(subscription_product.read().decode('utf-8')) diff --git a/samples/subscriptions/subscription_retrieve.py b/samples/subscriptions/subscription_retrieve.py new file mode 100644 index 0000000..5e9e3d5 --- /dev/null +++ b/samples/subscriptions/subscription_retrieve.py @@ -0,0 +1,12 @@ +import iyzipay + +options = { + 'api_key': iyzipay.api_key, + 'secret_key': iyzipay.secret_key, + 'base_url': iyzipay.base_url +} + + +subscription_list = iyzipay.Subscription().retrieve(options) + +print(subscription_list.read().decode('utf-8')) diff --git a/samples/subscriptions/subscription_retry.py b/samples/subscriptions/subscription_retry.py new file mode 100644 index 0000000..62029c5 --- /dev/null +++ b/samples/subscriptions/subscription_retry.py @@ -0,0 +1,15 @@ +import iyzipay + +options = { + 'api_key': iyzipay.api_key, + 'secret_key': iyzipay.secret_key, + 'base_url': iyzipay.base_url +} + +request = { + "referenceCode": "a2077643-bab7-4b73-85a5-7676c78d7c66" +} + +subscription = iyzipay.Subscription().retry(request, options) + +print(subscription.read().decode('utf-8')) diff --git a/samples/subscriptions/subscription_upgrade.py b/samples/subscriptions/subscription_upgrade.py new file mode 100644 index 0000000..983bd84 --- /dev/null +++ b/samples/subscriptions/subscription_upgrade.py @@ -0,0 +1,19 @@ +import iyzipay + +options = { + 'api_key': iyzipay.api_key, + 'secret_key': iyzipay.secret_key, + 'base_url': iyzipay.base_url +} + +request = { + "subscriptionReferenceCode": "a2077643-bab7-4b73-85a5-7676c78d7c66", + "newPricingPlanReferenceCode": "dbffa857-40f5-48d1-9179-e9326ffb942d", + "upgradePeriod": "NEXT_PERIOD", + "useTrial": False, + "resetRecurrenceCount": True +} + +subscription = iyzipay.Subscription().upgrade(request, options) + +print(subscription.read().decode('utf-8')) diff --git a/samples/update_sub_merchant_item.py b/samples/update_sub_merchant_item.py new file mode 100644 index 0000000..47877d3 --- /dev/null +++ b/samples/update_sub_merchant_item.py @@ -0,0 +1,19 @@ +import iyzipay + +options = { + 'api_key': iyzipay.api_key, + 'secret_key': iyzipay.secret_key, + 'base_url': iyzipay.base_url +} + +request = { + "locale": "tr", + "conversationId": "123456789", + "paymentTransactionId": "20947104", + "subMerchantKey": "favC6OGPAVHb97HwXG5GPKd4KuE=", + "subMerchantPrice": "11.0" +} + +sub_merchant_item = iyzipay.SubMerchant().update_item(request, options) + +print(sub_merchant_item.read().decode('utf-8')) diff --git a/setup.py b/setup.py index d315e4f..b1d4816 100755 --- a/setup.py +++ b/setup.py @@ -34,13 +34,11 @@ "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", - "Programming Language :: Python :: 3.6", - "Programming Language :: Python :: 3.7", - "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Software Development :: Libraries :: Python Modules", ],