نوشته های من !

راجع به تجربه های شخصی از دنیای برنامه نویسی می نویسم، یا از روزمرگی هام …
کلاس “درگاه پرداخت دو مرحله ای بانک پاسارگاد”
نویسنده:
۳۱ اردیبهشت ۹۳

کلاس برای درگاه پرداخت دو مرحله ای بانک پاسارگاد

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

مرحله اول. PublicKey ارسالی از طرف بانک رو داخل فایل publicKey.xml کپی کنید. ( Public Key رو از داخل ایمیل تایید درگاه می تونید پیدا کنین .‌)

مرحله دوم. فایل pasargadGatewayClass.php رو باز کنید و متغیر های خط پنجم (merchantCode) و ششم ( terminalCode ) رو بر اساس ایمیل تاییدی بانک مقدار دهی کنید. ( مقدار این متغیر ها 0000 تنظیم شده است، حتما به مقدار ارسال شده از طرف بانک تغییر دهید. )
همچنین متغیر خط هفتم (redirectAddress ) رو برابر آدرسی که می خواهید بعد از پرداخت ( از صفحه بانک ) به اون صفحه برگرده مقدار دهی کنید.

مرحله سوم. برای استفاده از کلاس باید فایل حاوی کلاس رو به صفحه ای که می خواهید پرداخت داخلش انجام شه الحاق کنید، برای این کاری میتونید از کد زیر استفاده کنین :

require_once ("pasargadGatewayClass.php");

مرحله چهارم. برای ارسال درخواست به بانک از کد زیر استفاده کنید :

$gateWay = new PasargadBank_GateWay();
date_default_timezone_set('Asia/Tehran');
$gateWay->SendOrder(999,date("Y/m/d H:i:s"),1000);

همونطور که در مثال بالا مشخص هست تابع sendOrder سه متغیر دریافت می کنه، متغیر اول شماره فاکتور هست ( که در این مثال برابر 999 هست.) متغیر دوم زملن رو ارسال میکنه (‌که نیازی به تغییر این متغیر نیست. ) و متغیر سوم مبلغ تراکنش رو مشخص میکنه. ( دقت داشته باشید که واحد ارسالی به ریال محاسبه میشه . )
بعد از فراخوانی این تابع کاربر به درگاه پرداخت بانک فرستاده میشه و بعد از اتمام پرداخت خودش به آدرسی که در مرحله دوم برای کلاس مشخص کردیم ارسال میشه. ( بعنی همون متغیر redirectAddress )

مرحله پنجم. در صفحه ی مشخص شده برای تایید پرداخت فایل کلاس رو الحاق کنید ( مانند مرحله سوم ) و برای تایید پرداخت از کد زیر استفاده کنید :

$OrderStatus = new PasargadBank_GateWay();
$result = $OrderStatus->getOrder($_GET['tref']);
if($result['resultObj']['result'] == "True"){
if($result['resultObj']['amount'] == $_SESSION['pasargadAmount']){
if($OrderStatus->verifyOrder()){
echo "با موفقیت انجام شد.";
}
}
}else{
echo "پرداخت انجام نشد .";
}

در خط اول کد بالا یک شی از کلاس میسازیم و در خط دوم تایع OrderStatus رو فراخوانی میکنیم که یک متغیر به عنوان میگیره، این متغیر از طرف بانک در URL ارسال میشه.
در ادامه توضیح قطعه کد بالا سه شرط گذاشتیم:

  • شرط اول : استعلام وضعیت سفارش رو از بانک میگیره ( اگر برابر True باشه یعنی پرداخت انجام شده. )
  • شرط دوم :‌ مبلغ پرداخت شده از طرف کاربر رو با مبلغی که سایت انتظار داره در ازای سفارش پرداخت شده باشه چک میکنه. ( برای امنیت بیشتر. )
  • و در آخر شرط سوم‌ : در آخرین شرط از تابع verifyOrder استفاده شده، این تایع سفارش انجام شده رو تایید میکنه و به بانک اطلاع میده روند کار درست انجام شده ( اگر این تابع فراخوانی نشه مبلغ پرداخت شده توسط کاربر طی ۷۲ ساعت برگشت داده میشه. ) اگر تایید سفارش به درستی انجام بشه خروجی تابع TRUE و اگر تایید با مشکل مواجه بشه خروجی تابع FALSE میشه.

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

فایل حاوی کلاس و کتایبخانه های ارسالی از طرف بانک و یک مثال از نحوه استفاده رو میتونین از لینک زیر دانلود کنید.

فایل کلاس درگاه پرداخت دو مرحله ای بانک پاسارگاد

Fork me on GitHub

20 پیام برای کلاس “درگاه پرداخت دو مرحله ای بانک پاسارگاد”

  1. farshadmahfa گفت:

    سلام منم چطوری میتونم از پرداخت انلاین پاسارگاد توی پرويم استفاده کنم؟

    • علا عالم فلکی گفت:

      شما میتونین فایل کلاس رو از آخر مطلب دانلود کنید،
      و بعد از اون مراحل گفته شده در پروژه رو طی کنید تا تنظیمات رو انجام بدین.

  2. مسعود گفت:

    سلام
    من برای سایت خودم که جوملا هست دارم کامپوننت پرداخت درست می کنم
    اما یه مشکل دارم اونم اینه که وقتی من tref را برای بانک می فرستم اطلاعات خالی دریافت می کنم
    هر کاری می کنم نمی شه وقتی کد های شما را بررسی کردم نام کی فیلد را بجای tref گذاشتید invoiceUID ایا این الزامیست یعنی بانک فقط invoiceUID را می شناسه یا بادی tref گذاشت من تاپیکی زدم ممنون میشم اگر می تونید راهنماییم کنید
    http://forum.iranphp.org/Thread-%D9%85%D8%B4%DA%A9%D9%84-%D8%AF%D8%B1-%D8%AF%D8%B1%DB%8C%D8%A7%D9%81%D8%AA-%D9%88%D8%B1%DB%8C%D9%81%D8%A7%DB%8C-%D8%A7%D8%B2-%D8%A8%D8%A7%D9%86%DA%A9

  3. مهران گفت:

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

    • علا عالم فلکی گفت:

      با سلام،
      تستی که کردم پیغام پرداخت ناموفق رو به درستی نشون میده، شما متغیر redirectAddress رو به درستی مقدار دهی کردین ؟ آیا پیغام پرداخت موفق آمیز در صورت پرداخت موفق به درستی نمایش داده میشه ؟

  4. یوسف گفت:

    سلام
    اول ممنون بخاطر کدی که گذاشتی،خیلی عالی
    دوم کدت یه مشکل کوچیک داره که اگه درگاه پیغام انصراف رو بفرسته متوجه نمیشی،اونم واسه اینه که توی خط 85 کلاس(تابع getOrder) اگر result برابر true نباشه باید return کنه FALSE که شما اشتباها نوشتی FASLE
    بازم متشکرم

  5. حمید گفت:

    سلام و عرض ادب

    برنامه نویسم برای ایجاد درگاه بانکی پاسارگاد ، دچار مشکل شده…
    مشکل این جاست که میگه فروشگاه شما شناخته نمیشه…
    میشه راهنمایی بفرمایید.

  6. صوفی گفت:

    سلام و خسته نباشید
    من قبلا افزونه ووکامرس شما رو نصب کرده بودم .الان میخوام این کلاس رو بهش اضافه کنم شاید مشکلم حل بشه. من ادرس ریدایرکت رو توی افزونه ووکامرس نمیدانم کجا باید وارد کرد . مشکل افزونه م اینه پول رو از حسابم کم میکنه اما واریز نمیکنه و بعد از اینکه دکمه تایید خرید رو میزنم به صفحه سفید نمایش داده میشه . حالا این کلاس رو توی همون پلاگین اول اکپی کنم؟فایلهاش که هم نام هستن چی؟ میشه راهنماییم کنید من برای سایتم به درگاه پاسارگاد نیاز دارم

  7. صوفی گفت:

    سلام
    ممنونم که هستید و ممنونم که سریع و دلسوزانه پاسخ میدید.

  8. متاسفانه افرادی مثل شما خیلی خیلی کم هستن! ممنون از لطف شما

  9. kiana گفت:

    سلام
    عالیییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییی بود
    ممنون

  10. علی گفت:

    سلام ببخشید با توجه به تغییرات درگاه پاسارگاد کلید خصوصی باید کجا قرار بگیره ؟
    با رول که فرمودید درگاه پیام : فروشگاه ارسال کننده اطلاعات قابل شناسايي نيست را می دهد .
    تشکر

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *