OrderPayment E-Ticaret Platformu

Tamamlanma Tarihi: Haziran 2023

Kullanılan Teknolojiler

.NET C# ASP.NET MVC Entity Framework Iyzipay Twilio HTML CSS JavaScript Bootstrap

Proje Açıklaması

OrderPayment, modern ve güvenli bir e-ticaret deneyimi sunan kapsamlı bir web uygulamasıdır. ASP.NET MVC mimarisi kullanılarak geliştirilen bu platform, kullanıcıların ürünleri kolayca bulmasını, sepete eklemesini ve güvenli ödeme yapmasını sağlar.

Projenin en önemli özellikleri arasında Iyzipay entegrasyonu sayesinde güvenli ve hızlı ödeme işlemleri ve Twilio SMS servisi ile sipariş durumu bildirimleri yer almaktadır. Bu entegrasyonlar sayesinde kullanıcılar, ödeme işlemlerini güvenle tamamlayabilir ve siparişlerinin durumu hakkında anında bildirim alabilirler.

MVC (Model-View-Controller) mimarisi ve Entity Framework kullanılarak geliştirilen bu proje, sürdürülebilir ve genişletilebilir bir kod yapısına sahiptir. Veritabanı işlemleri için Code First yaklaşımı kullanılmış olup, ürün katalogları, kullanıcı verileri ve sipariş bilgileri güvenli bir şekilde yönetilmektedir.

Özellikler

  • ASP.NET MVC mimarisi ile geliştirilmiş modüler yapı
  • Iyzipay entegrasyonu ile güvenli ödeme işlemleri
  • Twilio SMS entegrasyonu ile sipariş durumu bildirimleri
  • Kullanıcı kimlik doğrulama ve yetkilendirme sistemi
  • Gelişmiş ürün arama ve filtreleme özellikleri
  • Sepet yönetimi ve sipariş takibi
  • Responsive tasarım ile tüm cihazlarda uyumluluk
  • Admin paneli ile ürün ve sipariş yönetimi

Zorluklar ve Çözümler

Ödeme Sisteminin Entegrasyonu

Iyzipay ödeme sistemiyle güvenli bir entegrasyon sağlamak bir zorluktu. Bu sorunu çözmek için Iyzipay'in sağladığı SDK'yı kullanarak özel bir ödeme servisi geliştirdim. Bu servis sayesinde, ödeme işlemleri güvenli bir şekilde gerçekleştirilip veritabanına kaydediliyor.

SMS Bildirim Sistemi

Sipariş durumlarını gerçek zamanlı olarak bildirmek için Twilio SMS API'sinin entegrasyonu gerekiyordu. Bu zorluğu, ASP.NET'in asenkron programlama yeteneklerini kullanarak ve siparişlerdeki durum değişikliklerini izleyen bir servis geliştirerek çözdüm.

Kod Örnekleri

Iyzipay Ödeme İşlemi


// Iyzipay ödeme işlemi örneği
public IActionResult ProcessPayment(PaymentViewModel model)
{
    try
    {
        // Iyzipay yapılandırması
        Options options = new Options
        {
            ApiKey = _configuration["Iyzipay:ApiKey"],
            SecretKey = _configuration["Iyzipay:SecretKey"],
            BaseUrl = _configuration["Iyzipay:BaseUrl"]
        };

        // Ödeme isteği oluşturma
        CreatePaymentRequest request = new CreatePaymentRequest
        {
            Locale = Locale.TR.ToString(),
            ConversationId = Guid.NewGuid().ToString(),
            Price = model.TotalAmount.ToString(CultureInfo.InvariantCulture),
            PaidPrice = model.TotalAmount.ToString(CultureInfo.InvariantCulture),
            Currency = Currency.TRY.ToString(),
            Installment = 1,
            BasketId = model.OrderId.ToString(),
            PaymentChannel = PaymentChannel.WEB.ToString(),
            PaymentGroup = PaymentGroup.PRODUCT.ToString(),
            PaymentCard = MapPaymentCard(model.CardDetails),
            Buyer = MapBuyer(model.UserDetails),
            ShippingAddress = MapAddress(model.ShippingAddress),
            BillingAddress = MapAddress(model.BillingAddress),
            BasketItems = MapBasketItems(model.OrderItems)
        };

        // Ödeme işlemini gerçekleştirme
        Payment payment = Payment.Create(request, options);

        // Ödeme sonucunu kontrol etme
        if (payment.Status == "success")
        {
            // Sipariş kaydetme ve SMS gönderme
            var orderId = _orderService.CompleteOrder(model.OrderId);
            SendOrderConfirmationSms(model.UserDetails.Phone, orderId);
            
            return RedirectToAction("PaymentSuccess", new { orderId });
        }
        else
        {
            return RedirectToAction("PaymentError", new { errorMessage = payment.ErrorMessage });
        }
    }
    catch (Exception ex)
    {
        _logger.LogError(ex, "Ödeme işlemi sırasında hata oluştu");
        return RedirectToAction("PaymentError", new { errorMessage = "Beklenmeyen bir hata oluştu." });
    }
}
                            

Twilio SMS Gönderimi


// Twilio ile SMS gönderme servisi
public class SmsService : ISmsService
{
    private readonly string _accountSid;
    private readonly string _authToken;
    private readonly string _fromNumber;
    private readonly ILogger _logger;

    public SmsService(IConfiguration configuration, ILogger logger)
    {
        _accountSid = configuration["Twilio:AccountSid"];
        _authToken = configuration["Twilio:AuthToken"];
        _fromNumber = configuration["Twilio:PhoneNumber"];
        _logger = logger;
    }

    public async Task SendOrderStatusSms(string toPhoneNumber, string orderNumber, string status)
    {
        try
        {
            TwilioClient.Init(_accountSid, _authToken);

            var message = await MessageResource.CreateAsync(
                body: $"Sayın müşterimiz, {orderNumber} numaralı siparişinizin durumu '{status}' olarak güncellenmiştir. Teşekkür ederiz.",
                from: new Twilio.Types.PhoneNumber(_fromNumber),
                to: new Twilio.Types.PhoneNumber(toPhoneNumber)
            );

            _logger.LogInformation($"SMS gönderildi. SID: {message.Sid}");
            return true;
        }
        catch (Exception ex)
        {
            _logger.LogError(ex, "SMS gönderimi sırasında hata oluştu");
            return false;
        }
    }
}
                            

Proje Dosyaları

Mevcut Dosyalar

  • Henüz dosya yüklenmemiş

Dosya Yükle

Dosyalarınızı buraya sürükleyin veya seçin