iyzico WooCommerce eklentisinde ödeme sürecinde bir fiyat yuvarlama sorunu tespit ettik. Bu durum, API’den aldığımız 5062 hata koduna neden olarak sürecin kesilmesine yol açıyor. Ödeme sürecinde basketItems[0].price, price, ve paidPrice alanlarının eşitlenmediği durumlarda hata oluşmaktadır.
Fiyat alanlarının aynı ondalık hassasiyete yuvarlanması çözüm sağlayabilir. Kodlar incelendiğinde, $order->get_total() iki ondalık basamağa yuvarlanıyor. Ancak bu işlem, sepette tek ürün olduğunda ve sepetteki çoklu ürünlerin toplam fiyatında tutarsızlıklara yol açıyor gibi görünüyor. Bu doğrultuda basketItems[0].price değeri de paidPrice ve price alanlarına uyumlu olacak şekilde yuvarlanmalı.
Örnek Log Çıktısı ve İlgili Kod Satırları
İlgili hata loglarına ve ilgili kod satırına aşağıdan ulaşabilirsiniz:
Not: Kişisel bilgilerimi Payload içerisinden kaldırdım.
API Response:
{
status: 'failure',
errorCode: '5062',
errorMessage: 'Gönderilen tutar tüm kırılımların toplam tutarına eşit olmalıdır',
locale: 'tr',
systemTime: 1730124479427,
conversationId: '5010'
}
WooCommerce Tarafında Oluşan Hata Mesajı:
Uncaught TypeError: Iyzico\IyzipayWoocommerce\Pwi\Pwi::redirect_to_iyzico(): Argument #1 ($paymentPageUrl) must be of type string, null given, called in /home/cyclechain.io/sarigelin/wp-content/plugins/iyzico-woocommerce/includes/Pwi/Pwi.php on line 86 and defined in /home/cyclechain.io/sarigelin/wp-content/plugins/iyzico-woocommerce/includes/Pwi/Pwi.php:151
Ek bağlam
{
"error": {
"type": 1,
"file": "/home/cyclechain.io/sarigelin/wp-content/plugins/iyzico-woocommerce/includes/Pwi/Pwi.php",
"line": 151
},
"backtrace": [
"",
"#0 /home/cyclechain.io/sarigelin/wp-content/plugins/iyzico-woocommerce/includes/Pwi/Pwi.php(86): Iyzico\IyzipayWoocommerce\Pwi\Pwi->redirect_to_iyzico()",
"#1 /home/cyclechain.io/sarigelin/wp-content/plugins/woocommerce/includes/class-wc-checkout.php(1062): Iyzico\IyzipayWoocommerce\Pwi\Pwi->process_payment()",
"#2 /home/cyclechain.io/sarigelin/wp-content/plugins/woocommerce/includes/class-wc-checkout.php(1293): WC_Checkout->process_order_payment()",
"#3 /home/cyclechain.io/sarigelin/wp-content/plugins/woocommerce/includes/class-wc-ajax.php(520): WC_Checkout->process_checkout()",
"#4 /home/cyclechain.io/sarigelin/wp-includes/class-wp-hook.php(324): WC_AJAX::checkout()",
"#5 /home/cyclechain.io/sarigelin/wp-includes/class-wp-hook.php(348): WP_Hook->apply_filters()",
"#6 /home/cyclechain.io/sarigelin/wp-includes/plugin.php(517): WP_Hook->do_action()",
"#7 /home/cyclechain.io/sarigelin/wp-content/plugins/woocommerce/includes/class-wc-ajax.php(96): do_action()",
"#8 /home/cyclechain.io/sarigelin/wp-includes/class-wp-hook.php(324): WC_AJAX::do_wc_ajax()",
"#9 /home/cyclechain.io/sarigelin/wp-includes/class-wp-hook.php(348): WP_Hook->apply_filters()",
"#10 /home/cyclechain.io/sarigelin/wp-includes/plugin.php(517): WP_Hook->do_action()",
"#11 /home/cyclechain.io/sarigelin/wp-includes/template-loader.php(13): do_action()",
"#12 /home/cyclechain.io/sarigelin/wp-blog-header.php(19): require_once('...')",
"#13 /home/cyclechain.io/sarigelin/index.php(17): require('...')",
"#14 {main}",
"thrown"
]
}
Çözüm Önerisi:
Eğer price ve paidPrice gibi alanların tümü aynı ondalık hassasiyete yuvarlanırsa ve sepette birden fazla ürün olduğunda fiyat eşleşmeleri kontrol edilirse bu hatanın önüne geçilebilir. basketItems[0].price değeri de price ve paidPrice ile aynı formatta yuvarlanarak gönderildiğinde istek başarılı olmaktadır.
Sepetteki birden fazla üründe de aynı davranış olabilir, emin olamadım. Request kısmını test edemedim ama aynı payload değerinde fiyatlar aynı olduğunda bile WooCommerce tarafında ödeme işlemi gerçekleşmiyor. Authorization key ile ilgili bir problem olabilir.
Merhaba,
iyzico WooCommerce eklentisinde ödeme sürecinde bir fiyat yuvarlama sorunu tespit ettik. Bu durum, API’den aldığımız
5062
hata koduna neden olarak sürecin kesilmesine yol açıyor. Ödeme sürecindebasketItems[0].price
,price
, vepaidPrice
alanlarının eşitlenmediği durumlarda hata oluşmaktadır.Fiyat alanlarının aynı ondalık hassasiyete yuvarlanması çözüm sağlayabilir. Kodlar incelendiğinde,
$order->get_total()
iki ondalık basamağa yuvarlanıyor. Ancak bu işlem, sepette tek ürün olduğunda ve sepetteki çoklu ürünlerin toplam fiyatında tutarsızlıklara yol açıyor gibi görünüyor. Bu doğrultudabasketItems[0].price
değeri depaidPrice
veprice
alanlarına uyumlu olacak şekilde yuvarlanmalı.Örnek Log Çıktısı ve İlgili Kod Satırları
İlgili hata loglarına ve ilgili kod satırına aşağıdan ulaşabilirsiniz:
Tek Ürünlü Sepet İle Ödeme İşlemi Deneme Sonrası Log:
Not: Kişisel bilgilerimi Payload içerisinden kaldırdım.
API Response:
WooCommerce Tarafında Oluşan Hata Mesajı:
Çözüm Önerisi:
Eğer
price
vepaidPrice
gibi alanların tümü aynı ondalık hassasiyete yuvarlanırsa ve sepette birden fazla ürün olduğunda fiyat eşleşmeleri kontrol edilirse bu hatanın önüne geçilebilir.basketItems[0].price
değeri deprice
vepaidPrice
ile aynı formatta yuvarlanarak gönderildiğinde istek başarılı olmaktadır.Dip Not
Sepetteki birden fazla üründe de aynı davranış olabilir, emin olamadım. Request kısmını test edemedim ama aynı payload değerinde fiyatlar aynı olduğunda bile WooCommerce tarafında ödeme işlemi gerçekleşmiyor. Authorization key ile ilgili bir problem olabilir.
Örnek Request Kodu
Guzzle