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

Kuveyttürk Kısmi Iade : Satış tutarı ile iade tutarı eşleşmemektedir. #204

Closed
mettleshade opened this issue May 5, 2024 · 13 comments · Fixed by #217
Closed

Kuveyttürk Kısmi Iade : Satış tutarı ile iade tutarı eşleşmemektedir. #204

mettleshade opened this issue May 5, 2024 · 13 comments · Fixed by #217
Labels

Comments

@mettleshade
Copy link

mettleshade commented May 5, 2024

Kuveyttürk ile 76 tllik bir ödeme yaptım canlıdan, aynı günde iade olmadığı için bir gün bekledim bugün tekrar denedim 30 tl iade etmeyi fakat

`
Array
(
[order_id] =>
[auth_code] =>
[proc_return_code] => DbLayerError
[transaction_id] =>
[currency] =>
[error_message] => Satış tutarı ile iade tutarı eşleşmemektedir. Değerleri kontrol ediniz.
[ref_ret_num] =>
[status] => declined
[error_code] => TransactionAmountMismatchException
[status_detail] =>
[all] => Array
(
[DrawBackResult] => Array
(
[Results] => Array
(
[Result] => Array
(
[ErrorMessage] => Satış tutarı ile iade tutarı eşleşmemektedir. Değerleri kontrol ediniz.
[ErrorCode] => TransactionAmountMismatchException
[IsFriendly] =>
[Severity] => BusinessError
)

                    )

                [Success] => 
                [Value] => Array
                    (
                        [IsEnrolled] => 
                        [IsVirtual] => 
                        [ResponseCode] => DbLayerError
                        [OrderId] => 0
                        [TransactionTime] => 0001-01-01T00:00:00
                        [MerchantId] => 
                        [BusinessKey] => 0
                    )

            )

    )

)
`

sonucunu aldım, readme'de belirtmişsiniz DrawBackResult yerine PartialDrawbackResult kullanıyor diye fakat yukardaki yanıtta DrawBackResult olarak geçiyor

@nuryagdym
Copy link
Collaborator

Orda yaptigim degisiklikten dolayi.
Eskinde iade icin PartialDrawback kullaniyorduk, Drawback kullanacak sekilde degistirdim.
Drawback tam iade icin, PartialDrawback ise bir kismini iade etmek icin.
Bu tarz durum 2-3 gatewayden karsilastim, ilerde bunun icin ayri TX_TYPE olusturmayi dusunuyorum. Diger gatewaylerde genelde kismi iade ile tam iade arasinda ayrim yok.

Kutuphaneye Partial refund destegi ekleninceye kadar, kismi iade yapilmak istendiginde docs/ altindaki orneklerde oldugu gibi eventListener kullanarak Drawback degeri PartialDrawbacke degistirerek cozebilirsin.

@mettleshade
Copy link
Author

mettleshade commented May 6, 2024

Orda yaptigim degisiklikten dolayi. Eskinde iade icin PartialDrawback kullaniyorduk, Drawback kullanacak sekilde degistirdim. Drawback tam iade icin, PartialDrawback ise bir kismini iade etmek icin. Bu tarz durum 2-3 gatewayden karsilastim, ilerde bunun icin ayri TX_TYPE olusturmayi dusunuyorum. Diger gatewaylerde genelde kismi iade ile tam iade arasinda ayrim yok.

Kutuphaneye Partial refund destegi ekleninceye kadar, kismi iade yapilmak istendiginde docs/ altindaki orneklerde oldugu gibi eventListener kullanarak Drawback degeri PartialDrawbacke degistirerek cozebilirsin.

$order['transaction_type'] = 'PartialDrawback';
$pos->refund($order);

şeklinde yapınca iade olarak algılıyor ama
KuveytPosRequestDataMapper'in içindeki
'TransactionType' => $order['transaction_type'] ?? $this->mapTxType(PosInterface::TX_TYPE_REFUND), şekilnde düzenledim

protected array $txTypeMappings = [
    PosInterface::TX_TYPE_PAY_AUTH => 'Sale',
    PosInterface::TX_TYPE_CANCEL   => 'SaleReversal',
    PosInterface::TX_TYPE_STATUS   => 'GetMerchantOrderDetail',
    PosInterface::TX_TYPE_REFUND   => 'Drawback', // Also there is a "PartialDrawback"
];
refund kısmını PartialDrawback yapınca kısmı iade olarka algılıyor 
createRefundRequestData fonksiyonundaki resultu iki farklı şekildede kayıt ettim hiçbir fark yok 

@nuryagdym
Copy link
Collaborator

kutuphane kodunu degistirmemeni tavsiye ederim, kutuphaneyi guncellediginde bu yaptiginde degisiklikler silinir.
event listener ile kutuphane kodunu degistirmeden TransactionType'i degistirebilirsin.
Bu ornek calismasi lazim:

/** @var \Symfony\Component\EventDispatcher\EventDispatcher $eventDispatcher */
$eventDispatcher->addListener(
    \Mews\Pos\Event\RequestDataPreparedEvent::class,
    function (\Mews\Pos\Event\RequestDataPreparedEvent $event) {
       //istersen burda original tutar ile refund edilmek istenen tutarlari karsilastiririp ona gore bu alttaki kodlari calistirabilirsin:
        $requestData                                   = $event->getRequestData();
        $requestData['VPosMessage']['TransactionType'] = 'PartialDrawback';
        $event->setRequestData($requestData);
    });
   $pos->refund($order);

$eventDispatcher $pos istance'i olusturmakta kullandiginin aynisi.

@mettleshade
Copy link
Author

Attığınız kodu ekledim
AbstractGateway.php 315'inci satıra
file_put_contents('a2.txt',json_encode($data));
kodunu ekledim bankaya giden datayı görmek için kod doğru şekilde gidiyor fakat halen iade olarak dönüş yapıyor banka.
KuveytPosRequestDataMapper.php dosyasında direk değiştirdiğim zaman kısmi iade oluyor nerde neyi atlıyorum çözemedim :)

@mettleshade
Copy link
Author

@nuryagdym sorunu buldum, KuveytPos.php dosyasında sendSoapRequest kullanılarak atılıyor bu istek
265. satırda
$result = $client->__soapCall($this->requestDataMapper->mapTxType($txType), ['parameters' => ['request' => $contents]]);
kodundaki $this->requestDataMapper->mapTxType($txType) 'Drawback' olarak geçiyor, $contents'te PartialDrawback olsada banka Drawback olarak görüyor

@nuryagdym
Copy link
Collaborator

anladim, unuttum burasini, o zaman KuveytPosRequestDataMapper'de Drawback'i PartialDrawback'e degistirmen gerekecek.

Bu issue acik kalsin, partial refund uzerinde musait oldugumda calisirim

@mettleshade
Copy link
Author

Kütüphane kodlarına müdahele etmeden yapmaya çalıştım ama başarılı bir sonuça alamadım, siz burayla ilgili güncelleme çıkana kadar kütüphaneyi güncellemeden kod değişikliği yapıp devam edeceğim. Güncelleme çıkınca güncelleyip deneriz

@nuryagdym
Copy link
Collaborator

@mettleshade PartialDrawback ile tam iadeyi yapabiliyor muyuz?
kontrol eder misin

@mettleshade
Copy link
Author

@nuryagdym olmuyor daha öncedende denemiştim ama şimdi tekrar denedim
Screenshot_10

@nuryagdym
Copy link
Collaborator

@mettleshade bendeki test ortam bilgileri calismamaya basladi.
Aklima bir cozum geldi ama test ortam bilgileri calismadigi icin test edemiyorum.
Bu yuzden sana anlatayim sen dener misin.
Yapman gereken degisiklikler:

  1. $result = $client->__soapCall($this->requestDataMapper->mapTxType($txType), ['parameters' => ['request' => $contents]]);
    bu satir su sekilde degisecek: $result = $client->__soapCall($contents['VPosMessage']['TransactionType'], ['parameters' => ['request' => $contents]]);
  2. refund kod su sekilde olacak
    /** @var \Symfony\Component\EventDispatcher\EventDispatcher $eventDispatcher */
    $eventDispatcher->addListener(
      \Mews\Pos\Event\RequestDataPreparedEvent::class,
      function (\Mews\Pos\Event\RequestDataPreparedEvent $event) {
         //istersen burda original tutar ile refund edilmek istenen tutarlari karsilastiririp ona gore bu alttaki kodlari calistirabilirsin:
          $requestData                                   = $event->getRequestData();
          $requestData['VPosMessage']['TransactionType'] = 'PartialDrawback';
          $event->setRequestData($requestData);
      });
     $pos->refund($order);

Eger yukardaki degisiklikler calisirsa, ayrica ustteki degisikliklere ek olarak bu satiri da silip dener misin

@mettleshade
Copy link
Author

@nuryagdym En kısa zamanda deneyip dönüş yapıyorum.

@mettleshade
Copy link
Author

@nuryagdym ilk 2 adımı yaptım başarılı, 3. adımı TransactionType sildim yine bir sıkıntı yok güncellemeye eklenebilir.

@nuryagdym nuryagdym linked a pull request May 24, 2024 that will close this issue
nuryagdym added a commit that referenced this issue May 24, 2024
…d-support

issue #204 kuveytturk partial refund support
@nuryagdym
Copy link
Collaborator

v1.3.0 kismi iade destegi ekledim.
event listenere gerek yok.
refund order verisine ekstra olarak order_amount degeri eklenmesi gerekiyor.
yani

  • amount degeri eskisi gibi iade edilecek tutar olacak.
  • order_amount ise siparisin tutari olacak.
  • Kutupahen ikisi arasinda karsilastirma yaparak tam iade mi, kismi iade mi olduguna karar verecek.

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

Successfully merging a pull request may close this issue.

2 participants