PDA

View Full Version : چک کردن مبلغ پرداختی در درگاه بانک ملی (سداد)



majidghafoorzade
سه شنبه 09 مرداد 1397, 17:46 عصر
سلام خدمت دوستان
برای درگاه پرداخت یک سایت دارم از درگاه سداد شاپرک استفاده میکنم.

کد فایل پرداخت (Pay.php):

<?php
session_start();
include_once("function.php");
/*
* WWW.NETPARADIS.COM
*/
//Prepare data
$key="YourKey"; // TerminalKey
$MerchantId="YourMerchantId";
$TerminalId="YourTerminalId";

$Amount=100; // مبلغ به ریال
$OrderId = time().mt_rand(0,3222) ; // شماره سفارش را در دیتابیس ذخیره کنید به عنوان یک سطر جدید
$LocalDateTime=date("m/d/Y g:i:s a");

$ReturnUrl="http://site.Com/Verify.php"; // ادرس بازگشتی به سایت شما

$SignData=encrypt_pkcs7("$TerminalId;$OrderId;$Amount","$key");
$data = array('TerminalId'=>$TerminalId,
'MerchantId'=>$MerchantId,
'Amount'=>$Amount,
'SignData'=> $SignData,
'ReturnUrl'=>$ReturnUrl,
'LocalDateTime'=>$LocalDateTime,
'OrderId'=>$OrderId);

$str_data = json_encode($data);

$res=CallAPI('https://sadad.shaparak.ir/vpg/api/v0/Request/PaymentRequest',$str_data);
$arrres=json_decode($res);
if($arrres->ResCode==0)
{
$Token= $arrres->Token;
$url="https://sadad.shaparak.ir/VPG/Purchase?Token=$Token";
header("Location:$url");exit;
}
else
die($arrres->Description);


?>


و کد فایل چک کردن وضعیت پس از پرداخت (Verify.php):

<?php
include_once("function.php");

$key="YourKey"; // TerminalKey

$OrderId=$_POST["OrderId"];
$Token=$_POST["token"];
$ResCode=$_POST["ResCode"];

if($ResCode==0)
{
$verifyData = array('Token'=>$Token,'SignData'=>encrypt_pkcs7($Token,$key));
$str_data = json_encode($verifyData);
$res=CallAPI('https://sadad.shaparak.ir/vpg/api/v0/Advice/Verify',$str_data);
$arrres=json_decode($res);
}
if($arrres->ResCode!=-1 && $ResCode==0)
{
//Save $arrres->RetrivalRefNo,$arrres->SystemTraceNo,$arrres->OrderId to DataBase
echo "شماره سفارش:".$OrderId."<br>"."شماره پیگیری : ".$arrres->SystemTraceNo."<br>"."شماره مرجع:".
$arrres->RetrivalRefNo."<br> اطلاعات بالا را جهت پیگیری های بعدی یادداشت نمایید."."<br>";

// در اینجا باید سفارش کاربر را تایید و در دیتابیس موفقیت آمیز قرار بدید
// نمایش صفحه تاییدیه پرداخت
}
else
echo "تراکنش نا موفق بود در صورت کسر مبلغ از حساب شما حداکثر پس از 72 ساعت مبلغ به حسابتان برمی گردد.";
?>



به این صورت هست.
تمام فرآیند پرداخت کاملا درست پیش میره فقط یک مشکل دارم.بعد از پرداخت نمیتونم مبلغ پرداخت شده رو بگیرم که بتونم با ارزش واقعی کالا مقایسه کنم.یعنی مثلا اگه کاربر با هر ترفندی بتونه مبلغ پرداخت رو متفاوت وارد کنه با مبلغ کالا هیچ راهی برا چک کردنش نیست.چون فرض کنید من با متد get مبلغ رو بفرستم به فایل Pay.php اونوقت کاربر اگه مبلغ رو توی url تغییر بده و یه مبلغ دیگه رو پرداخت کنه چجوری میتونم چک کنم این (https://www.webino.co/%D8%B7%D8%B1%D8%A7%D8%AD%DB%8C-%D8%B3%D8%A7%DB%8C%D8%AA-%D8%AF%D8%B1-%D8%A7%D8%B5%D9%81%D9%87%D8%A7%D9%86) قضیه رو؟
ممنون میشم راهنمایی بفرمایید.

plague
سه شنبه 09 مرداد 1397, 22:49 عصر
اینجا

$res=CallAPI('https://sadad.shaparak.ir/vpg/api/v0/Request/PaymentRequest',$str_data);

مبلغ رو قبل از اینکه کاربر رو به بانک بفرستی اعلام میکنی به بانک اینجوری نیست که تو لینک بفرستی

MiladWorkShop
چهارشنبه 10 مرداد 1397, 11:29 صبح
سلام

بهترین و امن ترین راه حل این هست که مبلغ رو موقع شروع عملیات پرداخت, از دیتابیس دریافت کنید نه از طریق فرم.