<%@ Page Language="C#" AutoEventWireup="true" CodeFile="iframe_ornek.aspx.cs" Inherits="iframe_ornek" %> PAYTR Ödeme .NET Örnek Sayfa using Newtonsoft.Json.Linq; // Bu satırda hata alırsanız, site dosyalarınızın olduğu bölümde bin isimli bir klasör oluşturup içerisine Newtonsoft.Json.dll adlı DLL dosyasını kopyalayın. using System; using System.Collections.Generic; using System.Collections.Specialized; using System.Linq; using System.Net; using System.Security.Cryptography; using System.Text; using System.Web; using System.Web.Script.Serialization; using System.Web.UI; using System.Web.UI.WebControls; public partial class iframe_ornek : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { // ####################### DÜZENLEMESİ ZORUNLU ALANLAR ####################### // // API Entegrasyon Bilgileri - Mağaza paneline giriş yaparak BİLGİ sayfasından alabilirsiniz. string merchant_id = "XXXXXX"; string merchant_key = "YYYYYYYYYYYYYY"; string merchant_salt = "ZZZZZZZZZZZZZZ"; // // Müşterinizin sitenizde kayıtlı veya form vasıtasıyla aldığınız eposta adresi string emailstr = "XXXXXXXX"; // // Tahsil edilecek tutar. 9.99 için 9.99 * 100 = 999 gönderilmelidir. int payment_amountstr = 999; // // Sipariş numarası: Her işlemde benzersiz olmalıdır!! Bu bilgi bildirim sayfanıza yapılacak bildirimde geri gönderilir. string merchant_oid = ""; // // Müşterinizin sitenizde kayıtlı veya form aracılığıyla aldığınız ad ve soyad bilgisi string user_namestr = ""; // // Müşterinizin sitenizde kayıtlı veya form aracılığıyla aldığınız adres bilgisi string user_addressstr = ""; // // Müşterinizin sitenizde kayıtlı veya form aracılığıyla aldığınız telefon bilgisi string user_phonestr = ""; // // Başarılı ödeme sonrası müşterinizin yönlendirileceği sayfa // !!! Bu sayfa siparişi onaylayacağınız sayfa değildir! Yalnızca müşterinizi bilgilendireceğiniz sayfadır! // !!! Siparişi onaylayacağız sayfa "Bildirim URL" sayfasıdır (Bakınız: 2.ADIM Klasörü). string merchant_ok_url = "http://www.siteniz.com/odeme_basarili.php"; // // Ödeme sürecinde beklenmedik bir hata oluşması durumunda müşterinizin yönlendirileceği sayfa // !!! Bu sayfa siparişi iptal edeceğiniz sayfa değildir! Yalnızca müşterinizi bilgilendireceğiniz sayfadır! // !!! Siparişi iptal edeceğiniz sayfa "Bildirim URL" sayfasıdır (Bakınız: 2.ADIM Klasörü). string merchant_fail_url = "http://www.siteniz.com/odeme_hata.php"; // // !!! Eğer bu örnek kodu sunucuda değil local makinanızda çalıştırıyorsanız // buraya dış ip adresinizi (https://www.whatismyip.com/) yazmalısınız. Aksi halde geçersiz paytr_token hatası alırsınız. string user_ip = Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; if (user_ip == "" || user_ip == null){ user_ip = Request.ServerVariables["REMOTE_ADDR"]; } // // ÖRNEK $user_basket oluşturma - Ürün adedine göre object'leri çoğaltabilirsiniz object[][] user_basket = { new object[] {"Örnek ürün 1", "18.00", 1}, // 1. ürün (Ürün Ad - Birim Fiyat - Adet) new object[] {"Örnek ürün 2", "33.25", 2}, // 2. ürün (Ürün Ad - Birim Fiyat - Adet) new object[] {"Örnek ürün 3", "45.42", 1}, // 3. ürün (Ürün Ad - Birim Fiyat - Adet) }; /* ############################################################################################ */ // İşlem zaman aşımı süresi - dakika cinsinden string timeout_limit = "30"; // // Hata mesajlarının ekrana basılması için entegrasyon ve test sürecinde 1 olarak bırakın. Daha sonra 0 yapabilirsiniz. string debug_on = "1"; // // Mağaza canlı modda iken test işlem yapmak için 1 olarak gönderilebilir. string test_mode = "0"; // // Taksit yapılmasını istemiyorsanız, sadece tek çekim sunacaksanız 1 yapın string no_installment = "0"; // // Sayfada görüntülenecek taksit adedini sınırlamak istiyorsanız uygun şekilde değiştirin. // Sıfır (0) gönderilmesi durumunda yürürlükteki en fazla izin verilen taksit geçerli olur. string max_installment = "0"; // // Para birimi olarak TL, EUR, USD gönderilebilir. USD ve EUR kullanmak için kurumsal@paytr.com // üzerinden bilgi almanız gerekmektedir. Boş gönderilirse TL geçerli olur. string currency = "TL"; // // Türkçe için tr veya İngilizce için en gönderilebilir. Boş gönderilirse tr geçerli olur. string lang = ""; // Gönderilecek veriler oluşturuluyor NameValueCollection data = new NameValueCollection(); data["merchant_id"] = merchant_id; data["user_ip"] = user_ip; data["merchant_oid"] = merchant_oid; data["email"] = emailstr; data["payment_amount"] = payment_amountstr.ToString(); // // Sepet içerği oluşturma fonksiyonu, değiştirilmeden kullanılabilir. JavaScriptSerializer ser = new JavaScriptSerializer(); string user_basket_json = ser.Serialize(user_basket); string user_basketstr = Convert.ToBase64String(Encoding.UTF8.GetBytes(user_basket_json)); data["user_basket"] = user_basketstr; // // Token oluşturma fonksiyonu, değiştirilmeden kullanılmalıdır. string Birlestir = string.Concat(merchant_id, user_ip, merchant_oid, emailstr, payment_amountstr.ToString(), user_basketstr, no_installment, max_installment, currency, test_mode, merchant_salt); HMACSHA256 hmac = new HMACSHA256(Encoding.UTF8.GetBytes(merchant_key)); byte[] b = hmac.ComputeHash(Encoding.UTF8.GetBytes(Birlestir)); data["paytr_token"] = Convert.ToBase64String(b); // data["debug_on"] = debug_on; data["test_mode"] = test_mode; data["no_installment"] = no_installment; data["max_installment"] = max_installment; data["user_name"] = user_namestr; data["user_address"] = user_addressstr; data["user_phone"] = user_phonestr; data["merchant_ok_url"] = merchant_ok_url; data["merchant_fail_url"] = merchant_fail_url; data["timeout_limit"] = timeout_limit; data["currency"] = currency; data["lang"] = lang; using (WebClient client = new WebClient()) { client.Headers.Add("Content-Type", "application/x-www-form-urlencoded"); byte[] result = client.UploadValues("https://www.paytr.com/odeme/api/get-token", "POST", data); string ResultAuthTicket = Encoding.UTF8.GetString(result); dynamic json = JValue.Parse(ResultAuthTicket); if (json.status == "success") { ViewBag.Src = "https://www.paytr.com/odeme/guvenli/" + json.token + ""; }else{ Response.Write("PAYTR IFRAME failed. reason:" + json.reason + ""); } } } }