Laravel Bagisto E-Commerce Plattform Iyzico Integration Construction

Hallo Freunde in diesem Artikel werden wir lernen, wie man Iyzico in LaravelS Open Source Bagisto e Trading Plattform zu integrieren.

Zuerst installieren wir bagisto in unserem Host, und dann installieren wir die folgenden Pakete.

Komponist benötigen bagisto/bagisto-package-generatorcomposer require iyzico/iyzipay-php

Nach der Installation unserer Pakete führen wir unseren Befehl unten aus, und dann erstellt dieser Befehl eine neue Zahlungsmethode für uns.

php handwerker Paket:machen-Zahlung-Methode Webkul-IyzicoZahlung 

Wir haben unsere Zahlungsmethode erstellt und lassen Sie uns nun diese Methode in bagisto einführen.

config/app.phpWebkul-IyzicoPayment-Anbieter-IyzicoPaymentServiceProvider::class,

Nachdem wir dies hinzugefügt haben, fügen wir den folgenden Code zum Feld psr-4 in unserer composer.json-Datei hinzu.

"Webkul-IyzicoPayment": "packages/Webkul/IyzicoPayment/src"

Schließlich führen wir den folgenden Befehl aus und unser Paketidentifizierungsprozess ist abgeschlossen.

Komponist dumpautoload

Lassen Sie uns nun die folgende Struktur in unsere Zahlungsmethode einbauen.

Kommen wirzu unseren Codes, nachdem wir diese Struktur in unserem Paket abgeschlossen haben. Zuerst müssen wir unsere API-Schlüssel erhalten, indem Sie hier klicken, können Sie Ihre API-Schlüssel zum Testen erhalten. Sobald Sie es erhalten haben, füllen Sie die Felder unten aus.

Helpers/IyzicoApi.php
namespace Webkul\IyzicoPayment\Helpers;

class IyzicoApi
{
public static function options() {
$options = new \Iyzipay\Options();
$options->setApiKey("api key");
$options->setSecretKey("secret key");
$options->setBaseUrl("base url");
return $options;
}
}

Fügen Sie unsere Ipn-Datei unten für Ihre Datei in der gleichen Weise, die dies wird uns helfen, unsere Produkte in den Warenkorb zu bekommen.

Helpers/Ipn.php<?php

namespace Webkul\IyzicoPayment\Helpers;

use Webkul\Sales\Repositories\OrderRepository;
use Webkul\Sales\Repositories\InvoiceRepository;

class Ipn
{
/**
* Ipn post data
*
*
@var array
*/
protected $post;

/**
* Order object
*
*
@var \Webkul\Sales\Contracts\Order
*/
protected $order;

/**
* OrderRepository object
*
*
@var \Webkul\Sales\Repositories\OrderRepository
*/
protected $orderRepository;

/**
* InvoiceRepository object
*
*
@var \Webkul\Sales\Repositories\InvoiceRepository
*/
protected $invoiceRepository;

/**
* Create a new helper instance.
*
*
@param \Webkul\Sales\Repositories\OrderRepository $orderRepository
*
@param \Webkul\Sales\Repositories\InvoiceRepository $invoiceRepository
*
@return void
*/
public function __construct(
OrderRepository $orderRepository,
InvoiceRepository $invoiceRepository
)
{
$this->orderRepository = $orderRepository;

$this->invoiceRepository = $invoiceRepository;
}

/**
* This function process the ipn sent from iyzico end
*
*
@param array $post
*
@return null|void|\Exception
*/
public function processIpn($post)
{
$this->post = $post;

if (! $this->postBack()) {
return;
}

try {
if (isset($this->post['txn_type']) && 'recurring_payment' == $this->post['txn_type']) {

} else {
$this->getOrder();

$this->processOrder();
}
} catch (\Exception $e) {
throw $e;
}
}

/**
* Load order via ipn invoice id
*
*
@return void
*/
protected function getOrder()
{
if (empty($this->order)) {
$this->order = $this->orderRepository->findOneByField(['cart_id' => $this->post['invoice']]);
}
}

/**
* Process order and create invoice
*
*
@return void
*/
protected function processOrder()
{
if ($this->post['payment_status'] == 'Completed') {
if ($this->post['mc_gross'] != $this->order->grand_total) {
return;
} else {
$this->orderRepository->update(['status' => 'processing'], $this->order->id);

if ($this->order->canInvoice()) {
$invoice = $this->invoiceRepository->create($this->prepareInvoiceData());
}
}
}
}

/**
* Prepares order's invoice data for creation
*
*
@return array
*/
protected function prepareInvoiceData()
{
$invoiceData = [
"order_id" => $this->order->id,
];

foreach ($this->order->items as $item) {
$invoiceData['invoice']['items'][$item->id] = $item->qty_to_invoice;
}

return $invoiceData;
}
}

Hier legen wir die Route fest, die wir senden werden, wenn die Zahlungsmethode iyzico ausgewählt ist.

Payment/IyzicoPayment.phpnamespace Webkul\IyzicoPayment\Payment;use Webkul\Payment\Payment\Payment;class IyzicoPayment extends Payment
{
/**
* Payment method code
*
*
@var string
*/
protected $code = 'iyzicopayment';
public function getRedirectUrl()
{
return route('iyzico.redirect');
}
}

Im Folgenden stellen wir unsere Routendatei und den Pfad zu unserer Ansichtsdatei vor.

Providers/IyzicoPaymentServiceProvider.phppublic function boot()
{
include __DIR__ . '/../Http/routes.php';
$this->loadViewsFrom(__DIR__ . '/../Resources/views', 'iyzico');
}

Auf die gleiche Weise verwenden wir den Controller, um PaymentController zu steuern.

Http/Controllers/Controller.php
namespace Webkul\IyzicoPayment\Http\Controllers;

use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;

class Controller extends BaseController
{
use DispatchesJobs, ValidatesRequests;
}

Wir führen unsere Routen auf die gleiche Weise zu unserer Datei.

Http/routes.phpRoute::group(['middleware' => ['web']], function () {
Route::get('/iyzico-redirect', 'Webkul\IyzicoPayment\Http\Controllers\[email protected]')->name('iyzico.redirect');
Route::get('/iyzico-success', 'Webkul\IyzicoPayment\Http\Controllers\[email protected]')->name('iyzico.success');
Route::post('/iyzico-callback', 'Webkul\IyzicoPayment\Http\Controllers\[email protected]')->name('iyzico.callback');
});

Hier fügen wir unsere 'iyzico-callback' Rückruf-URL hinzu, um csrf-Fehler in unserem Rückruf von iyzico zu vermeiden

app/Http/Middlware/VerifyCsrfToken.php  $except geschützt = [ 'iyzico-callback', 'PayPal/standard/ipn' ];

Was einen der wichtigsten Orte betrifft, senden wir unsere Produkte im Warenkorb an iyzico, die von unserem Kunden gewählte Adresse, in unserem Bereich, die die Umleitung unten ist.

Nach dem Senden erhalten wir unsere Antwort von iyzico in unserem Rückruffeld und senden sie an die Erfolgs-URL, wenn der Zahlungsvorgang erfolgreich ist. Wenn es fehlschlägt, haben wir es auf unserer Kassenseite zurückgezogen.

Im Erfolgsprozess leeren wir die Produkte in unserem Warenkorb und senden sie an den Zahlungserfolg.

Http/Controller/PaymentController.php<?php

namespace Webkul\IyzicoPayment\Http\Controllers;

use Illuminate\Http\Request;

use Webkul\Checkout\Facades\Cart;
use Webkul\Customer\Models\Customer;
use Webkul\IyzicoPayment\Helpers\IyzicoApi;
use Webkul\Sales\Repositories\OrderRepository;
use Webkul\IyzicoPayment\Helpers\Ipn;
use Webkul\Shop\Http\Controllers\Controller;


class PaymentController extends Controller
{
/**
* OrderRepository object
*
*
@var \Webkul\Sales\Repositories\OrderRepository
*/
protected $orderRepository;

/**
* Ipn object
*
*
@var \Webkul\IyzicoPayment\Helpers\Ipn
*/
protected $ipnHelper;

/**
* Create a new controller instance.
*
*
@param \Webkul\Attribute\Repositories\OrderRepository $orderRepository
*
@param \Webkul\IyzicoPayment\Helpers\Ipn $ipnHelper
*
@return void
*/
public function __construct(
OrderRepository $orderRepository,
Ipn $ipnHelper
)
{
$this->orderRepository = $orderRepository;

$this->ipnHelper = $ipnHelper;
}

public function redirect(Request $request) {
$cart = Cart::getCart();
$address = $cart->billing_address;
$user = Customer::find($cart->customer_id);

$requestIyzico = new \Iyzipay\Request\CreateCheckoutFormInitializeRequest();
$requestIyzico->setLocale(\Iyzipay\Model\Locale::TR);
$requestIyzico->setConversationId(rand());
$requestIyzico->setPrice(number_format($cart['base_sub_total'],'2','.',''));
$requestIyzico->setPaidPrice(number_format($cart['base_grand_total'],'2','.',''));
$requestIyzico->setCurrency(\Iyzipay\Model\Currency::TL);
$requestIyzico->setBasketId("B67832");
$requestIyzico->setPaymentGroup(\Iyzipay\Model\PaymentGroup::PRODUCT);
$requestIyzico->setCallbackUrl(route('iyzico.callback'));
$requestIyzico->setEnabledInstallments(array(2, 3, 6, 9));

$buyer = new \Iyzipay\Model\Buyer();
$buyer->setId($cart->id);
$buyer->setName($cart->customer_first_name);
$buyer->setSurname($cart->customer_last_name);
$buyer->setGsmNumber($address->phone);
$buyer->setEmail($address->email);
$buyer->setIdentityNumber(rand());
$buyer->setLastLoginDate((string) $cart->created_at);
$buyer->setRegistrationDate((string) $user->created_at);
$buyer->setRegistrationAddress($address->address1);
$buyer->setIp($request->ip());
$buyer->setCity($address->state);
$buyer->setCountry($address->country);
$buyer->setZipCode($address->postcode);

$requestIyzico->setBuyer($buyer);
$shippingAddress = new \Iyzipay\Model\Address();
$shippingAddress->setContactName($cart->customer_first_name . ' ' . $cart->customer_last_name);
$shippingAddress->setCity($address->state);
$shippingAddress->setCountry($address->city);
$shippingAddress->setAddress($address->address1);
$shippingAddress->setZipCode($address->postcode);
$requestIyzico->setShippingAddress($shippingAddress);

$billingAddress = new \Iyzipay\Model\Address();
$billingAddress->setContactName($cart->customer_first_name . ' ' . $cart->customer_last_name);
$billingAddress->setCity($address->state);
$billingAddress->setCountry($address->city);
$billingAddress->setAddress($address->address1);
$billingAddress->setZipCode($address->postcode);
$requestIyzico->setBillingAddress($billingAddress);


$basketItems = array();
$products = 0;
foreach ($cart['items'] as $product) {
$BasketItem = new \Iyzipay\Model\BasketItem();
$BasketItem->setId($product->id);
$BasketItem->setName($product->name);
$BasketItem->setCategory1("Teknoloji");
$BasketItem->setCategory2("Bilgisayar");
$BasketItem->setItemType(\Iyzipay\Model\BasketItemType::PHYSICAL);
$BasketItem->setPrice(number_format($product['total'],'2','.',''));
$basketItems[$products] = $BasketItem;
$products++;
}
$requestIyzico->setBasketItems($basketItems);

$checkoutFormInitialize = \Iyzipay\Model\CheckoutFormInitialize::create($requestIyzico, IyzicoApi::options());
$paymentForm = $checkoutFormInitialize->getCheckoutFormContent();

return view('iyzico::iyzico-form',compact('paymentForm'));
}


public function callback(Request $request) {
$requestIyzico = new \Iyzipay\Request\RetrieveCheckoutFormRequest();
$requestIyzico->setLocale(\Iyzipay\Model\Locale::TR);
$requestIyzico->setToken($request->token);
$checkoutForm = \Iyzipay\Model\CheckoutForm::retrieve($requestIyzico, IyzicoApi::options());

if ($checkoutForm->getPaymentStatus() == 'SUCCESS') {
return redirect()->route('iyzico.success');
} else {
return redirect('/checkout/onepage');
}
}

public function success() {
$order = $this->orderRepository->create(Cart::prepareDataForOrder());

Cart::deActivateCart();

session()->flash('order', $order);

return redirect()->route('shop.checkout.success');
}


}

Hier nennen wir das Zahlungsformular von iyzico.

<span id="c79a" data-selectable-paragraph="" class="ef hp hq gj hr b de hs ht s hu page_speed_1033153413"="">Resources/views/iyzico-form.blade.php</span><span id="30f6" data-selectable-paragraph="" class="ef hp hq gj hr b de hv hw hx hy hz ht s hu page_speed_1496586854"=""><!doctype html><br class="page_speed_1764724375"=""><html lang="en"><br class="page_speed_1764724375"=""><head><br class="page_speed_1764724375"=""> <meta charset="UTF-8"><br class="page_speed_1764724375"=""> <meta name="viewport"<br class="page_speed_1764724375"=""> content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"><br class="page_speed_1764724375"=""> <meta http-equiv="X-UA-Compatible" content="ie=edge"><br class="page_speed_1764724375"=""> <title>Document</title><br class="page_speed_1764724375"=""></head><br class="page_speed_1764724375"=""><body><br class="page_speed_1764724375"="">{!! $paymentForm !!}<br class="page_speed_1764724375 responsive"=""><div id="iyzipay-checkout-form" ></div><br class="page_speed_1764724375"=""></body><br class="page_speed_1764724375"=""></html></span>

Wir haben alle Operationen abgeschlossen, ein letzter Schritt links, wir führen nur die folgenden Befehle aus

php handwerker route:cache
Komponist dumpautoload

  Zitat

KARABAY A, 2020 . Laravel Bagisto E-Commerce Plattform Iyzico Integration Construction,

https://www.karabayyazilim.com/blog/php/framework/laravel/laravel-bagisto-e-ticaret-platformu-iyzico-entegrasyonu-yapimi-2020-12-17-112159

(Abgerufen am 17. Dezember 2020).


  Diesen Beitrag teilen

Kommentare (0)

Kommentar

Abonnieren
Melden Sie sich für den E-Mail-Newsletter an, um als Erster über meine Blogbeiträge Bescheid zu wissen