PDA

View Full Version : سوال: مشکل کد من برای پرداخت آنلاین پارسیان



miladanimator
دوشنبه 10 اسفند 1388, 01:51 صبح
سلام دوستان.
من با بانک پارسیان قرار داد بستم و اون ها پین کد و یک فایل payment.php رو برای من فرستادن.

حالا من یک صفحه طراحی کردم که یک فرم داره و مقدار واریزی رو از کاربر میگیره و به صفحه parsian.php ارسال .میکنه .


<form method="post" name="pay" id="pay" action="parsian.php" >
<input name="price" type="text" id="price" maxlength="10" size="25">
<input class="button" type="submit" value="send">
</form>حالادرصفحه parsian.php ابتدا برخی اطلاعاتمورد نیازمو می گیرم و در دیتابیسثبت می کنم. مانند :شماره کاربر و مبلغ و ...

حالا این اطلاعات رو دارم :



$price=safeint($_POST["price"]);
$pin = 'MYPARSIANPIN';
$PaymentName = 'parsian';
$RedirectURL='uuuu.php';
$PayID هم زمان ثبت در دیتابیس با دستور $PayID=mysql_insert_id(); می گیرم .

و حالا با کد زیر سعی دارم authority رو بدست بیارم .




switch ($PaymentName) {

case "parsian" :

$error="";
include("nusoap/nusoap.php");
$soapclient = new soapclient('https://www.pec24.com/pecpaymentgateway/eshopservice.asmx?wsdl','wsdl');
if(!$soapclient->getError()){
$soapProxy = $soapclient->getProxy() ;
if(!$soapclient->getError()){
$params = array(
'pin' => $pin , // this is our PIN NUMBER
'amount' => $price,
'orderId' => $PayID,
'callbackUrl' => $RedirectURL,
'authority' => 0,
'status' => 1
);
$sendParams = array($params) ;
$res = $soapclient->call('PinPaymentRequest', $sendParams);
$authority = $res['authority'];
$status = $res['status'];

if ( ($authority) and ($status==0) ) {
$parsURL = "https://www.pec24.com/pecpaymentgateway/" ;
$form="<form name='form_gateway' method='GET' action='$parsURL'><input type='hidden' name='au' value='$authority'></form>";
$query="update dynamic_ads_onlinepays set RefNum='$authority' where PayID='$PayID'";
mysql_db_query($dbname,$query,$RSconn);
} else {
$error.="ERROR $status";
$error.=$soapclient->getError();
}
}else{
$error.=$soapclient->getError();
}
}else{
$error.=$soapclient->getError();
}

if($error){
$form="<form name='form_gateway' method='GET' action='#' onsubmit=\"alert('$error !')\"></form>";
echo "<p dir=LTR>";
echo "ERROR = $error <br /> " ;
echo "$authority <br />" ;
echo "$status <br />" ;
echo "$orderId <br />" ;
echo "Couldn't get proper authority key from Parsian" ;
echo "</p>";
exit;
}
break;

}

این کد در برخی موارد مثلا هر 10 بار یک بار جواب میده . اما در اکثر موارد ارور شماره 30 رو بر می گردونه که در راهنما اومده :

Status (byte): کد وضعيت
0: موفق
20, 22: پين فروشنده درست نميباشد
30: عمليات قبلا با موفقيت انجام شده است
34: شماره تراکنش فروشنده درست نميباشد


حالا چند سوال :

1- علت این خطا چیه که همش تکرار می شه؟؟ آیا مشکل از کد های منه ؟؟؟
2- در صورتی که کدهام مشکلی دارن مشکلشون چیه ؟؟
3- در مراحل تست ، چندین بار هم خطای 14 دریافت کردم که در فایل راهنما اشاره ای بهش نشده . این خطا مربوط به چیه؟؟

فایل payment.php i هم که بانک ارسال کرده ضمیمه کردم

Bahram0110
دوشنبه 10 اسفند 1388, 14:17 عصر
اشتباهی که شما کردین اینه که $PayID رو به عنوان ordID می فرستید
orderID در هر درخواست باید یکتا باشه. مثلا اگر برای یک پرداخت 106 باشه و موجودی کاربر کم باشه بانک خطا می گیره
و کاربر به سایت شما بر می گرده.
دوباره اگه کاربر بخواد همون invoice رو پرداخت کنه بانک خطا می گیره و می گه که این عملیات قبلا انجام شده.

شما باید بجای ID فیلد از یه چیز دیگه استفاده کنید. مثلا برای راحتی کار از time()

miladanimator
دوشنبه 10 اسفند 1388, 15:29 عصر
مرسی از جوابتون .

اما $PayID من هم یک عد منحصر به فرده . زمانی که کاربر درخواست پرداخت آنلاین میده توی سایت و مبلغ رو وارد می کنه ، اطلاعات اون در دیتابیس ذخیره میشهبا کد زیر :



$query="insert into onlinepays(Price,time,user_id,status) values('$price','$time',$user_id','0')";
mysql_db_query($dbname,$query,$RSconn) or die(mysql_error());
$PayID=mysql_insert_id();



و میبینیم که رکورد در دیتابیس ثبت میشهو آی.دی رکورد ثبت شده ر به عنوان payid میگیره که یک عدد جدید و منحصر به فرده:

$PayID=mysql_insert_id();

miladanimator
دوشنبه 10 اسفند 1388, 18:17 عصر
ممنون . مشکلم حل شد .

amini_drm@yahoo.com
شنبه 25 اردیبهشت 1389, 13:07 عصر
سلام . من از این کد استفاده کردم اما زمانیکه از صفحه بانک وارد صفحه سایتم می شم $status=1 هست یعنی پرداخت انجام نشده است.
اگر لطف کنید و کدتون را کامل بگذارید روی سایت تا دیگران هم استفاده کنند ممنون می شم.:خجالت:

robocap
جمعه 28 خرداد 1389, 10:56 صبح
سلام

ممنون از شما.

آیا امکان داره همین برنامه ای که نوشتید رو قرار بدید تا بتونیم استفاده کنیم؟

چون من واقعیتش متوجه کامل نشدم.هزینش رو هم پرداخت می کنم

تشکر

reza5004
شنبه 06 شهریور 1389, 12:39 عصر
salam.
man script banke parsin ro download kardam vali in errore ro mide:

Fatal error: Cannot redeclare class soapclient in pec24\nusoap\nusoap.php on line 5471
agar mitonin lotfan be man komak konin mamnon

Bahram0110
یک شنبه 07 شهریور 1389, 23:00 عصر
سلام
nusoup‏ دوبار ‏include‏ شده