Untitled

 avatar
unknown
php
5 months ago
10 kB
4
Indexable
<?php
require_once 'Response.php';

class ApiFunctions {
    private $client_id;

    public function __construct($client_id) {
        $this->client_id = $client_id;
    }

    // Bin taksit bilgilerini yazdır
    public function installment($bin) {
        // Kart Bilgileri
        $binlist = DB::queryFirstRow("SELECT * FROM `bank_binlist` WHERE bin = %s", $bin["cardbin"]);

        if (!$binlist) {
            return Response::json(['status' => 212, 'error' => 'bin_Error', 'message' => 'Bin Numarası Sistemde Bulunamadı'], 212);
        }

        // Kart Bilgileri Oluştur
        $cardinfo = [
            'binNumber'     => (int)$binlist['bin'],
            'issuerBank'    => $binlist['bank_name'],
            'brand'         => $binlist['card_brand'],
            'programType'   => $binlist['card_program'],
            'cardCompany'   => (int)$binlist['card_company'],
            'cardType'      => ($binlist['card_type'] === 'Debit Card') ? 'debitcard' : 'creditcard',
        ];

        // Ana sorgu
        $result = DB::query(
            "SELECT i.*, m.id AS modulid, m.app_name AS matched_installment, c.default_installment
            FROM bank_binlist b
            LEFT JOIN installment i ON b.card_program = i.card_program
            LEFT JOIN customers c ON c.id = i.customers_id
            LEFT JOIN poslist_key m ON m.app_name = JSON_UNQUOTE(JSON_EXTRACT(c.default_installment, '$.ana_pos')) AND m.id = i.modul_id
            WHERE b.bin = %s
            AND i.card_program = b.card_program
            AND i.customers_id = %s
            AND i.status = %s
            AND JSON_UNQUOTE(JSON_EXTRACT(c.default_installment, '$.ana_pos')) IS NOT NULL
            AND m.id IS NOT NULL
            ORDER BY i.installment ASC;",
            $binlist['bin'], $this->client_id, 1
        );

        $listArray = [];

        // Tetikleyici kontrolü
        $trigger = DB::queryFirstRow("SELECT * FROM `triggers` WHERE customers_id = %s AND card_program = %s AND status = %s",
            $this->client_id, $binlist['card_program'], 1
        );

        $triggeredInstallments = $trigger ? json_decode($trigger['installment'], true) : [];

        foreach ($result as $var) {
            $installment  = (int)$var["installment"];
            $json         = json_decode($var['default_installment'], true);
            $tek_cekim    = $json["tekcekim"];
            $ana_pos      = $json["ana_pos"];

            // Tetikleyici kontrolü yap
            if (in_array($installment, $triggeredInstallments)) {
                // Eğer taksit tetikleyicide varsa, tetikleyici pos_name ile ekle
                $trigger_set = DB::queryFirstRow("SELECT * FROM `installment` WHERE modul_id = %s AND installment = %s AND card_program = %s",
                    $trigger["modul_id"], $installment, $trigger["card_program"]
                );

                $listArray[] = [
                    'pos_id'      => (int)$trigger_set["modul_id"],
                    'ins_id'      => (int)$trigger_set["id"],
                    'installment' => (int)$trigger_set["installment"],
                    'commission'  => $trigger_set["commission"],
                    'program'     => $trigger_set["card_program"],
                    'pos'         => $trigger['pos_name'],
                ];

                continue; // Tetikleyici devreye girdiği için döngüyü geç
            }

            // Debit kart için tek çekim POS kullanımı
            if ($cardinfo['cardType'] === 'debitcard' && $installment === 1) {
                $default_pos = DB::queryFirstRow("SELECT i.*, c.default_installment
                    FROM customers c
                    LEFT JOIN poslist_key p ON ( p.app_name = JSON_UNQUOTE(JSON_EXTRACT(c.default_installment, '$.tekcekim')) )
                    LEFT JOIN installment i ON ( i.modul_id = p.id )
                    WHERE c.id = %s
                    AND i.card_program = %s
                    AND i.status = 1
                    AND i.installment = 1
                    AND JSON_UNQUOTE(JSON_EXTRACT(c.default_installment, '$.tekcekim')) IS NOT NULL LIMIT 1",
                    $this->client_id, $binlist['card_program']
                );

                // Eğer default_pos yoksa, genel bir sorgu yap
                if (!isset($default_pos)) {
                    $default_pos = DB::queryFirstRow("SELECT i.*, c.default_installment
                        FROM customers c
                        LEFT JOIN poslist_key p ON ( p.app_name = JSON_UNQUOTE(JSON_EXTRACT(c.default_installment, '$.tekcekim')) )
                        LEFT JOIN installment i ON ( i.modul_id = p.id )
                        WHERE c.id = %s
                        AND i.status = 1
                        AND i.installment = 1
                        AND JSON_UNQUOTE(JSON_EXTRACT(c.default_installment, '$.tekcekim')) IS NOT NULL LIMIT 1",
                        $this->client_id
                    );
                }

                $_posv = json_decode($default_pos['default_installment'], true);

                // Tek çekim POS'unu ekleyin
                $listArray[] = [
                    'pos_id'      => (int)$default_pos["modul_id"],
                    'ins_id'      => (int)$default_pos["id"],
                    'installment' => (int)$default_pos["installment"],
                    'commission'  => $default_pos["commission"],
                    'program'     => $default_pos["card_program"],
                    'pos'         => $_posv["tekcekim"],
                ];

                continue; // Tek çekim kullanıldıktan sonra döngüyü atla
            }

            // Debit kartta sadece 1 taksit listelenir, diğer taksitleri atla
            if ($cardinfo['cardType'] === 'debitcard' && $installment !== 1) {
                continue;
            }

            // Kredi kartı için tek çekim POS 1 taksit için
            if ($cardinfo['cardType'] === 'creditcard' && $installment === 1) {
                $default_pos = DB::queryFirstRow("SELECT i.*, c.default_installment
                    FROM customers c
                    LEFT JOIN poslist_key p ON ( p.app_name = JSON_UNQUOTE(JSON_EXTRACT(c.default_installment, '$.tekcekim')) )
                    LEFT JOIN installment i ON ( i.modul_id = p.id )
                    WHERE c.id = %s
                    AND i.card_program = %s
                    AND i.status = 1
                    AND i.installment = 1
                    AND JSON_UNQUOTE(JSON_EXTRACT(c.default_installment, '$.tekcekim')) IS NOT NULL LIMIT 1",
                    $this->client_id, $binlist['card_program']
                );

                // Eğer default_pos yoksa, genel bir sorgu yap
                if (!isset($default_pos)) {
                    $default_pos = DB::queryFirstRow("SELECT i.*, c.default_installment
                        FROM customers c
                        LEFT JOIN poslist_key p ON ( p.app_name = JSON_UNQUOTE(JSON_EXTRACT(c.default_installment, '$.tekcekim')) )
                        LEFT JOIN installment i ON ( i.modul_id = p.id )
                        WHERE c.id = %s
                        AND i.status = 1
                        AND i.installment = 1
                        AND JSON_UNQUOTE(JSON_EXTRACT(c.default_installment, '$.tekcekim')) IS NOT NULL LIMIT 1",
                        $this->client_id
                    );
                }

                $_posv = json_decode($default_pos['default_installment'], true);
                $listArray[] = [
                    'pos_id'      => (int)$default_pos["modul_id"],
                    'ins_id'      => (int)$default_pos["id"],
                    'installment' => (int)$installment,
                    'commission'  => $default_pos["commission"],
                    'program'     => $default_pos["card_program"],
                    'pos'         => $_posv["tekcekim"],
                ];

                continue; // Tek çekim kullanıldıktan sonra döngüyü atla
            }

            // Kredi kartı için 1 taksit dışındaki taksitlerde ana POS
            if ($cardinfo['cardType'] === 'creditcard' && $installment !== 1) {
                $listArray[] = [
                    'pos_id'      => (int)$var["modulid"],
                    'ins_id'      => (int)$var["id"],
                    'installment' => (int)$installment,
                    'commission'  => $var["commission"],
                    'program'     => $var["card_program"],
                    'pos'         => $ana_pos,
                ];
            }
        }

        // Eğer binlist varsa ama result içinde POS bulunmadıysa, tek çekim POS'u listele
        if (empty($listArray)) {
            $default_pos = DB::queryFirstRow("SELECT i.*, c.default_installment
                FROM customers c
                LEFT JOIN poslist_key p ON ( p.app_name = JSON_UNQUOTE(JSON_EXTRACT(c.default_installment, '$.tekcekim')) )
                LEFT JOIN installment i ON ( i.modul_id = p.id )
                WHERE c.id = %s
                AND i.status = 1
                AND i.installment = 1
                AND JSON_UNQUOTE(JSON_EXTRACT(c.default_installment, '$.tekcekim')) IS NOT NULL LIMIT 1",
                $this->client_id
            );

            if ($default_pos) {
                $_posv = json_decode($default_pos['default_installment'], true);
                $listArray[] = [
                    'pos_id'      => (int)$default_pos["modul_id"],
                    'ins_id'      => (int)$default_pos["id"],
                    'installment' => 1,
                    'commission'  => $default_pos["commission"],
                    'program'     => $default_pos["card_program"],
                    'pos'         => $_posv["tekcekim"],
                ];
            }
        }

        return Response::json(['status' => 200, 'cardInfo' => $cardinfo, 'result' => $listArray]);
    }

}
Editor is loading...
Leave a Comment