merhaba
iyzico api entegrasyonu kullanmaktayız, ödemeler %30 luk kısmında hata alıyoruz, hata 3d ekranından sonra başlıyor, aslında neden kaynaklandığınıda çözemediğimden burada paylaşmak istedim. Bir kullancı ödeme adımında doğru ilerlesede defelarca 3d ekranınadn hata alarak ödeme sayfasına tekrar atıyor, biz sipariş geçmişini temizleyip tekrar denediğinde ödemeyi gerçekleştiryor, yada bizim tarafımızdan hiç bir müdahale yapmadan da daha sonra denediğinde ödemeyi yapıyor. Ama neden ilk denemede ödeme yapamıyor hata alıyor sebebini bulamamaktayız. Aşağıda iyzico ya yalladığımız kod parçasını paylaşıyorum, kodda eksik birşey mi yapmaktayım yardımcı olursanız çok sevinirm, yeterli kod paylaşmadıysam diğer kod alanlarından da ekleyebilirm.
PaymentBag tablosunu sipariş adımına geçtiğinde sepet olarak kullanmaktayım. sessionda tutmuyorum.
`
public function postPayment($id) {
$product = new ProductBasic();
$product->data['id'] = $id = decrypt($id);
$user = $product->user;
$payment_bag=PaymentBag::where("user_id","=",$user->id)
->where('status',0)
->where('order_create',0)
->orderByDesc("id")->get()->first();
if (!$id||!$payment_bag||$product->request->_token==null) {
return redirect('profil')->withErrors(['Bir hata oluştu, lütfen tekrar deneyiniz.']);
}
$request2=$product->request;
$this->validate($request2, [
'type' => ['required', Rule::in(['credit', 'transfer','cash'])]
], [], ['type' => 'Ödeme Tipi']);
$prices = Page::with('detail','detail.extras','extras')->where('id',778)->get()->first();
$payment_bag->update([
'price'=>$price,
'cargo'=>'ptt',
'cargo_price'=>$cargo_price,
'order_total'=>$order_total,
'cash_type'=>$request2->cash_type,
'cash_price'=> $cash_price,
]);
if ($product->request->type == 'credit') {
$month = $product->request->expiry1;
$year = $product->request->expiry2;
$arr["month"] = trim($month);
$arr["year"] = trim($year);
$arr["ccn"] = str_replace(" ", "", $product->request['card-number']);
$product->request['ccard-3'] . $product->request['ccard-4'];
$request2->merge($arr);
$this->validate($request2, [
'ccn' => 'required|digits:16|ccn',
'name' => 'required|min:3',
'month' => 'required|digits:2|numeric|min:',
'year' => 'required|digits:4|numeric|min:' . date('Y') . '|max:' . (date('Y') + 15),
'cvc' => 'required|digits:3|numeric',
'accept' => 'required',
], [
'accept.required' => 'Ön Bilgilendirme Formunu okuyup kabul ediniz.',
], [
'ccn' => 'Kredi Kartı Numarası',
'name' => 'Kartın Üzerindeki İsim',
'month' => 'Ay',
'year' => 'Yıl',
'cvc' => 'Cvc2',
'accept' => 'Ön Bilgilendirme Formu'
]);
$iyzi_money=$order_total;
$fullname = explode(' ', trim($request2->name));
$ident = count($fullname);
if ($ident <= 1) {
return redirect()->back()->withErrors(['Kart Sahibinin Adı Soyadı bölümünü kontrol ediniz.']);
} else {
$lastName = array_pop($fullname);
if (count($fullname) >= 2) {
$firstName = implode(' ', $fullname);
} else {
$firstName = implode($fullname);
}
}
$random = $payment_bag->order_id;
$randombsk = $random . "bskid";
$randomby = $random . "byid";
$randomid = $random . "idy";
$payment_bag->update([
'payment_type'=>'credit',
'conversation_id'=>$random,
'basket_id'=>$randombsk,
'payment_update'=>Carbon::now()
]);
$address=Address::where("user_id","=",$user->id)->orderByDesc("id")->get()->first();
$options = new \Iyzipay\Options();
$options->setApiKey(config('product.IYZIPAY_API_KEY'));
$options->setSecretKey(config('product.IYZIPAY_SECRET_KEY'));
$options->setBaseUrl(config('product.IYZIPAY_BASE_URL'));
$region=($address->region==0||$address->regoin==null?'Merkez':getCity($address->city)->regions[$address->region]);
$request = new \Iyzipay\Request\CreatePaymentRequest();
$request->setLocale(\Iyzipay\Model\Locale::TR);
$request->setConversationId($random);
$request->setPrice($iyzi_money);
$request->setPaidPrice($iyzi_money);
$request->setCurrency($payment_bag->currency_code);
$request->setInstallment(1);
$request->setBasketId($randombsk);
$request->setPaymentChannel(\Iyzipay\Model\PaymentChannel::WEB);
$request->setPaymentGroup(\Iyzipay\Model\PaymentGroup::PRODUCT);
$request->setCallbackUrl( url('/odeme-yap/adim-4/callback/'.encrypt($id)) );
$paymentCard = new \Iyzipay\Model\PaymentCard();
$paymentCard->setCardHolderName($request2->name);
$paymentCard->setCardNumber($request2->ccn);
$paymentCard->setExpireMonth($request2->month);
$paymentCard->setExpireYear($request2->year);
$paymentCard->setCvc($request2->cvc);
$paymentCard->setRegisterCard(0);
$request->setPaymentCard($paymentCard);
$buyer = new \Iyzipay\Model\Buyer();
$buyer->setId($randomby);
$buyer->setName($firstName);
$buyer->setSurname($lastName);
$buyer->setGsmNumber($user->phone);
$buyer->setEmail($user->email);
$buyer->setIdentityNumber($randomid);
$buyer->setLastLoginDate(date("d-m-Y H:i:s"));
$buyer->setRegistrationDate(date("d-m-Y H:i:s"));
$buyer->setRegistrationAddress(($address->country==1||$address->country==null?$address->address:$address->address.' '.$region));
$buyer->setIp($request2->ip());
$buyer->setCity(($address->country==1 || $address->country==null ? 'Belirtilmedi' : ($address->city != null ? getCity($address->city)->name : "Belirtilmedi") ));
$buyer->setCountry(($address->country==1||$address->country==null?'Türkiye':$country->name));
$buyer->setZipCode("000");
$request->setBuyer($buyer);
$country = DB::table("countries")->where("id",$address->country)->first();
$shippingAddress = new \Iyzipay\Model\Address();
$shippingAddress->setContactName($address->full_name);
$shippingAddress->setCity(($address->country==1 || $address->country==null ? 'Belirtilmedi': ($address->city != null ? getCity($address->city)->name : "Belirtilmedi") ));
$shippingAddress->setCountry(($address->country==1||$address->country==null?'Türkiye':$country->name));
$shippingAddress->setAddress($address->address);
$shippingAddress->setZipCode("000");
$request->setShippingAddress($shippingAddress);
$billingAddress = new \Iyzipay\Model\Address();
$billingAddress->setContactName($address->full_name);
$billingAddress->setCity(($address->country==1||$address->country==null?'Belirtilmedi': ($address->city != null ? getCity($address->city)->name : "Belirtilmedi") ));
$billingAddress->setCountry(($address->country==1||$address->country==null?'Türkiye':$country->name));
$billingAddress->setAddress(($address->country==1||$address->country==null?$address->address:$address->address.' '.$region));
$billingAddress->setZipCode("000");
$request->setBillingAddress($billingAddress);
$basketItems = array();
$firstBasketItem = new \Iyzipay\Model\BasketItem();
$firstBasketItem->setId(rand(123456,987654));
$firstBasketItem->setCategory2("---");
$firstBasketItem->setItemType(\Iyzipay\Model\BasketItemType::VIRTUAL);
$firstBasketItem->setPrice($iyzi_money);
$basketItems[] = $firstBasketItem;
$request->setBasketItems($basketItems);
$threedsInitialize = \Iyzipay\Model\ThreedsInitialize::create($request, $options);
if($threedsInitialize->getStatus()=='failure'){
return redirect()->back()->withErrors([ $threedsInitialize->getErrorMessage() ]);
}else{
echo $threedsInitialize->getHtmlContent(); exit;
}
}
return $this->makePayment($product);
}`