[GH-ISSUE #204] Kuveyttürk Kısmi Iade : Satış tutarı ile iade tutarı eşleşmemektedir. #110

Closed
opened 2026-03-03 15:43:08 +03:00 by kerem · 13 comments
Owner

Originally created by @mhmtpacal on GitHub (May 5, 2024).
Original GitHub issue: https://github.com/mewebstudio/pos/issues/204

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

Originally created by @mhmtpacal on GitHub (May 5, 2024). Original GitHub issue: https://github.com/mewebstudio/pos/issues/204 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
kerem 2026-03-03 15:43:08 +03:00
  • closed this issue
  • added the
    kuveyt
    label
Author
Owner

@nuryagdym commented on GitHub (May 5, 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.

<!-- gh-comment-id:2094921855 --> @nuryagdym commented on GitHub (May 5, 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.
Author
Owner

@mhmtpacal commented on GitHub (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 
<!-- gh-comment-id:2095684205 --> @mhmtpacal commented on GitHub (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
Author
Owner

@nuryagdym commented on GitHub (May 7, 2024):

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.

<!-- gh-comment-id:2099014871 --> @nuryagdym commented on GitHub (May 7, 2024): kutuphane kodunu degistirmemeni tavsiye ederim, kutuphaneyi guncellediginde bu yaptiginde degisiklikler silinir. event listener ile kutuphane kodunu degistirmeden TransactionType'i degistirebilirsin. Bu ornek calismasi lazim: ```php /** @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.
Author
Owner

@mhmtpacal commented on GitHub (May 8, 2024):

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 :)

<!-- gh-comment-id:2099859966 --> @mhmtpacal commented on GitHub (May 8, 2024): 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 :)
Author
Owner

@mhmtpacal commented on GitHub (May 8, 2024):

@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

<!-- gh-comment-id:2099880739 --> @mhmtpacal commented on GitHub (May 8, 2024): @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
Author
Owner

@nuryagdym commented on GitHub (May 8, 2024):

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

Bu issue acik kalsin, partial refund uzerinde musait oldugumda calisirim

<!-- gh-comment-id:2101216771 --> @nuryagdym commented on GitHub (May 8, 2024): anladim, unuttum burasini, o zaman KuveytPosRequestDataMapper'de Drawback'i PartialDrawback'e degistirmen gerekecek. Bu issue acik kalsin, partial refund uzerinde musait oldugumda calisirim
Author
Owner

@mhmtpacal commented on GitHub (May 9, 2024):

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

<!-- gh-comment-id:2102201679 --> @mhmtpacal commented on GitHub (May 9, 2024): 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
Author
Owner

@nuryagdym commented on GitHub (May 9, 2024):

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

<!-- gh-comment-id:2102301236 --> @nuryagdym commented on GitHub (May 9, 2024): @mettleshade **PartialDrawback** ile tam iadeyi yapabiliyor muyuz? kontrol eder misin
Author
Owner

@mhmtpacal commented on GitHub (May 9, 2024):

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

<!-- gh-comment-id:2102797676 --> @mhmtpacal commented on GitHub (May 9, 2024): @nuryagdym olmuyor daha öncedende denemiştim ama şimdi tekrar denedim ![Screenshot_10](https://github.com/mewebstudio/pos/assets/51230161/f9188193-6cf4-4c23-b196-65163f13d8d4)
Author
Owner

@nuryagdym commented on GitHub (May 15, 2024):

@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. github.com/mewebstudio/pos@e1733994ff/src/Gateways/KuveytPos.php (L263) 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 github.com/mewebstudio/pos@e1733994ff/src/DataMapper/RequestDataMapper/KuveytPosRequestDataMapper.php (L328)

<!-- gh-comment-id:2111898865 --> @nuryagdym commented on GitHub (May 15, 2024): @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. https://github.com/mewebstudio/pos/blob/e1733994ff052d7eeac0f2808bfabaacf22fe0c7/src/Gateways/KuveytPos.php#L263 bu satir su sekilde degisecek: `$result = $client->__soapCall($contents['VPosMessage']['TransactionType'], ['parameters' => ['request' => $contents]]);` 2. refund kod su sekilde olacak ```php /** @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 https://github.com/mewebstudio/pos/blob/e1733994ff052d7eeac0f2808bfabaacf22fe0c7/src/DataMapper/RequestDataMapper/KuveytPosRequestDataMapper.php#L328
Author
Owner

@mhmtpacal commented on GitHub (May 16, 2024):

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

<!-- gh-comment-id:2114140658 --> @mhmtpacal commented on GitHub (May 16, 2024): @nuryagdym En kısa zamanda deneyip dönüş yapıyorum.
Author
Owner

@mhmtpacal commented on GitHub (May 19, 2024):

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

<!-- gh-comment-id:2119320316 --> @mhmtpacal commented on GitHub (May 19, 2024): @nuryagdym ilk 2 adımı yaptım başarılı, 3. adımı TransactionType sildim yine bir sıkıntı yok güncellemeye eklenebilir.
Author
Owner

@nuryagdym commented on GitHub (May 24, 2024):

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.
<!-- gh-comment-id:2129125287 --> @nuryagdym commented on GitHub (May 24, 2024): 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 in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/pos#110
No description provided.