<?php
$merchant_id = '';
$merchant_key = '';
$merchant_salt = '';
$user_basket = htmlentities(json_encode(array(
array("Örnek ürün 1", "18.00", 1),
array("Örnek ürün 2", "33.25", 2),
array("Örnek ürün 3", "45.42", 1)
)));
$merchant_oid = $_POST['merchant_oid'];
$test_mode = 1;
if (isset($_SERVER["HTTP_CLIENT_IP"])) {
$ip = $_SERVER["HTTP_CLIENT_IP"];
} elseif (isset($_SERVER["HTTP_X_FORWARDED_FOR"])) {
$ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
} else {
$ip = $_SERVER["REMOTE_ADDR"];
}
$user_ip = $ip;
$email = "testbex@siteniz.com";
$payment_amount = "15.20";
$installment_count = 0;
$payment_type = "bex";
/* Taksit seçenekleri opsiyoneldir. Göndermediğiniz takdirde müşterinize taksit seçenekleri gösterilmeyecektir. */
/* Aşağıda verilen değerler örnektir! Siz komisyon oranlarınıza göre tutarları hesaplayıp aşağıdaki kısmı düzenlemelisiniz. */
/* DİKKAT: Oluşturacağınız JSON tek satır olması ve arasında herhangi bir enter, vb. olmaması gerekmektedir. */
$installment_options = '{"advantage":{"2":20.2,"3":30.9,"4":40.8,"5":50.4,"6":60.4,"7":70.2,"8":80.1,"9":90.5,"10":100.3,"11":110.2,"12":120.8},'.
'"axess":{"2":20.2,"3":30.9,"4":40.8,"5":50.4,"6":60.4,"7":70.2,"8":80.1,"9":90.5,"10":100.3,"11":110.2,"12":120.8},'.
'"bonus":{"2":20.2,"3":30.9,"4":40.8,"5":50.4,"6":60.4,"7":70.2,"8":80.1,"9":90.5,"10":100.3,"11":110.2,"12":120.8},'.
'"combo":{"2":20.2,"3":30.9,"4":40.8,"5":50.4,"6":60.4,"7":70.2,"8":80.1,"9":90.5,"10":100.3,"11":110.2,"12":120.8},'.
'"cardfinans":{"2":20.2,"3":30.9,"4":40.8,"5":50.4,"6":60.4,"7":70.2,"8":80.1,"9":90.5,"10":100.3,"11":110.2,"12":120.8},'.
'"maximum":{"2":20.2,"3":30.9,"4":40.8,"5":50.4,"6":60.4,"7":70.2,"8":80.1,"9":90.5,"10":100.3,"11":110.2,"12":120.8},'.
'"paraf":{"2":20.2,"3":30.9,"4":40.8,"5":50.4,"6":60.4,"7":70.2,"8":80.1,"9":90.5,"10":100.3,"11":110.2,"12":120.8},'.
'"world":{"2":20.2,"3":30.9,"4":40.8,"5":50.4,"6":60.4,"7":70.2,"8":80.1,"9":90.5,"10":100.3,"11":110.2,"12":120.8}}';
$hash_str = $merchant_id . $user_ip . $merchant_oid . $email . $payment_amount . $payment_type . $installment_count . $test_mode . $installment_options;
$token = base64_encode(hash_hmac('sha256', $hash_str . $merchant_salt, $merchant_key, true));
$post = [
'merchant_id' => $merchant_id,
'user_ip' => $user_ip,
'merchant_oid' => $merchant_oid,
'email' => $email,
'payment_type' => $payment_type,
'payment_amount' => $payment_amount,
'installment_count' => $installment_count,
'test_mode' => $test_mode,
'user_name' => "TEST NAME",
'user_address' => "USER TEST ADDRESS",
'user_phone' => "05555555555",
'user_basket' => $user_basket,
'debug_on' => 1,
'paytr_token' => $token,
'installment_options' => $installment_options
];
$ch = curl_init('https://www.paytr.com/odeme');
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, 90);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 90);
//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);
$response = @curl_exec($ch);
if (curl_errno($ch)) {
echo curl_error($ch);
curl_close($ch);
exit;
}
curl_close($ch);
exit($response);
?>
# Python 3.6+
import json
import hmac
import hashlib
import base64
import requests
merchant_id = ''
merchant_key = b'' # byte formatında olmalı veya aşağıda encode edilmeli
merchant_salt = ''
user_basket = [
["Örnek ürün 1", "18.00", 1],
["Örnek ürün 2", "33.25", 2],
["Örnek ürün 3", "45.42", 1]
]
# PHP'deki htmlentities ve json_encode karşılığı
user_basket_json = json.dumps(user_basket)
# Örnek statik merchant_oid (Gelen istekten almalısınız)
merchant_oid = "SIPARIS12345"
test_mode = "1"
user_ip = "127.0.0.1" # Flask/Django gibi frameworklerden gerçek IP alınmalı
email = "testbex@siteniz.com"
payment_amount = "15.20"
installment_count = "0"
payment_type = "bex"
installment_options = '{"advantage":{"2":20.2,"3":30.9,"4":40.8,"5":50.4,"6":60.4,"7":70.2,"8":80.1,"9":90.5,"10":100.3,"11":110.2,"12":120.8},"axess":{"2":20.2,"3":30.9,"4":40.8,"5":50.4,"6":60.4,"7":70.2,"8":80.1,"9":90.5,"10":100.3,"11":110.2,"12":120.8},"bonus":{"2":20.2,"3":30.9,"4":40.8,"5":50.4,"6":60.4,"7":70.2,"8":80.1,"9":90.5,"10":100.3,"11":110.2,"12":120.8},"combo":{"2":20.2,"3":30.9,"4":40.8,"5":50.4,"6":60.4,"7":70.2,"8":80.1,"9":90.5,"10":100.3,"11":110.2,"12":120.8},"cardfinans":{"2":20.2,"3":30.9,"4":40.8,"5":50.4,"6":60.4,"7":70.2,"8":80.1,"9":90.5,"10":100.3,"11":110.2,"12":120.8},"maximum":{"2":20.2,"3":30.9,"4":40.8,"5":50.4,"6":60.4,"7":70.2,"8":80.1,"9":90.5,"10":100.3,"11":110.2,"12":120.8},"paraf":{"2":20.2,"3":30.9,"4":40.8,"5":50.4,"6":60.4,"7":70.2,"8":80.1,"9":90.5,"10":100.3,"11":110.2,"12":120.8},"world":{"2":20.2,"3":30.9,"4":40.8,"5":50.4,"6":60.4,"7":70.2,"8":80.1,"9":90.5,"10":100.3,"11":110.2,"12":120.8}}'
# Token oluşturma
hash_str = merchant_id + user_ip + merchant_oid + email + payment_amount + payment_type + installment_count + test_mode + installment_options + merchant_salt
token = base64.b64encode(hmac.new(merchant_key, hash_str.encode('utf-8'), hashlib.sha256).digest()).decode('utf-8')
payload = {
'merchant_id': merchant_id,
'user_ip': user_ip,
'merchant_oid': merchant_oid,
'email': email,
'payment_type': payment_type,
'payment_amount': payment_amount,
'installment_count': installment_count,
'test_mode': test_mode,
'user_name': "TEST NAME",
'user_address': "USER TEST ADDRESS",
'user_phone': "05555555555",
'user_basket': user_basket_json,
'debug_on': '1',
'paytr_token': token,
'installment_options': installment_options
}
try:
response = requests.post('https://www.paytr.com/odeme', data=payload, timeout=90)
print(response.text)
except requests.exceptions.RequestException as e:
print(f"Hata: {e}")
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using System.Text.Json;
class Program
{
static async Task Main(string[] args)
{
string merchantId = "";
string merchantKey = "";
string merchantSalt = "";
var userBasket = new List<object[]>
{
new object[] { "Örnek ürün 1", "18.00", 1 },
new object[] { "Örnek ürün 2", "33.25", 2 },
new object[] { "Örnek ürün 3", "45.42", 1 }
};
string userBasketJson = JsonSerializer.Serialize(userBasket);
string merchantOid = "SIPARIS12345"; // Dinamik olmalı
string testMode = "1";
string userIp = "127.0.0.1"; //HttpContext.Connection.RemoteIpAddress'ten alınabilir
string email = "testbex@siteniz.com";
string paymentAmount = "15.20";
string installmentCount = "0";
string paymentType = "bex";
string installmentOptions = "{\"advantage\":{\"2\":20.2,\"3\":30.9,\"4\":40.8,\"5\":50.4,\"6\":60.4,\"7\":70.2,\"8\":80.1,\"9\":90.5,\"10\":100.3,\"11\":110.2,\"12\":120.8},\"axess\":{\"2\":20.2,\"3\":30.9,\"4\":40.8,\"5\":50.4,\"6\":60.4,\"7\":70.2,\"8\":80.1,\"9\":90.5,\"10\":100.3,\"11\":110.2,\"12\":120.8},\"bonus\":{\"2\":20.2,\"3\":30.9,\"4\":40.8,\"5\":50.4,\"6\":60.4,\"7\":70.2,\"8\":80.1,\"9\":90.5,\"10\":100.3,\"11\":110.2,\"12\":120.8},\"combo\":{\"2\":20.2,\"3\":30.9,\"4\":40.8,\"5\":50.4,\"6\":60.4,\"7\":70.2,\"8\":80.1,\"9\":90.5,\"10\":100.3,\"11\":110.2,\"12\":120.8},\"cardfinans\":{\"2\":20.2,\"3\":30.9,\"4\":40.8,\"5\":50.4,\"6\":60.4,\"7\":70.2,\"8\":80.1,\"9\":90.5,\"10\":100.3,\"11\":110.2,\"12\":120.8},\"maximum\":{\"2\":20.2,\"3\":30.9,\"4\":40.8,\"5\":50.4,\"6\":60.4,\"7\":70.2,\"8\":80.1,\"9\":90.5,\"10\":100.3,\"11\":110.2,\"12\":120.8},\"paraf\":{\"2\":20.2,\"3\":30.9,\"4\":40.8,\"5\":50.4,\"6\":60.4,\"7\":70.2,\"8\":80.1,\"9\":90.5,\"10\":100.3,\"11\":110.2,\"12\":120.8},\"world\":{\"2\":20.2,\"3\":30.9,\"4\":40.8,\"5\":50.4,\"6\":60.4,\"7\":70.2,\"8\":80.1,\"9\":90.5,\"10\":100.3,\"11\":110.2,\"12\":120.8}}";
// Token oluşturma mantığı
string hashStr = merchantId + userIp + merchantOid + email + paymentAmount + paymentType + installmentCount + testMode + installmentOptions + merchantSalt;
string token = "";
using (HMACSHA256 hmac = new HMACSHA256(Encoding.UTF8.GetBytes(merchantKey)))
{
byte[] hashBytes = hmac.ComputeHash(Encoding.UTF8.GetBytes(hashStr));
token = Convert.ToBase64String(hashBytes);
}
// Post verilerini hazırlama
var postData = new Dictionary<string, string>
{
{ "merchant_id", merchantId },
{ "user_ip", userIp },
{ "merchant_oid", merchantOid },
{ "email", email },
{ "payment_type", paymentType },
{ "payment_amount", paymentAmount },
{ "installment_count", installmentCount },
{ "test_mode", testMode },
{ "user_name", "TEST NAME" },
{ "user_address", "USER TEST ADDRESS" },
{ "user_phone", "05555555555" },
{ "user_basket", userBasketJson },
{ "debug_on", "1" },
{ "paytr_token", token },
{ "installment_options", installmentOptions }
};
using (HttpClient client = new HttpClient())
{
client.Timeout = TimeSpan.FromSeconds(90);
var content = new FormUrlEncodedContent(postData);
try
{
HttpResponseMessage response = await client.PostAsync("https://www.paytr.com/odeme", content);
string responseString = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseString);
}
catch (Exception ex)
{
Console.WriteLine("Hata: " + ex.Message);
}
}
}
}
const crypto = require('crypto');
const merchant_id = '';
const merchant_key = '';
const merchant_salt = '';
const user_basket = [
["Örnek ürün 1", "18.00", 1],
["Örnek ürün 2", "33.25", 2],
["Örnek ürün 3", "45.42", 1]
];
const user_basket_json = JSON.stringify(user_basket);
const merchant_oid = "SIPARIS12345"; // İstekten dinamik alınmalı
const test_mode = "1";
const user_ip = "127.0.0.1"; // req.ip veya req.headers['x-forwarded-for'] ile alınmalı
const email = "testbex@siteniz.com";
const payment_amount = "15.20";
const installment_count = "0";
const payment_type = "bex";
const installment_options = '{"advantage":{"2":20.2,"3":30.9,"4":40.8,"5":50.4,"6":60.4,"7":70.2,"8":80.1,"9":90.5,"10":100.3,"11":110.2,"12":120.8},"axess":{"2":20.2,"3":30.9,"4":40.8,"5":50.4,"6":60.4,"7":70.2,"8":80.1,"9":90.5,"10":100.3,"11":110.2,"12":120.8},"bonus":{"2":20.2,"3":30.9,"4":40.8,"5":50.4,"6":60.4,"7":70.2,"8":80.1,"9":90.5,"10":100.3,"11":110.2,"12":120.8},"combo":{"2":20.2,"3":30.9,"4":40.8,"5":50.4,"6":60.4,"7":70.2,"8":80.1,"9":90.5,"10":100.3,"11":110.2,"12":120.8},"cardfinans":{"2":20.2,"3":30.9,"4":40.8,"5":50.4,"6":60.4,"7":70.2,"8":80.1,"9":90.5,"10":100.3,"11":110.2,"12":120.8},"maximum":{"2":20.2,"3":30.9,"4":40.8,"5":50.4,"6":60.4,"7":70.2,"8":80.1,"9":90.5,"10":100.3,"11":110.2,"12":120.8},"paraf":{"2":20.2,"3":30.9,"4":40.8,"5":50.4,"6":60.4,"7":70.2,"8":80.1,"9":90.5,"10":100.3,"11":110.2,"12":120.8},"world":{"2":20.2,"3":30.9,"4":40.8,"5":50.4,"6":60.4,"7":70.2,"8":80.1,"9":90.5,"10":100.3,"11":110.2,"12":120.8}}';
// Token oluşturma
const hash_str = merchant_id + user_ip + merchant_oid + email + payment_amount + payment_type + installment_count + test_mode + installment_options + merchant_salt;
const token = crypto.createHmac('sha256', merchant_key).update(hash_str).digest('base64');
// Form Data (x-www-form-urlencoded) formatında göndermek için URLSearchParams kullanılır
const payload = new URLSearchParams({
merchant_id,
user_ip,
merchant_oid,
email,
payment_type,
payment_amount,
installment_count,
test_mode,
user_name: "TEST NAME",
user_address: "USER TEST ADDRESS",
user_phone: "05555555555",
user_basket: user_basket_json,
debug_on: "1",
paytr_token: token,
installment_options
});
// İstek gönderme
fetch('https://www.paytr.com/odeme', {
method: 'POST',
body: payload,
headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
})
.then(res => res.text())
.then(body => console.log(body))
.catch(err => console.error("Hata:", err));