Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Iyzipay Next.js Entegrasyonu: Sorunlar ve Çözüm Önerileri #113

Closed
emrecoban opened this issue Aug 24, 2023 · 0 comments
Closed

Iyzipay Next.js Entegrasyonu: Sorunlar ve Çözüm Önerileri #113

emrecoban opened this issue Aug 24, 2023 · 0 comments

Comments

@emrecoban
Copy link

Sorunlar

  1. Iyzipay-node paketi edge runtime'da çalışmamaktadır. Haliyle Cloudflare üzerinde uygulamasını deploy edenler Iyzipay-node paketini hiçbir şekilde çalıştıramayacaktır (v2.0.48) Edge runtime desteği: Can't resolve 'fs' #112 (comment).
  2. 'nodejs' runtime'da çalıştırmak isteyenler /app klasöründe ENOENT: no such file or directory, scandir hatası ile karşılacaklardır. Benzer sorun: AWS de path hatası #102.

Çözüm önerileri

  1. Bu paketi nodejs runtime destekleyen ortamlarda kullanmalısınız.
  2. Next.js hem /app dizini hem de /pages dizini ile birlikte çalışabilmektedir. Bu yüzden bu sorunun çözümü için /pages klasörü altında bir serverless function oluşturarak problemi çözebilirsiniz.

Örnek dizin yapısı:

- app
  - ...
- pages
  - api
    - iyzico.js 

iyzico.js:

import Iyzipay from "iyzipay";
export default function handler(req, res) {
    if (req.method === 'POST') {
        const iyzipay = new Iyzipay({
            apiKey: process.env.IYZIPAY_API_KEY,
            secretKey: process.env.IYZIPAY_SECRET_KEY,
            uri: process.env.IYZIPAY_URI
        });

        const request = {
            locale: Iyzipay.LOCALE.TR,
            conversationId: '000123456789',
            price: '1',
            paidPrice: '1',
            currency: Iyzipay.CURRENCY.TRY,
            basketId: '000B67832',
            paymentGroup: Iyzipay.PAYMENT_GROUP.LISTING,
            callbackUrl: 'https://api.sizinadresiniz.com/api/iyzipay-control',
            enabledInstallments: [1],
            buyer: {
                id: 'BY789',
                name: 'ad',
                surname: 'soyad',
                gsmNumber: '+905000000',
                email: '[email protected]',
                identityNumber: '01100101101',
                lastLoginDate: '2015-10-05 12:43:35',
                registrationDate: '2013-04-21 15:12:09',
                registrationAddress: 'Nidakule Göztepe, Merdivenköy Mah. Bora Sok. No:1',
                ip: '85.34.78.112',
                city: 'Istanbul',
                country: 'Turkey',
                zipCode: '34732'
            },
            shippingAddress: {
                contactName: 'Ad Soyad',
                city: 'Istanbul',
                country: 'Turkey',
                address: 'Nidakule Göztepe, Merdivenköy Mah. Bora Sok. No:1',
                zipCode: '34742'
            },
            billingAddress: {
                contactName: 'Ad Soyad',
                city: 'Istanbul',
                country: 'Turkey',
                address: 'Nidakule Göztepe, Merdivenköy Mah. Bora Sok. No:1',
                zipCode: '34742'
            },
            basketItems: [
                {
                    id: 'Rande01',
                    name: 'Abonelik',
                    category1: 'Yıllık',
                    category2: 'Lansman-Yıllık',
                    itemType: Iyzipay.BASKET_ITEM_TYPE.VIRTUAL,
                    price: '1'
                },
            ]
        };

        iyzipay.checkoutFormInitialize.create(request, function (err, result) {
            console.log(err, result);
            return res.send(result.checkoutFormContent + '<div id="iyzipay-checkout-form" class="responsive"></div>');
        });
    } else {
        return res.status(405).json({ error: "Method Not Allowed" })
    }
}

Daha fazlası

  1. Serverless fonksiyonlar: https://vercel.com/docs/functions/serverless-functions
  2. /pages API route: https://nextjs.org/docs/pages/building-your-application/routing/api-routes
  3. Cloudflare Edge Runtime: https://developers.cloudflare.com/pages/framework-guides/deploy-a-nextjs-site/#configure-the-application-to-use-the-edge-runtime
  4. Next.js Edge Runtime API reference: https://nextjs.org/docs/app/api-reference/edge
  5. Iyzico sample code: https://dev.iyzipay.com/tr/odeme-formu/odeme-formu-baslatma

İlginç bir çözüm yolu

Error: ENOENT: no such file or directory, scandir '/.next/server/app/api/iyzipay/resources' hatası alanlar, proje kök dizininde /.next klasörünü görecekler. Hatada belirtilen dizine bu klasör vasıtasıyla ulaşmaya çalıştıklarında resources adlı klasörü bulamayacaklar. Bu klasörü manuel olarak oluşturduklarında hata almayacaklar. Ancak bu anlık bir çözüm yolu. Paketin iyileştirmesine yönelik çalışma yapanlar için belki bir fikir verebilir.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant