### Start Express Server with Node.js Source: https://dev.paytr.com/iframe-api/iframe-api-2-adim This is a standard Node.js Express server setup that listens for incoming connections on a specified port. It logs a message to the console once the server is successfully running. This snippet is typically used at the end of an Express application to initiate the web server. ```javascript var port = 3000; app.listen(port, function () { console.log("Server is running. Port:" + port); }); ``` -------------------------------- ### PayTR API Response Examples (JSON) Source: https://dev.paytr.com/iframe-api/iframe-api-1-adim These examples show the expected JSON responses from the PayTR API when requesting an iFrame token. A successful response includes a 'status' of 'success' and the 'token'. A failed response includes a 'status' of 'failed' and a 'reason' explaining the error. ```json { "status": "success", "token": "28cc613c3d7633cfa4ed0956fdf901e05cf9d9cc0c2ef8db54fa" } ``` ```json { "status": "failed", "reason": "Zorunlu alan degeri gecersiz: merchant_id" } ``` -------------------------------- ### Python: Configure PayTR Payment Parameters Source: https://dev.paytr.com/iframe-api/iframe-api-1-adim This Python 3.6+ code snippet sets up the necessary parameters for a PayTR payment transaction. It includes essential merchant details, customer information (email, name, address, phone), payment amount, order ID, URLs for success and failure, and basket details. It also configures test mode, installment options, currency, and IP address, which is crucial for local testing. The code comments provide guidance on how to format certain parameters like `user_basket` and emphasize the importance of using the correct IP for local development. ```python # Python 3.6+ # 1. ADIM için örnek kodlar import base64 import hmac import hashlib import requests import json # API Entegrasyon Bilgileri - Mağaza paneline giriş yaparak BİLGİ sayfasından alabilirsiniz. merchant_id = 'XXXXXX' merchant_key = b'YYYYYYYYYYYYYY' merchant_salt = b'ZZZZZZZZZZZZZZ' # Müşterinizin sitenizde kayıtlı veya form vasıtasıyla aldığınız eposta adresi email = 'XXXXXXXX' # Tahsil edilecek tutar. payment_amount = '' # 9.99 için 9.99 * 100 = 999 gönderilmelidir. # Sipariş numarası: Her işlemde benzersiz olmalıdır!! Bu bilgi bildirim sayfanıza yapılacak bildirimde geri gönderilir. merchant_oid = '' # Müşterinizin sitenizde kayıtlı veya form aracılığıyla aldığınız ad ve soyad bilgisi user_name = '' # Müşterinizin sitenizde kayıtlı veya form aracılığıyla aldığınız adres bilgisi user_address = '' # Müşterinizin sitenizde kayıtlı veya form aracılığıyla aldığınız telefon bilgisi user_phone = '' # 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ü). 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ü). merchant_fail_url = 'http://www.siteniz.com/odeme_hata.php' # Müşterinin sepet/sipariş içeriği user_basket = '' # ÖRNEK $user_basket oluşturma - Ürün adedine göre array'leri çoğaltabilirsiniz """ user_basket = base64.b64encode(json.dumps([['Örnek ürün 1', '18.00', 1], ['Örnek ürün 2', '33.25', 2], ['Örnek ürün 3', '45.42', 1]]).encode()) """ # !!! 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. user_ip = '' # İşlem zaman aşımı süresi - dakika cinsinden 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. debug_on = '1' # Mağaza canlı modda iken test işlem yapmak için 1 olarak gönderilebilir. test_mode = '1' no_installment = '0' # Taksit yapılmasını istemiyorsanız, sadece tek çekim sunacaksanız 1 yapın # 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. max_installment = '0' currency = 'TL' ``` -------------------------------- ### PayTR Ödeme Formunu Görüntüleme (HTML) Source: https://dev.paytr.com/iframe-api/iframe-api-1-adim Bu HTML kod parçacığı, PayTR ödeme formunu bir iframe içinde güvenli bir şekilde görüntülemek için kullanılır. `iframeResizer.min.js` kütüphanesi, iframe'in içeriğine göre boyutunu otomatik olarak ayarlamasını sağlar. `src` özelliğindeki URL, PayTR'ın güvenli ödeme sayfasına yönlendirir ve `{ token }` yerine, Python koduyla alınan ödeme token'ı eklenmelidir. Bu sayede kullanıcı, web sitenizden ayrılmadan ödeme işlemini tamamlayabilir. ```html ``` -------------------------------- ### Node.js PayTR Iframe API Setup and Configuration Source: https://dev.paytr.com/iframe-api/iframe-api-yeni-tasarim This Node.js snippet sets up an Express.js application and configures it to use EJS layouts and middleware for handling JSON and URL-encoded data. It also defines essential merchant credentials and payment parameters required for PayTR API integration, such as `merchant_id`, `merchant_key`, `user_basket`, and various URLs. ```javascript var express = require('express'); var ejsLayouts = require('express-ejs-layouts'); var microtime = require('microtime'); var crypto = require('crypto'); var app = express(); var nodeBase64 = require('nodejs-base64-converter'); var request = require('request'); var path = require('path'); app.set('views', path.join(__dirname, '/app_server/views')); app.set('view engine', 'ejs'); app.use(ejsLayouts); app.use(express.json()); app.use(express.urlencoded({ extended: true })); var merchant_id = 'XXXXXX'; var merchant_key = 'YYYYYYYYYYYYYY'; var merchant_salt = 'ZZZZZZZZZZZZZZ'; var basket = JSON.stringify([ ['Örnek Ürün 1', '18.00', 1], ['Örnek Ürün 2', '33.25', 2], ['Örnek Ürün 3', '45.42', 1] ]); var user_basket = nodeBase64.encode(basket); var merchant_oid = "IN" + microtime.now(); // Sipariş numarası: Her işlemde benzersiz olmalıdır!! Bu bilgi bildirim sayfanıza yapılacak bildirimde geri gönderilir. // 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. var max_installment = '0'; var no_installment = '0' // Taksit yapılmasını istemiyorsanız, sadece tek çekim sunacaksanız 1 yapın. var user_ip = ''; var email = 'XXXXXXXX'; // Müşterinizin sitenizde kayıtlı veya form vasıtasıyla aldığınız eposta adresi. var payment_amount = 100; // Tahsil edilecek tutar. 9.99 için 9.99 * 100 = 999 gönderilmelidir. var currency = 'TL'; var test_mode = '0'; // Mağaza canlı modda iken test işlem yapmak için 1 olarak gönderilebilir. var user_name = ''; // Müşterinizin sitenizde kayıtlı veya form aracılığıyla aldığınız ad ve soyad bilgisi var user_address = ''; // Müşterinizin sitenizde kayıtlı veya form aracılığıyla aldığınız adres bilgisi var user_phone = '05555555555'; // Müşterinizin sitenizde kayıtlı veya form aracılığıyla aldığınız telefon bilgisi // 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! var 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! var merchant_fail_url = 'http://www.siteniz.com/odeme_hata.php'; var timeout_limit = 30; // İşlem zaman aşımı süresi - dakika cinsinden ``` -------------------------------- ### PHP: Get PayTR Iframe Token and Display Payment Form Source: https://dev.paytr.com/iframe-api/iframe-api-1-adim This PHP snippet demonstrates how to make a POST request to the PayTR API to obtain an iframe token. It includes setting up POST data, configuring cURL options (including SSL verification options for local testing), executing the request, handling potential cURL errors, decoding the JSON response, and extracting the token. Finally, it embeds an iframe using the obtained token and initializes the iFrameResizer library to ensure the iframe resizes correctly. It also includes basic error handling for API failures. ```php $max_installment, 'user_name'=>$user_name, 'user_address'=>$user_address, 'user_phone'=>$user_phone, 'merchant_ok_url'=>$merchant_ok_url, 'merchant_fail_url'=>$merchant_fail_url, 'timeout_limit'=>$timeout_limit, 'currency'=>$currency, 'test_mode'=>$test_mode ); $ch=curl_init(); curl_setopt($ch, CURLOPT_URL, "https://www.paytr.com/odeme/api/get-token"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1) ; curl_setopt($ch, CURLOPT_POSTFIELDS, $post_vals); curl_setopt($ch, CURLOPT_FRESH_CONNECT, true); curl_setopt($ch, CURLOPT_TIMEOUT, 20); // XXX: DİKKAT: lokal makinanızda "SSL certificate problem: unable to get local issuer certificate" uyarısı alırsanız eğer // aşağıdaki kodu açıp deneyebilirsiniz. ANCAK, güvenlik nedeniyle sunucunuzda (gerçek ortamınızda) bu kodun kapalı kalması çok önemlidir! // curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); $result = @curl_exec($ch); if(curl_errno($ch)) die("PAYTR IFRAME connection error. err:".curl_error($ch)); curl_close($ch); $result=json_decode($result,1); if($result['status']=='success') $token=$result['token']; else die("PAYTR IFRAME failed. reason:".$result['reason']); ######################################################################### ?>