راهنمای اتصال به درگاه پرداخت سداد بانک ملی – پی اچ پی

Mohammad

مدیر انجمن
عضو کادر مدیریت
6/4/08
15,126
143
63
31
PersianScript
برای انجام عملیات پرداخت آنلاین باید مشتری را به مرحله ای برسانید که باید به درگاه برود و مبلغ را پرداخت کند .

در این مرحله شما باید شماره فاکتور عددی و همچنین مبلغ پرداختی را مشخص کرده باشید .

(داخل پرانتز : شما باید سه پارامتر MerchandID و TerminalID و TransactionKey که مربوط به اطلاعات پذیرندگی شماست داشته باشید و قبلا برای گرفتن درگاه به شرکت سداد مراجعه کرده باشید .)

برای اتصال به وبسرویس سداد در پی اچ پی شما باید از کلاس nusoap استفاده کنید .

آدرس وبسرویس سداد به شکل زیر است


کد:
 https://sadad.shaparak.ir/services/MerchantUtility.asmx?wsdl
که اینگونه در برنامه ما استفاده میکنیم


کد:
$soapclient = new nusoap_client('https://sadad.shaparak.ir/services/MerchantUtility.asmx?wsdl','wsdl');
$soap***** = $soapclient->get*****() ;
اکنون باید اطلاعات مبلغ (به ریال) ، شماره فاکتور و آدرس برگشت به سایت به همراه سه پارامتر اختصاصی درگاه را در متد PaymentUtility وبسرویس وارد کنید . به شکل زیر .


کد:
$MerchandID ='111111';
$amount='1000'; // 100 toman
$order_id = 1 ; // tekrari babashad
$TransactionKey='aaaaaa'; 
$TerminalID='222222';
$callback = 'http://example.org/callback.php?order_id='.$order_id;

$result=$soap*****->PaymentUtility($MerchandID,$amount,$order_id,$TransactionKey,$TerminalID,$callback);
متغییر result نتیجه برگشتی این متد هست که شامل آرایه ای با دو کلید RequestKey و PaymentUtilityResult میباشد .

کد RequestKey را در دیتابیس به همراه مبلغ تراکنش و شماره فاکتور تراکنش ذخیره کنید و از PaymentUtilityResult که یک فرم هست جهت ارسال به درگاه استفاده میکنید .


کد:
$RequestKey = $result['RequestKey']; // dar database zakhire konid

$Form = $result['PaymentUtilityResult'];

//sakht form
echo $Form . "
<Input type='submit' name=btnSubmit  class='submit' value='pay'></form>";
بعد کاربر روی فرم کلیک میکند و به صفحه پرداخت بانک هدایت میشود و سپس در آنجا اطلاعات کارت را وارد میکند و مبلغ را پرداخت میکند و به آدرس callback ای که تعریف کردید برگشت داده میشود.

در آدرس کال بک بعد از برگشت کاربر باید صحت تراکنش انجام شده را باز با اتصال به وبسرویس استعلام کنید و شماره پیگیری را دریافت کنید.

با استفاده از order_id که بصورت کوئری استرینگ به آدرس کال بک دادیم اطلاعات تراکنش را از دیتابیس بیرون میکشیم .

سپس باید اطلاعات شماره فاکتور ، مقدار RequestKey (که در هنگام ارسال به درگاه گرفتیم و ذخیره کردیم) ، مبلغ تراکنش و همچنین سه پارامتر اختصاصی درگاه را در متد CheckRequestStatus قرار بدیم و نتیجه برگشتی را جهت بررسی صحت پرداخت تراکنش به دست بیاوریم .

بصورت زیر


کد:
$MerchandID ='111111';
$amount='1000'; // 100 toman
$order_id = 1 ; // tekrari babashad
$TransactionKey='aaaaaa'; 
$TerminalID='222222';
$RequestKey = ' ... '; //az database migiraim
$soapclient = new nusoap_client('https://sadad.shaparak.ir/services/MerchantUtility.asmx?wsdl','wsdl');
$soap***** = $soapclient->get*****() ;
$result=$soap*****->CheckRequestStatus($order_id , $MerchandID  , $TerminalID, $TransactionKey , $RequestKey , $amount);
جهت بررسی صحت تراکنش باید بررسی کنیم که کلید برگشتی متد بالا یعنی CheckRequestStatusResult مقدار صفر را داشته باشد و همچنین کلید RetrivalRefNo شماره پیگیری تراکنش به همراه تاریخ تراکنش است .

بصورت زیر


کد:
if( ! empty($result) and isset($result["CheckRequestStatusResult"]))
{
    $StatusResult=$result["CheckRequestStatusResult"];
    $StrResult=strval($StatusResult);
    if($StrResult==0)
    {
        echo "Transaction verifid. Code:". $result['RetrivalRefNo'];
    }
    else
        echo "Payment invalid!";
}
echo "Payment invalid!";
چند نکته:

همیشه از دیتابیس استفاده کنید .

آی پی خریدار را در دیتابیس ذخیره کنید.

حتما مبلغ را ذخیره کنید.

جهت شماره فاکتور از اعداد رندم استفاده نکنید !! به جاش شماره ID اون رکورد دیتابیس رو ارسال کنید.

سعی کنید شماره فاکتور تکراری نداشته باشید .

حداقل مبلغ و حداکثر مبلغ رو قبل از ارسال به درگاه تعیین کنید .

حداقل رو روی 100 تومان و حداکثر رو روی یک میلیون تومان قرار بدید .

شماره پیگیری را در برگشت یادداشت کنید.

وبسرویس سداد بانک ملی نیازی به ستل ندارد ، تراکنش های شما 24 ساعت بعد به حسابتون واریز خواهند شد .

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

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

نکته مهم اینکه سه پارامتر اختصاصی که بهتون دادن از بانک رو شدیدا محافظت کنید ، چون وبسرویس سداد به آی پی حساس نیست ، اگر کسی به کلیدهای شما دسترسی داشته باشد میتواند بعد از پرداخت خودش با استفاده از شماره پیگیری و پارامترهای اختصاصی شما به وبسرویس وصل بشود و تراکنش را برگشت بزند (با استفاده از سایر متدهای وبسرویس).

منبع:


کد:
blog.rezaonline.net
 

nasserheidary

تازه وارد
8/11/13
9
0
1
39
سلام . ممنون از راهنمایی بسیار ارزشمندتان . اما من یک بخش از این کدها را متوجه نشدم دقیقاً جایی که ***** نوشته اید من به جای ستاره ها چه چیزی باید بنویسم چون اینجوری که به صفحه پرداخت نمیره ؟؟؟!

 

MahdiY

راهبر انجمن
25/1/13
2,100
19
38
اینترنت!
احتمالا کلمه filte r بوده که انجمن بصورت خودکار تبدیلش میکنه به ستاره

 

hannanstd.ir

مدیر انجمن و توسعه دهنده ووکامرس پارسی
27/9/12
3,478
2
38
لنگرود
کد:
$soapProx y
هستش که باید space رو حذف کنید

 

hannanstd.ir

مدیر انجمن و توسعه دهنده ووکامرس پارسی
27/9/12
3,478
2
38
لنگرود
متاسفانه این کد قسمت کد خطاها رو نداره . مثلا قبل


کد:
[COLOR=#000000][COLOR=#007700]echo [/COLOR][COLOR=#0000BB]$Form [/COLOR][COLOR=#007700]. [/COLOR][COLOR=#DD0000]"
<Input type='submit' name=btnSubmit  class='submit' value='pay'></form>"[/COLOR][COLOR=#007700];  [/COLOR][/COLOR]
باید بررسی کنه ببینه اگه شرط برقرار بود به بانک ارسال بشه وگرنه کد خطا رو برگردونه . لطفا هرکی کد کاملی داره بذاره .

 

jamshimi

کاربر عضو
22/2/09
708
7
18
دوستان ببخشید آیا بانک ملی یا همون سداد واسه ووکامرس افزونه پرداخت دارد؟

 

hannanstd.ir

مدیر انجمن و توسعه دهنده ووکامرس پارسی
27/9/12
3,478
2
38
لنگرود
سلام .

توی شاپ ووکامرس پارسی گذاشتیم .

 

tatagata

تازه وارد
5/4/16
3
0
1
سلام به دوستان گرامی

وقتی می خوام که از اولین کد استفاده کنم

$soapclient = new nusoap_client('https://sadad.shaparak.ir/services/MerchantUtility.asmx?wsdl','wsdl');
        $soapProxy = $soapclient->getProxy();​

پی اچ پی بهم خطای زیر رو میده و میگه نمی تونه که nusoap رو include کنه. به نظر شما مشکل از چیه؟؟؟

کد:
<p>include(nusoap_client.php): failed to open stream: No such file or directory</p>
 

hannanstd.ir

مدیر انجمن و توسعه دهنده ووکامرس پارسی
27/9/12
3,478
2
38
لنگرود
شما فایل php مربوط nusoap رو درست فراحونی نکردید .

 

tatagata

تازه وارد
5/4/16
3
0
1
مرسی از شما.
یک سوال :
مگه آدرس اتصال به وب سرویس ، همونی نیست که داخل پرانتز هست و با همون کد به وب سرویس متصل نمیشه؟
خود فایل nusoap رو هم باید به پروژه ادکنم و آدرس دهی کنم؟

اگه بله، میشه راهنمایی بفرمائید.