آموزش اتصال به درگاه زیبال در PHP ( ویدیویی + سورس )

آموزش اتصال به درگاه زیبال در PHP ( ویدیویی + سورس )

زیبال در PHP – در این مقاله یاد خواهیم گرفت که چگونه درگاه zibal را در پروژ مورد نظر مان پیاده سازی کرده و پرداخت آن را تایید کنیم .

در صورتی که هنوز ثبت نام نکرده اید یا merchant ندارید باز هم اشکالی ندارد و از مقدار zibal برای خرید آزمایشی می توانیم استفاده کنیم .

ویدیو درگاه زیبال در PHP

در یوتیوب هم قابل مشاهده است .

فایل functions.php ( توابع مورد نیاز برای زیبال )

<?php

define("ZIBAL_MERCHANT_ID", "zibal");

function httpRequestPost(string $url, array $body_list = [])
{
    $body = json_encode($body_list);
    $body_length = strlen($body);

    $opts = array(
        'http' =>
        array(
            'method'  => 'POST',
            'header'  => "Content-Type: application/json\r\n" . "Content-Length: {$body_length}\r\n",
            'content' => $body,
            'timeout' => 60
        )
    );

    $context  = stream_context_create($opts);
    $result = @file_get_contents($url, false, $context);

    if ($result) $result = json_decode($result, true);

    return $result;
}

function requestZibal($amount, $order_id, $description = "")
{
    $body = [
        "merchant" => ZIBAL_MERCHANT_ID,
        "amount" => $amount,
        "orderId" => $order_id,
        "description" => $description,
        "callbackUrl" => "http://example.com/payment/zibal.php",
    ];

    $res = httpRequestPost("https://gateway.zibal.ir/v1/request" , $body);
   
    return (is_array($res) && @$res['result'] == 100) ? $res['trackId'] : false;
}

function payZibal($trackId)
{
    $action_url = "https://gateway.zibal.ir/start/" . $trackId;
    return $action_url;
}

function verifyZibal($trackId)
{
    $body = array(
        "merchant" => ZIBAL_MERCHANT_ID,
        "trackId" => $trackId
    );

    $res = httpRequestPost('https://gateway.zibal.ir/v1/verify', $body);

    return $res;
}

به طور کلی :

  1. httpRequestPost تمامی درخواست های http مان را از طریق این تابع می فرستیم .
  2. requestZibal برای اینکه بتوانیم پرداختی را تایید یا هر عمل دیگری روی آن انجام بدیم نیازمند trackId هست که با این تابع یک trackId دریافت می کنیم .
  3. payZibal زمانی که trackId دریافت کردیم آن را به این تابع می دهیم تا به ما لینک پرداخت برگرداند .
  4. verifyZibal پس از اینکه کاربر از درگاه پرداخت مجدد به سایتمان بازگشت با callbackUrl که در requestZibal دادیم می توانیم با این تابع بررسی کنیم که خرید موفق بوده یا نه .


1- درخواست trackId برای پرداخت ( index.php )

<?php
$GLOBALS['title'] = "رپید کد - آموزش اتصال به زیبال در PHP";
require_once  $_SERVER['DOCUMENT_ROOT'] ."/parts/header.php";
?>

<form class="col-6 m-auto" action="" method="post">
<?php if(!empty($err_zibal)): ?>
    <p class="text-center p-2 rounded fw-bold bg-warning text-dark"><?= $err_zibal ?></p>
<?php endif; ?>
    <div class="input-group mb-3">
        <div class="input-group-prepend">
            <span class="input-group-text" id="basic-addon1">ریال</span>
        </div>
        <input type="number" class="form-control text-center mb-3" name="amount" placeholder="قیمت ...">
    </div>
    <input type="hidden" name="ref" value="zibal_request">
    <center><input type="submit" class="btn btn-primary ps-3 pe-3" value="خرید"></center>
</form>


<?php
require_once $_SERVER['DOCUMENT_ROOT'] . "/parts/footer.php";
?>

همچنین در فایل header.php بخش اعتبار سنجی اطلاعات فرم و دریافت trackId می باشد .

if (!empty($_POST['ref'])) {
    
    if ($_POST['ref'] == "zibal_request") {
        if (!empty($_POST['amount']) && is_numeric($_POST['amount'])) {
            $res = requestZibal($_POST['amount'] , 512 , "خرید از رپید کد");
            $trackId = $res;
            if ($trackId) {
                $url = payZibal($trackId);
                header("Location: {$url}");
            } else {
                $err_zibal = "خطا در اتصال به زیبال";
            }
        }
    }
}


2- تایید پرداخت (zibal.php)

<?php
$GLOBALS['title'] = "رپید کد - آموزش اتصال به زیبال در PHP";
require_once $_SERVER['DOCUMENT_ROOT'] . "/parts/header.php";

$trackId = $_GET['trackId'] ?? null;


$message = [
    "text" => "",
    "css_class" => ""
];


if ($trackId) {
    $res = verifyZibal($trackId);

    /*
    $res['result'] :
        100 -> Paid (first time page seen)
        201 -> Verified (second time or more)
    */
   
    if (!empty($res['result']) && ($res['result'] == 100 || $res['result'] == 201)) {
        $amount = $res['amount'] ?? false;
        $order_id = intval($res['orderId'] ?? 0);

        $amount_currency = $amount ? " به مبلغ " . $amount/10 . " تومان" : "";
        $order_id_message = $order_id ? " و شماره سفارش {$order_id}" : "";

        $message['text'] = "خرید موفق{$amount_currency}{$order_id_message}";
        $message['css_class'] = "bg-primary text-white";
    } else {
        $message['text'] = "خرید ناموفق";
        $message['css_class'] = "bg-danger";
    }
    
} else {
    $message['text'] = "پارامتر نامعتبر";
    $message['css_class'] = "bg-danger";
}

?>

<p class="text-center p-2 rounded fw-bold <?= $message['css_class'] ?>"><?= $message['text'] ?></p>


<?php
require_once $_SERVER['DOCUMENT_ROOT'] . "/parts/footer.php";
?>


خروجی برنامه پرداخت با زیبال

زیبال در PHP


  1. قبل از استفاده از سورس ZIBAL_MERCHANT_ID را مرچنت خود ( در صورتی که آزمایشی می خواهید zibal ) وارد کنید .
  2. example.com را دامنه خود قرار دهید در تابع requestZibal

دانلود سورس پرداخت با زیبال در PHP

ارسال نظر

جهت استفاده از کد حتما از تگ pre استفاده نمایید .

لیست نظرات

  1. Kasra
    Kasra

    سلام چرا کد خرابه میزنم ارور میده لطفا جواب بدید با تشکر

    20 اردیبهشت 1403 | 21:54:09
  • حسین باقری
    حسین باقری

    درود ، خطا رو بفرستید .

    21 اردیبهشت 1403 | 11:44:26
contact us