public function checkoutWithIyzico(?array $data = null, Request $request) { // 0) Giriş guard $data = $data ?? []; try { // iyzico değilse, zinciri BOZMADAN aynen geri dön if ($request->input('payment_method') !== IYZICO_PAYMENT_METHOD_NAME) { return $data; } // 1) Para birimi desteği $supportedCurrencies = (new IyzicoPaymentService)->supportedCurrencyCodes(); if (empty($data['currency']) || !in_array($data['currency'], $supportedCurrencies, true)) { $data['error'] = true; $data['message'] = __( ":name, :currency para birimini desteklemiyor. Desteklenenler: :currencies.", [ 'name' => 'Iyzico', 'currency' => $data['currency'] ?? 'N/A', 'currencies' => implode(', ', $supportedCurrencies), ] ); return $data; } // 2) API anahtarları $apiKey = get_payment_setting('key', IYZICO_PAYMENT_METHOD_NAME); $apiSecret = get_payment_setting('secret', IYZICO_PAYMENT_METHOD_NAME); $apiInstallment= (int) get_payment_setting('installment', IYZICO_PAYMENT_METHOD_NAME); if (!$apiKey || !$apiSecret) { $data['error'] = true; $data['message'] = 'Iyzico API anahtarları bulunamadı.'; return $data; } // 3) Sipariş ve adres bilgileri $orderIds = (array) $request->input('order_id', []); $orderId = \Illuminate\Support\Arr::first($orderIds); if (!$orderId || empty($data['amount'])) { $data['error'] = true; $data['message'] = 'Sipariş veya tutar bilgisi eksik.'; return $data; } /** @var \Botble\Ecommerce\Repositories\Interfaces\OrderAddressInterface $orderAddressRepo */ $orderAddressRepo = $this->app->make(\Botble\Ecommerce\Repositories\Interfaces\OrderAddressInterface::class); $orderAddress = $orderAddressRepo->getFirstBy(['order_id' => $orderId]); // 4) Iyzipay bootstrap & options include_once __DIR__ . '/../IyzipayBootstrap.php'; \IyzipayBootstrap::init(null); $options = new \Iyzipay\Options(); $options->setApiKey($apiKey); $options->setSecretKey($apiSecret); // İsterseniz .env üzerinden kontrol edin: IYZICO_BASE_URL $options->setBaseUrl(env('IYZICO_BASE_URL', 'https://api.iyzipay.com')); // 5) Taksit seçenekleri $enabledInstallments = [1]; // tek çekim her zaman var if ($apiInstallment > 1) { $enabledInstallments = range(1, min($apiInstallment, 12)); } // 6) Para birimi eşleme $iyziCurrency = \Iyzipay\Model\Currency::TL; // varsayılan if (strtoupper($data['currency']) === 'TRY') { $iyziCurrency = \Iyzipay\Model\Currency::TL; } // NOT: Başka para birimleri kullanıyorsanız burada eşleyin. // 7) Iyzipay CheckoutForm initialize request $conversationId = time() . '-' . $orderId; $amount = (string) $data['amount']; // iyzico string bekler $iyziReq = new \Iyzipay\Request\CreateCheckoutFormInitializeRequest(); $iyziReq->setLocale(\Iyzipay\Model\Locale::TR); $iyziReq->setConversationId($conversationId); $iyziReq->setPrice($amount); $iyziReq->setPaidPrice($amount); $iyziReq->setCurrency($iyziCurrency); $iyziReq->setBasketId($orderId); $iyziReq->setPaymentGroup(\Iyzipay\Model\PaymentGroup::PRODUCT); $iyziReq->setCallbackUrl(route('iyzico.payment.callback')); // Route tanımlı olmalı $iyziReq->setEnabledInstallments($enabledInstallments); // Buyer $buyer = new \Iyzipay\Model\Buyer(); $buyer->setId((string) ($orderAddress->id ?? $orderId)); $buyer->setName($orderAddress->name ?? 'Müşteri'); $buyer->setSurname($orderAddress->name ?? 'Müşteri'); $buyer->setGsmNumber($orderAddress->phone ?? '0000000000'); $buyer->setEmail($orderAddress->email ?? 'no-email@domain.com'); $buyer->setIdentityNumber('11111111111'); // gerçek TCKN var ise koyabilirsiniz $buyer->setLastLoginDate(date('Y-m-d H:i:s')); $buyer->setRegistrationDate(date('Y-m-d H:i:s')); $buyer->setRegistrationAddress(($orderAddress->city ?? '') . ' ' . ($orderAddress->address ?? 'Adres')); $buyer->setCity($orderAddress->state ?? 'Istanbul'); $buyer->setCountry($orderAddress->country ?? 'Turkey'); $iyziReq->setBuyer($buyer); // Address (fatura/kargo) $billingAddress = new \Iyzipay\Model\Address(); $billingAddress->setContactName($orderAddress->name ?? 'Müşteri'); $billingAddress->setCity($orderAddress->state ?? 'Istanbul'); $billingAddress->setCountry($orderAddress->country ?? 'Turkey'); $billingAddress->setAddress(($orderAddress->city ?? '') . ' ' . ($orderAddress->address ?? 'Adres')); $billingAddress->setZipCode('34742'); $iyziReq->setBillingAddress($billingAddress); $iyziReq->setShippingAddress($billingAddress); // Basket (özet) $basketItem = new \Iyzipay\Model\BasketItem(); $basketItem->setId((string) $orderId); $basketItem->setName('Sipariş #' . $orderId); $basketItem->setCategory1('Sipariş'); $basketItem->setItemType(\Iyzipay\Model\BasketItemType::PHYSICAL); $basketItem->setPrice($amount); $iyziReq->setBasketItems([$basketItem]); // 8) İstek $init = \Iyzipay\Model\CheckoutFormInitialize::create($iyziReq, $options); if ($init->getStatus() === 'success' && $init->getPaymentPageUrl()) { // DOĞRU YÖNTEM: header/exit yerine redirect_url döndür $data['redirect_url'] = $init->getPaymentPageUrl(); $data['error'] = false; return $data; } // Başarısız ise anlamlı mesaj $data['error'] = true; $data['message'] = $init->getErrorMessage() ?: 'Ödeme başlatılırken beklenmeyen bir hata oluştu.'; return $data; } catch (\Throwable $e) { \Log::error('IYZICO initialize exception', ['ex' => $e]); $data['error'] = true; $data['message'] = 'Ödeme başlatılırken bir hata oluştu.'; return $data; } } Bir Hata Oluştu: Dahili Sunucu Hatası

Hata! Bir hata oluştu

Sunucu bir "500 Dahili Sunucu Hatası" döndürdü.

Bir şey kırılmış. Lütfen bu hata oluştuğunda ne yaptığınızı bize bildirin. En kısa sürede düzeltiriz. Rahatsızlıktan dolayı özür dilerim.