Closed mettleshade closed 4 months ago
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.
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
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.
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 :)
@nuryagdym sorunu buldum, KuveytPos.php dosyasında sendSoapRequest kullanılarak atılıyor bu istek
$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üyoranladim, unuttum burasini, o zaman KuveytPosRequestDataMapper'de Drawback'i PartialDrawback'e degistirmen gerekecek.
Bu issue acik kalsin, partial refund uzerinde musait oldugumda calisirim
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
@mettleshade PartialDrawback ile tam iadeyi yapabiliyor muyuz? kontrol eder misin
@nuryagdym olmuyor daha öncedende denemiştim ama şimdi tekrar denedim
@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:
$result = $client->__soapCall($contents['VPosMessage']['TransactionType'], ['parameters' => ['request' => $contents]]);
/** @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
@nuryagdym En kısa zamanda deneyip dönüş yapıyorum.
@nuryagdym ilk 2 adımı yaptım başarılı, 3. adımı TransactionType sildim yine bir sıkıntı yok güncellemeye eklenebilir.
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.
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 )
) `
sonucunu aldım, readme'de belirtmişsiniz DrawBackResult yerine PartialDrawbackResult kullanıyor diye fakat yukardaki yanıtta DrawBackResult olarak geçiyor