Skip to content

Latest commit

 

History

History
163 lines (141 loc) · 6.01 KB

EXAMPLE-API-ISTEK-VE-3D-FORM-VERSINI-DEGISTIRME.md

File metadata and controls

163 lines (141 loc) · 6.01 KB

Özel durumlarda 3D form verisini veya API istek verisini değiştirmeniz gerektiğinde EventListener'ler kullanabilirsiniz.

Before3DFormHashCalculatedEvent

3D form verisini hash hesaplamadan önce değiştirme:

<?php

namespace App\EventListener;

use Mews\Pos\Event\Before3DFormHashCalculatedEvent;
use Mews\Pos\PosInterface;
use Symfony\Component\EventDispatcher\Attribute\AsEventListener;

/**
 * Bu Event'i dinleyerek 3D formun hash verisi hesaplanmadan önce formun input array içireğini güncelleyebilirsiniz.
 * Eger ekleyeceginiz veri hash hesaplamada kullanilmiyorsa form verisi olusturduktan sonra da ekleyebilirsiniz.
 */
#[AsEventListener(event: Before3DFormHashCalculatedEvent::class)]
final class Before3DFormHashCalculatedEventListener
{
    public function __invoke(Before3DFormHashCalculatedEvent $event)
    {
        $this->imeceKoduEkle($event);
        $this->callbackUrlEkleme($event);
    }

    private function imeceKoduEkle(Before3DFormHashCalculatedEvent $event): void
    {
        if ($event->getGatewayClass() !== \Mews\Pos\Gateways\EstV3Pos::class || $event->getGatewayClass() !== \Mews\Pos\Gateways\EstPos::class) {
            return;
        }
        // Örneğin İşbank İmece Kart ile ödeme yaparken aşağıdaki verilerin eklenmesi gerekiyor:
        $supportedPaymentModels = [
            \Mews\Pos\PosInterface::MODEL_3D_PAY,
            \Mews\Pos\PosInterface::MODEL_3D_PAY_HOSTING,
            \Mews\Pos\PosInterface::MODEL_3D_HOST,
        ];
        if ($event->getTxType() === PosInterface::TX_TYPE_PAY_AUTH && \in_array($event->getPaymentModel(), $supportedPaymentModels, true)) {
            $formInputs           = $event->getFormInputs();
            $formInputs['IMCKOD'] = '9999'; // IMCKOD bilgisi bankadan alınmaktadır.
            $formInputs['FDONEM'] = '5'; // Ödemenin faizsiz ertelenmesini istediğiniz dönem sayısı.
            $event->setFormInputs($formInputs);
        }
    }

    private function callbackUrlEkleme(Before3DFormHashCalculatedEvent $event): void
    {
        if ($event->getGatewayClass() !== \Mews\Pos\Gateways\EstV3Pos::class) {
            return;
        }
        $formInputs                = $event->getFormInputs();
        $formInputs['callbackUrl'] = $formInputs['failUrl'];
        $formInputs['refreshTime'] = '10'; // birim: saniye; callbackUrl sisteminin doğru çalışması için eklenmesi gereken parametre
        $event->setFormInputs($formInputs);
    }
}

RequestDataPreparedEvent

API istek verisini değiştirme:

<?php

namespace App\EventListener;

use Mews\Pos\Event\RequestDataPreparedEvent;
use Mews\Pos\PosInterface;
use Symfony\Component\EventDispatcher\Attribute\AsEventListener;

#[AsEventListener(event: RequestDataPreparedEvent::class)]
final class RequestDataPreparedEventListener
{
    public function __invoke(RequestDataPreparedEvent $event): void
    {
////        Burda istek banka API'na gonderilmeden once gonderilecek veriyi degistirebilirsiniz.
////        Ornek:
//        $data         = $event->getRequestData();
//        $data['abcd'] = '1234';
//        $event->setRequestData($data);


        $this->koiCodeEkleme($event);
        $this->imeceKodEkle($event);
        $this->threeDFormVerisiniOlusturmakIcinGonderilenIstekVerisiniDegistirme($event);
    }

    private function koiCodeEkleme(RequestDataPreparedEvent $event): void
    {
        /**
         * KOICodes:
         * 1:Ek Taksit
         * 2: Taksit Atlatma
         * 3: Ekstra Puan
         * 4: Kontur Kazanım
         * 5: Ekstre Erteleme
         * 6: Özel Vade Farkı
         */
        if ($event->getGatewayClass() instanceof \Mews\Pos\Gateways\PosNetV1Pos) {
             // Albaraka PosNet KOICode ekleme
             $data            = $event->getRequestData();
             $data['KOICode'] = '1';
             $event->setRequestData($data);
        }
        if ($event->getGatewayClass() instanceof \Mews\Pos\Gateways\PosNet) {
             // Yapikredi PosNet KOICode ekleme
             $data            = $event->getRequestData();
             $data['sale']['koiCode'] = '1';
             $event->setRequestData($data);
        }
    }

    /**
     * Isbank İMECE için ekstra alanların eklenme örneği
     */
    private function imeceKodEkle(RequestDataPreparedEvent $event): void
    {
        if ($event->getGatewayClass() !== \Mews\Pos\Gateways\EstV3Pos::class || $event->getGatewayClass() !== \Mews\Pos\Gateways\EstPos::class) {
            return;
        }

        if ($event->getPaymentModel() !== PosInterface::MODEL_3D_SECURE) {
            return;
        }

        if ($event->getTxType() === PosInterface::TX_TYPE_PAY_AUTH) {
            $data                    = $event->getRequestData();
            $data['Extra']['IMCKOD'] = '9999'; // IMCKOD bilgisi bankadan alınmaktadır.
            $data['Extra']['FDONEM'] = '5'; // Ödemenin faizsiz ertelenmesini istediğiniz dönem sayısı
            $event->setRequestData($data);
        }
    }

    private function threeDFormVerisiniOlusturmakIcinGonderilenIstekVerisiniDegistirme(RequestDataPreparedEvent $event): void
    {
        if ($event->getPaymentModel() === PosInterface::MODEL_NON_SECURE) {
            return;
        }

        $formVerisiniOlusturmakIcinApiIstegiGonderenGatewayler = [
            \Mews\Pos\Gateways\PosNet::class,
            \Mews\Pos\Gateways\KuveytPos::class,
            \Mews\Pos\Gateways\ToslaPos::class,
            \Mews\Pos\Gateways\VakifKatilimPos::class,
            \Mews\Pos\Gateways\PayFlexV4Pos::class,
            \Mews\Pos\Gateways\PayFlexCPV4Pos::class,
        ];

        if (\in_array($event->getGatewayClass(), $formVerisiniOlusturmakIcinApiIstegiGonderenGatewayler, true)) {
//            // Burda istek banka API'na gonderilmeden once gonderilecek veriyi degistirebilirsiniz.
//            // Ornek:
//            if ($event->getTxType() === PosInterface::TX_TYPE_PAY_AUTH) {
//                $data         = $event->getRequestData();
//                $data['abcd'] = '1234';
//                $event->setRequestData($data);
//            }
        }
    }
}