آموزش نحوه راه اندازی درگاه پی لاین در php
آموزش نحوه راه اندازی درگاه پی لاین در php
در پست های قبلی نحوه راه اندازی درگاه پرداخت پی لاین در Asp.Net و Asp.Net MVC 5 را بررسی کردیم. و در این قسمت به صورت کامل نحوه راه اندازی درگاه پرداخت پی لاین در Php می پردازیم.
درگاههای پرداخت زیادی در اینترنت وجود دارند مانند: پی لاین ، زرین پال ، جهان پی و ... این درگاهها ، درگاههای واسط هستند که عمل پرداخت را بین سایت شما و بانک انجام می دهند.
استفاده از این درگاهها خیلی راحت و بی دردسر می باشند. در کنار این درگاهها درگاه مستقیم مانند: درگاه بانک ملت،پارسیان،سامان و... وجود دارند. که باید خودتان از بانک مورد نظر درخواست درگاه کنید.
پیاده سازی این درگاه ها کمی سخت تر و دردسر خود را دارند. نحوه راه اندازی درگاه بانک ملت با php را می توانید در سایت کارکو مشاهده کنید.
برای راه اندازی درگاه پی لاین ما به چهار صفحه نیاز داریم. که شامل صفحات index.php ، send.php ، return.php و sender.php که به ترتیب این چهار صفحه را توضیح خواهیم داد.
فایل sender.php : کدهای فایل sender.php به صورت زیر می باشند.
<?php function send($url,$api,$amount,$redirect){ $ch = curl_init(); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_POSTFIELDS,"api=$api&amount=$amount&redirect=$redirect"); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); $res = curl_exec($ch); curl_close($ch); return $res; } function get($url,$api,$trans_id,$id_get){ $ch = curl_init(); curl_setopt($ch,CURLOPT_URL,$url); curl_setopt($ch,CURLOPT_POSTFIELDS,"api=$api&id_get=$id_get&trans_id=$trans_id"); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); $res = curl_exec($ch); curl_close($ch); return $res; }
در این فایل دو تابع send و get وجود دارند که از تابع send برای ارسال اطلاعات به درگاه پی لاین استفاده می شود که از این تابع در فایل send.php استفاده کرده ایم.
تابع دیگر که تابع get می باشد برای دریافت اطلاعات از طرف پی لاین استفاده می شود. که شماره تراکنش ، کد پیگیری و پیغام مورد نظر که آیا پرداخت موفق بوده یاخیر را بر می گرداند.
فایل index.php : کدهای فایل index.php به صورت زیر می باشند.
<?php session_start(); ?> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>درگاه پی لاین-ایران گنج</title> <meta charset="UTF-8"> <link href="Content/style.css" rel="stylesheet"/> </head> <body> <?php $url = ""; $message = ""; if (isset($_POST['submit'])) { $price = $_POST['amount']; if ($price != "") { if (is_numeric($price)) { //ثبت اطلاعات در پایگاه داده $url = "send.php"; $_SESSION['price'] = $price; header("Location: $url"); } else { $message = "مبلغ وارد شده معتبر نیست"; } } else { $message = "شما مبلغی را وارد نکرده اید"; } } ?> <div class="main"> <form name="pay" action="index.php" method="post"> <table class="tbl"> <tr> <td colspan="2"> <h2>درگاه پی لاین</h2> </td> </tr> <tr> <td>مبلغ:</td> <td> <input type="text" id="amount" name="amount"/> </td> </tr> <tr> <td colspan="2" style="text-align: left;"> <input type="submit" name="submit" value="پرداخت"/> </td> </tr> <tr> <td colspan="2"> <?php if (isset($message)) { echo $message; $message=""; } ?> </td> </tr> <tr> <td colspan="2"> <a href="http://iranganj.ir" target="_blank">www.iranganj.ir</a> </td> </tr> </table> </form> </div> </body> </html>
در این صفحه ما یک فرم ساده داریم که کاربر مبلغ تراکنش را وارد کرده و بر روی دکمه پرداخت کلیک می کند. بعد از اینکه کاربر بر روی دکمه پرداخت کلیک کرد اطلاعات به فایل send.php ارسال می شود و بقیه مراحل از این فایل ادامه پیدا می کند.
فایل send.php : کدهای فایل send.php به صورت زیر می باشند.
<?php session_start(); ?> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta charset="utf-8"> <title>درگاه پی لاین-ایران گنج</title> <link href="Content/style.css" rel="stylesheet"/> </head> <?php include_once("sender.php"); $url = 'http://payline.ir/payment-test/gateway-send'; $api = 'adxcv-zzadq-polkjsad-opp13opoz-1sdf455aadzmck1244567'; $message = ""; if (isset($_SESSION['price'])) { $amount = $_SESSION['price']; unset($_SESSION['price']); $redirect = urlencode('http://localhost:8080/payline/return.php'); $result = send($url, $api, $amount, $redirect); if ($result > 0 && is_numeric($result)) { $go = "http://payline.ir/payment-test/gateway-$result"; header("Location: $go"); } switch ($result) { case '-1': $message = 'api ارسالی با نوع api تعریف شده در payline سازگار نیست'; break; case '-2': $message = 'مقدار مبلغ کمتر از 1000 ریال می باشد'; break; case '-3': $message = 'آدرس بازگشتی خالی می باشد'; break; case '-4': $message = 'درگاهی با درگاه ارسالی شما یافت نشد'; break; } }else{ $message="تراکنش شما معتبر نمی باشد"; } ?> <body> <div class="main"> <table class="tbl"> <tr> <td colspan="2"> <h2>درگاه پی لاین</h2> </td> </tr> <tr> <td> پیام خطا</td> <td> <?php echo $message; ?> </td> </tr> <tr> <td colspan="2"> <a href="http://iranganj.ir" target="_blank">www.iranganj.ir</a> </td> </tr> </table> </div> </body> </html>
در فایل send.php ابتدا فایل sender.php را اینکلود کرده ایم چون می خواهیم از تابع send.php استفاده کنیم.
ما در صفحه index.php مبلغ مورد نظر را توسط سشن به صفحه send.php ارسال کرده ایم و در این صفحه چک می کنیم که آیا سشن وجود دارد یا نه ، سپس مبلغ مورد نظر را دریافت کرده و سشن را خالی می کنیم. سپس اطلاعات مورد نظر که شامل آدرس درگاه پرداخت پی لاین ، api مورد نظر ، مبلغ تراکنش و آدرس برگشتی از بانک می باشد را توسط تابع send ارسال می نماییم. سپس مقدار برگشتی تابع send را در متغیر result ذخیره می کنیم. سپس مقدار برگشتی را چک می کنیم که بزرگتر از صفر و همچنین عدد باشد در این صورت کاربر به صفحه پرداخت هدایت می شود. و اگر شرط درست نباشد حتما خطایی رخ داده است که در بخش switch آن را چک کرده ایم و خطای مورد نظر را چاپ می کنیم.
فایل return.php : کدهای فایل return.php به صورت زیر می باشند.
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta charset="utf-8"> <title>درگاه پی لاین-ایران گنج</title> <link href="Content/style.css" rel="stylesheet"/> </head> <?php include_once("sender.php"); $url = 'http://payline.ir/payment-test/gateway-result-second'; $api = 'adxcv-zzadq-polkjsad-opp13opoz-1sdf455aadzmck1244567'; if (isset($_POST['trans_id']) && isset($_POST['id_get'])) { $trans_id = $_POST['trans_id']; $id_get = $_POST['id_get']; $result = get($url, $api, $trans_id, $id_get); switch ($result) { case '-1' : $message = 'api ارسالی با نوع api تعریف شده در payline سازگار نیست'; break; case '-2' : $message = 'شماره تراکنش نامعتبر است'; break; case '-3' : $message = 'id_get نانعتبر است'; break; case '-4' : $message = 'چنین تراکنشی در سیستم وجود ندارد یا تراکنش نامعتبر است'; break; case '1' : $message = 'تراکنش موفقیت آمیز بوده است'; break; } } ?> <body> <div class="main"> <table class="tbl"> <tr> <td colspan="2"> <h2>درگاه پی لاین</h2> </td> </tr> <tr> <td>شماره تراکنش</td> <td> <?php if (isset($id_get)) { echo $id_get; } else{ echo "شماره تراکنش نامعتبر است"; } ?> </td> </tr> <tr> <td>کد پیگیری</td> <td> <?php if (isset($trans_id)) { echo $trans_id; }else{ echo "کد پیگیری نامعتبر است"; } ?> </td> </tr> <tr> <td>وضعیت پرداخت</td> <td> <?php if (isset($message)) { echo $message; }else{ echo "پرداختی صورت نگرفته است"; } ?> </td> </tr> <tr> <td colspan="2"> <a href="http://iranganj.ir" target="_blank">www.iranganj.ir</a> </td> </tr> </table> </div> </body> </html>
بعد از اینکه کاربر به درگاه پرداخت هدایت شد بر روی بازگشت به سایت مبدا کلیک می کند که در این صفحه ما اطلاعات برگشتی را از درگاه دریافت می کنیم.
در این صفحه ابتدا چک می کنیم که trans_id وid_get وجود دارد یا نه اگر وجود نداشت پیغام خطا را صادر می کنیم. سپس از تابع get استفاده کرده و مقادیر را دوباره به درگاه پرداخت ارسال می کنیم. سپس خروجی تابع get را در متغیر result ذخیره می کنیم. و با توجه به مقدار برگشتی result پیغام مناسب را به کاربر نمایش می دهیم.
نکته بسیار مهم: ما از آدرس تست درگاه پی لاین استفاده کردیم و شما باید در سایت خود در آدرس های ارسالی به جای payment-test فقط payment را بنویسید.
در پست بعدی نحوه راه اندازی درگاه پی لاین در PHP با ثبت اطلاعات در پایگاه داده خواهیم پرداخت.
نظر / سوال