iyzico / iyzipay-python

iyzipay api python client
MIT License
86 stars 35 forks source link

Subscription Form Initialize ederken sürekli (100001) Sistem hatası alıyorum #71

Open EfraimGENC opened 3 years ago

EfraimGENC commented 3 years ago

Yazdığım Resource

class SubscriptionFormInitialize(IyzipayResource):
    def create(self, request, options):
        pki = self.to_pki_string(request)
        return self.connect('POST', '/v2/subscription/checkoutform/initialize', options, request, pki)

    def to_pki_string(self, request):       
        pki_builder = iyzipay.PKIBuilder(self.resource_pki(request))
        pki_builder.append('callbackUrl', request.get('callbackUrl'))
        pki_builder.append('pricingPlanReferenceCode', request.get('pricingPlanReferenceCode'))
        pki_builder.append('subscriptionInitialStatus', request.get('subscriptionInitialStatus'))
        pki_builder.append('name', request.get('name'))
        pki_builder.append('surname', request.get('surname'))
        pki_builder.append('email', request.get('email'))
        pki_builder.append('gsmNumber', request.get('gsmNumber'))
        pki_builder.append('identityNumber', request.get('identityNumber'))
        pki_builder.append('shippingAddress', self.address_pki(request.get('shippingAddress')))
        pki_builder.append('billingAddress', self.address_pki(request.get('billingAddress')))
        return pki_builder.get_request_string()

Yazdığım Örnek

options = {
    'api_key': '-------',
    'secret_key': '-------',
    'base_url': 'sandbox-api.iyzipay.com'
}
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',
    "callbackUrl": "https://www.merchant.com/callback",
    'pricingPlanReferenceCode': '864dea9b-6f1b-4933-bce2-1ca4673a148f',
    'name': 'John',
    'surname': 'Doe',
    'email': 'email@email.com',
    'gsmNumber': '+905350000000',
    'identityNumber': '74300864791',
    'shippingAddress': address,
    'billingAddress': address,
}

iyzico_cevap = iyzipay.SubscriptionFormInitialize().create(
    request, options).read().decode('utf-8')

Oluşan Pki String

[locale=tr,conversationId=123456789,callbackUrl=https://www.merchant.com/callback,referenceCode=864dea9b-6f1b-4933-bce2-1ca4673a148f,name=John,surname=Doe,email=email@email.com,gsmNumber=+905350000000,identityNumber=74300864791,shippingAddress=[address=Nidakule Göztepe, Merdivenköy Mah. Bora Sok. No:1,zipCode=34732,contactName=Jane Doe,city=Istanbul,country=Turkey],billingAddress=[address=Nidakule Göztepe, Merdivenköy Mah. Bora Sok. No:1,zipCode=34732,contactName=Jane Doe,city=Istanbul,country=Turkey]]

Aldığım Cevap {'status': 'failure', 'errorCode': '100001', 'errorMessage': 'Sistem hatası', 'systemTime': 1624444765292}

isanecat commented 1 year ago

Aynı hatayı alıyorum

EfraimGENC commented 1 year ago

@isanecat Bu konu eski bir projede cereyan etmişti. Uzun zaman oldu ama yanlış hatırlamıyorsam body ile alakalı konular vardı. Dökümanlarda bulunan body ler yanlış. Onun yerine PHP SDK'ini okuyup oradan anlamaya çalışmıştım. Öneririm. Dediğim gibi uzun zaman oldu. Çalışıp çalışmadığına bile emin değilim ama o zamanlar yazdığım bir kaç bloğu aşağıda paylaşıyorum. Umarım faydalı olur.

class SubscriptionFormInitialize(IyzipayResource):
    def create(self, request, options):
        pki = self.to_pki_string(request)
        return self.connect('POST', '/v2/subscription/checkoutform/initialize', options, request, pki)

    def to_pki_string(self, request):       
        pki_builder = iyzipay.PKIBuilder(self.resource_pki(request))
        pki_builder.append('pricingPlanReferenceCode', request.get('pricingPlanReferenceCode'))
        pki_builder.append('subscriptionInitialStatus', request.get('subscriptionInitialStatus'))
        pki_builder.append('callbackUrl', request.get('callbackUrl'))
        pki_builder.append('customer', self.customer_pki(request.get('customer')))
        return pki_builder.get_request_string()
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('referenceCode') is None:
            raise Exception('productReferenceCode must be in request')
        referenceCode = str(request.get('referenceCode'))
        return self.connect('POST', '/v2/subscription/products/' + 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/products/' + referenceCode, options)
def subscription_create_product(request):

    prequest = {
        'locale': 'tr',
        'conversationId': str(uuid.uuid4()),
        'name': random_generator(),
        'Description': str(uuid.uuid4()),
    }

    iyzico_response = iyzipay.SubscriptionProduct().create(prequest, options)
    iyzico_response = iyzico_response.read().decode('utf-8')

    context = {
        'iyzico_cevap': json.loads(iyzico_response),
    }
    return render(request, 'payment/payment_test.html', context)
isanecat commented 1 year ago

Teşekkür ederim. İyzico dan destek alamıyorum.

EfraimGENC commented 1 year ago

Teşekkür ederim. İyzico dan destek alamıyorum.

Evet ne yazık ki teknik manada pek destekleri de yok. Dökümanları da güncel ve sağlıklı değil.. Ben de mailleştiğim dönem sorularıma tatmin edici cevaplar alamamıştım. Bazen hiç cevap alamamıştım :)

badursun commented 1 year ago

@EfraimGENC subscription tarafında aldığın token'ı kontrol etmek için hangi end-point'i kullandın? Bende sürekli 100001 hatası alıyorum. Bulabildiğim tek end-point /v2/subscription/checkoutform/ şeklinde

EfraimGENC commented 1 year ago

@badursun Soruyu tam anlayamadım. Yukarıda bahsettiğim gibi uzun zaman evvel bakmıştım yapıyı da çok hatırlamıyorum ama Subs. Form almak için şöyle bir kodum varmış;

options = {
    'api_key': 'sandbox-*******',
    'secret_key': 'sandbox-******',
    'base_url': 'sandbox-api.iyzipay.com'
}

def initialize_subscription_form(request):

    address = {
        'contactName': 'Jane Doe',
        'city': 'Istanbul',
        'country': 'Turkey',
        'address': 'Nidakule Göztepe, Merdivenköy Mah. Bora Sok. No:1',
        'zipCode': '34732'
    }

    customer = {
        'name': 'John',
        'surname': 'Doe',
        'email': 'email@email.com',
        'gsmNumber': '+905350000000',
        'identityNumber': '74300864791',
        'billingAddress': address,
        'shippingAddress': address,
    }

    data = {
        'locale': 'tr',
        'conversationId': '123456789',
        'pricingPlanReferenceCode': '02bd16d8-a742-49f9-9137-0c6347def642',
        'subscriptionInitialStatus': 'ACTIVE',
        "callbackUrl": "https://www.uygulamam.com/callback",
        'customer': customer,
    }

    iyzico_cevap = iyzipay.SubscriptionFormInitialize().create(
        data, options).read().decode('utf-8')

    context = {
        'iyzico_cevap': json.loads(iyzico_cevap),
    }
    return render(request, 'payment/payment_test.html', context)

SubscriptionFormInitialize yukarıda mevcut. /v2/subscription/checkoutform/initialize endpointini kullanıyor.

badursun commented 1 year ago

@EfraimGENC sormak istediğim şey, form init ettim, customer ödemesini yaptı ve geri döndü. Bu noktada elimde ki token ile ödeme sonucunu kontrol edeceğim end-point URL sini sormuştum.