Merhaba öncelikle elimde bir smm panel mevcut içinde ödeme yöntemi olarak shopier ve paytr mevcut ama ben buna ekstra olarak farklı bir pos eklemek istiyorum ne yaptımsa olmadı smm panelimde bulunan örnek shopier.php kodum aşağıda benim istediğim bu koddan shopier ile ilgili herşey kalkıcak ve aşağıda bıraktığım api kodları eklenicek yerine yardımcı olabilecek kodu güncelleyip atabilecek varsa çok minnettar olurum
<?php
if (isset($_POST['res']) && isset($_POST['hash'])) {
include("../../../config/config.php");
$ayar = @mysqli_query($baglanti,"SELECT * FROM ayarlar WHERE id='1'");
$ayar = $ayar->fetch_assoc();
$payment2 = @mysqli_query($baglanti,"SELECT ad,deger FROM payment");
while($payments = mysqli_fetch_array($payment2,MYSQLI_ASSOC))
{
$payment[] = $payments;
}
$payment=array_column($payment, 'deger', 'ad');
$username=$payment["shopier_obs"];
$key=$payment["shopier_obssifre"];
$hash=hash_hmac('sha256',$_POST['res'].$username,$key,false);
if (strcmp($hash,$_POST['hash'])!=0) {
die();
}
$json_result=base64_decode($_POST['res']);
$array_result=json_decode($json_result,true);
$email=$array_result['email'];
$email=htmlentities($email, ENT_QUOTES, "UTF-8");
$orderid=$array_result['orderid'];
$orderid=htmlentities($orderid, ENT_QUOTES, "UTF-8");
$currency=$array_result['currency'];
$currency=htmlentities($currency, ENT_QUOTES, "UTF-8");
$price=$array_result['price'];
$price=htmlentities($price, ENT_QUOTES, "UTF-8");
$buyername=$array_result['buyername'];
$buyername=htmlentities($buyername, ENT_QUOTES, "UTF-8");
$buyersurname=$array_result['buyersurname'];
$buyersurname=htmlentities($buyersurname, ENT_QUOTES, "UTF-8");
$productcount=$array_result['productcount'];
$productcount=htmlentities($productcount, ENT_QUOTES, "UTF-8");
$productid=$array_result['productid'];
$productid=htmlentities($productid, ENT_QUOTES, "UTF-8");
$customernote=$array_result['customernote'];
$customernote=htmlentities($customernote, ENT_QUOTES, "UTF-8");
$istest=$array_result['istest'];
$istest=htmlentities($istest, ENT_QUOTES, "UTF-8");
$buyersurname=str_replace("b", ".", $buyersurname);
$dataal=explode("a", $buyersurname);
$mik=$dataal[0];
$mysqliuye = @mysqli_query($baglanti,"SELECT * FROM siparis WHERE id='$mik'");
$mysqliuye2 = $mysqliuye->fetch_assoc();
if($ayar["sms_bildirim"]==1){
$sms_icerik="Siparişiniz başarıyla alınmıştır. ".$mysqliuye2["sip_id"]." koduyla siparişinizi sorgulayabilirsiniz.";
$sms_bildir=$mysqliuye2["telefon"];
$sms_user=$ayar["sms_user"];
$sms_pass=$ayar["sms_pass"];
$sms_tel=$ayar["sms_baslik"];
include("../../../config/netgsm.php");
}
if($ayar["mail_bildirim"]==1){
$mail_baslik="Siparişiniz Alındı";
$mail_icerik="Siparişiniz başarıyla alındı.<br>
Sipariş Sorgulama Kodu: ".$mysqliuye2["sip_id"]."<br>
Sipariş Tarihi: ".$mysqliuye2["tarih"]."<hr>
Bizi tercih ettiğiniz için teşekkür ederiz.";
$mail_alan=$mysqliuye2["mail"];
require("../../../config/mail/class.phpmailer.php");
include("../../../config/mail.php");
}
if($ayar["telegram_bildirim"]==1){
$telegram_key=$ayar["telegram_key"];
$telegramchatid=$ayar["telegram_chatid"];
$msg=$mysqliuye2["tarih"]." tarihinde ".$mysqliuye2["sip_id"]." idli sipariş verildi.";
sendTelegramMessage($telegramchatid,$msg,$telegram_key);
}
$tarih=date("Y-m-d H:i:s");
$tut=$mysqliuye2["tutar"];
$onceki="-";
$sonraki="-";
if ($baglanti->query("UPDATE siparis SET durum='Ödeme Alındı' WHERE id='$mik'"))
{
echo "success";
exit;
}
}
if(@$pay==Null || @$amount==Null){
echo "Eksik data"; exit;
}
$balance=$amount;
$balance=round($balance,2);
$ad=$ad;
$email = $mail;
$soyad = $sipcek["id"];
$telefon = $telefon;
$sehir = "Yok";
$adres = $adres;
$ilce = "Yok";
class Shopier
{
private $payment_url = 'https://www.shopier.com/ShowProduct/api_pay4.php';
private
$api_key,
$api_secret,
$module_version,
$buyer = [];
public function __construct($api_key, $api_secret, $module_version = ('1.0.4'))
{
$this->api_key = $api_key;
$this->api_secret = $api_secret;
$this->module_version = $module_version;
}
public function setBuyer(array $fields = [])
{
$this->buyerValidateAndLoad($this->buyerFields(), $fields);
}
public function setOrderBilling(array $fields = [])
{
$this->buyerValidateAndLoad($this->orderBillingFields(), $fields);
}
public function setOrderShipping(array $fields = [])
{
$this->buyerValidateAndLoad($this->orderShippingFields(), $fields);
}
private function buyerValidateAndLoad($validationFields, $fields)
{
$diff = array_diff_key($validationFields, $fields);
if (count($diff) > 0)
throw new Exception(implode(',', array_keys($diff)) . ' fields are required');
foreach ($validationFields as $key => $buyerField) {
$this->buyer[$key] = $fields[$key];
}
}
public function generateFormObject($order_id, $order_total, $callback_url)
{
$diff = array_diff_key($this->buyerFields(), $this->buyer);
if (count($diff) > 0)
throw new Exception(implode(',', array_keys($diff)) . ' fields are required use "setBuyer()" method ');
$diff = array_diff_key($this->orderBillingFields(), $this->buyer);
if (count($diff) > 0)
throw new Exception(implode(',', array_keys($diff)) . ' fields are required use "setOrderBilling()" method ');
$diff = array_diff_key($this->orderShippingFields(), $this->buyer);
if (count($diff) > 0)
throw new Exception(implode(',', array_keys($diff)) . ' fields are required use "setOrderShipping()" method ');
$args = array(
'API_key' => $this->api_key,
'website_index' => 1,
'platform_order_id' => $order_id,
'product_name' => 'Balance',
'product_type' => 1, //1 : downloadable-virtual 0:real object,2:default
'buyer_name' => $this->buyer['first_name'],
'buyer_surname' => $this->buyer['last_name'],
'buyer_email' => $this->buyer['email'],
'buyer_account_age' => 0,
'buyer_id_nr' => $this->buyer['id'],
'buyer_phone' => $this->buyer['phone'],
'billing_address' => $this->buyer['billing_address'],
'billing_city' => $this->buyer['billing_city'],
'billing_country' => $this->buyer['billing_country'],
'billing_postcode' => $this->buyer['billing_postcode'],
'shipping_address' => $this->buyer['shipping_address'],
'shipping_city' => $this->buyer['shipping_city'],
'shipping_country' => $this->buyer['shipping_country'],
'shipping_postcode' => $this->buyer['shipping_postcode'],
'total_order_value' => $order_total,
'currency' => $this->getCurrency(),
'platform' => 0,
'is_in_frame' => 0,
'current_language' => $this->lang(),
'modul_version' => $this->module_version,
'random_nr' => rand(100000, 999999)
);
$data = $args["random_nr"] . $args["platform_order_id"] . $args["total_order_value"] . $args["currency"];
$signature = hash_hmac('sha256', $data, $this->api_secret, true);
$signature = base64_encode($signature);
$args['signature'] = $signature;
$args['callback'] = $callback_url;
return [
'elements' => [
[
'tag' => 'form',
'attributes' => [
'id' => 'shopier_form_special',
'method' => 'post',
'action' => $this->payment_url
],
'children' => array_map(function ($key, $value) {
return [
'tag' => 'input',
'attributes' => [
'name' => $key,
'value' => $value,
'type' => 'hidden',
]
];
}, array_keys($args), array_values($args))
]
]
];
}
public function generateForm($order_id, $order_total, $callback_url)
{
$obj = $this->generateFormObject($order_id, $order_total, $callback_url);
return $this->recursiveHtmlStringGenerator($obj['elements']);
}
public function run($order_id, $order_total, $callback_url)
{
$form = $this->generateForm($order_id, $order_total, $callback_url);
return '<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title></title>
</head>
' . $form . '
<body>
<script type="text/javascript">
document.getElementById("shopier_form_special").submit();
</script>
</body>
</html>
';
}
// generateFormObject() sınıfının verdiği formattaki arrayden structure çıkartan yapıdırı.
private function recursiveHtmlStringGenerator(array $elements = [], $string = null)
{
foreach ($elements as $element) {
$attributes = $element['attributes'] ?? [];
$attributes = array_map(function ($key, $value) {
return $key . '="' . $value . '"';
}, array_keys($attributes), array_values($attributes));
$attribute_string = implode(' ', $attributes);
$html_in = $element['source'] ?? null;
$string .= "<{$element['tag']} {$attribute_string} > " . $html_in;
if (isset($element['children']) && is_array($element['children']))
$string = $this->recursiveHtmlStringGenerator($element['children'], $string);
$string .= "</{$element['tag']}>";
}
return $string;
}
//shopierden gelen dataları kontrol eder.
public function verifyShopierSignature($post_data)
{
if (isset($post_data['platform_order_id'])) {
$order_id = $post_data['platform_order_id'];
$random_nr = $post_data['random_nr'];
if ($order_id != '') {
$signature = base64_decode($_POST["signature"]);
$expected = hash_hmac('sha256', $random_nr . $order_id, $this->api_secret, true);
if ($signature == $expected)
return true;
}
}
return false;
}
private function buyerFields()
{
return [
'id' => true,
'first_name' => true,
'last_name' => true,
'email' => true,
'phone' => true,
];
}
private function orderBillingFields()
{
return [
'billing_address' => true,
'billing_city' => true,
'billing_country' => true,
'billing_postcode' => true,
];
}
private function orderShippingFields()
{
return [
'shipping_address' => true,
'shipping_city' => true,
'shipping_country' => true,
'shipping_postcode' => true,
];
}
private function getCurrency()
{
$currencyList = [
'TRY' => 0,
'USD' => 1,
'EUR' => 2,
];
return $currencyList[strtoupper($this->currency)] ?? 0;
}
private function lang()
{
$current_language = "tr-TR";
$current_lan = 0;
if ($current_language == "tr-TR") {
$current_lan = 0;
}
return $current_lan;
}
}
define('API_KEY', $payment["shopier_api"]);
define('API_SECRET', $payment["shopier_sifre"]);
$shopier = new Shopier(API_KEY, API_SECRET);
$shopier->setBuyer([
'id' => rand(0, 100),
'first_name' => $ad, 'last_name' => $soyad, 'email' => $email, 'phone' => $telefon]);
$shopier->setOrderBilling([
'billing_address' => $adres,
'billing_city' => $sehir,
'billing_country' => 'Turkey',
'billing_postcode' => $ilce,
]);
$shopier->setOrderShipping([
'shipping_address' => $adres,
'shipping_city' => $sehir,
'shipping_country' => 'Turkey',
'shipping_postcode' => $ilce,
]);
die($shopier->run($sipcek["sip_id"], $balance, $site.$siparisbasarili["url"]."?key=".$sipcek["sip_id"]));
ob_end_flush();
?>shopier yerine eklenicek api
API ile ödeme linki oluşturabilirsiniz. Aşağıda bir örnek verilmiştir:
POST https://panel.heranindapos.com/api/create-link
Headers:
- Content-Type: application/json
- Authorization: Bearer hfdvJa1tPxpHBC95IvoRU3pvVfS6ImWl
Body:
{
"link_name": "Örnek Link",
"link_desc": "Bu bir örnek açıklama.",
"amount": 100.0
}
Başarılı bir cevap örneği:
{
"status": "success",
"link": "https://example.com/payment/123456"
}
Ödeme tamamlandığında veya başarısız olduğunda belirttiğiniz [B]Callback URL[/B]'ye şu formatta bir POST isteği yapılır:
POST {callback_url}
Headers:
- Content-Type: application/json
Body:
{
"transaction_id": "123456",
"status": "success",
"amount": 100.0
}
Callback URL'nizin doğru çalıştığından emin olun. Yanıtların alınmaması API işlemlerini etkileyebilir.