# تسویه اشتراکی شناور

اين متد جهت فروشندگاني كه محل انتفاع از مبلغي ورودي مي بايست به صورت خاصي تقسيم گردد كاربرد دارد. به صورت مثال شما داراي سايتي هستيد كه خدمات مجالس را ارايه ميدهيد و با پيمانكاران متفاوتي در اين زمينه همكاري داريد. در اين صورت شما درصدي را بابت خريدهاي انحام شده برداشته و باقيمانده را به حساب پيمانكار واريز مينماييد. در اين حالت خريدار با مراجعه به وب سايت واسطه و انتخاب كالا يا خدمات مورد نياز، آماده پرداخت مبلغ فاكتور ميشود؛ فروشنده مشخصات درخواست به همراه تسويه حسابهاي مدنظر را با فراخواني متد Request به زرينپال اعلام ميدارد،

پارامتار های ورودی متد Request به شرح زیر است و سپس به آن پارامتر های تقسیم نیز اضافه میشود

نام نوع اجباری شرح
merchant_id String بله كد 36 كاراكتري اختصاصي پذيرنده
amount Integer بله مبلغ تراكنش به (ریال)
description String بله توضیحات مربوط به تراکنش
wages Array حساب های مد نظر جهت تسهیم
mobile String خیر شماره تماس خریدار
email String خیر ایمیل خریدار
callback_url String بله صفحه بازگشت مشتري، پس از انجام عمل پرداخت

برای این مورد می بایست علاوه بر پارامتر های ارسالیه متد Request , پارامتر wages را نیز به شرع زیر ارسال نمایید هر تقسیم میبایست در یک آرایه جدا قرار بگیرد

به نوع داده ها و نام فیلد توجه کنید

نام نوع اجباری شرح
iban String بله شماره شبا ۲۶ کارکتری با IR
amount Integer بله مبلغ تقسیم شده تراکنش به (ریال)
description String بله توضیحات مربوط به تقسیم

    'wages' =>[
            [
                'iban' => 'IR730570022880010489217001',
                'amount' => 10000,
                'description' => 'تسهیم سود فروش از محصول به وحید',
            ],
            [                
                 'iban' => 'IR670170000000352965862009',
                 'amount' => 5000,
                 'description' => 'تسهیم سود فروش از محصول به علی',
            ],
         ],

نمونه خط فوق بدين معناست كه در صورت موفقيت آميز بودن تراكنش مبلغ 10000 ریال از تراكنش اصلي به شماره شبا IR730570022880010489217001 با توضيح مشخص و مبلغ 5000 ریال از تراكنش به شبا IR670170000000352965862009 با توضيح مربوطه ثبت خواهد شد.

نکته

سقف تعداد قابل تقسیم 3 و نوع تقسيم تا ۹۰٪ مبلغ تراکنش تعيين گردیده است.


نمونه کد یک درخواست با تسویه اشتراکی به سه شخص


<?php

$data = array("merchant_id" => "1344b5d4-0048-11e8-94db-005056a205be",
    "amount" => 30000,
    "callback_url" => 'http://www.yousefii.ir/1/ver.php/',
    'description' => 'خرید تست',
    'metadata' => [
    'mobile' => '09195523234',
    'email' => 'info.davari@gmail.com', ],
    'wages' =>[
            [
                'iban' => 'IR730570022880010489217001',
                'amount' => 10000,
                'description' => 'تسهیم سود فروش از محصول به وحید',
            ],
            [                
                 'iban' => 'IR670170000000352965862009',
                 'amount' => 5000,
                 'description' => 'تسهیم سود فروش از محصول به علی',
            ],
            [                
                 'iban' => 'IR030570026580012681400101',
                 'amount' => 2000,
                 'description' => 'تسهیم سود فروش از محصول به ',
            ],
],

    );
$jsonData = json_encode($data);
$ch = curl_init('https://api.zarinpal.com/v4/payment/request.json');
curl_setopt($ch, CURLOPT_USERAGENT, 'ZarinPal Rest Api v1');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json',
    'Content-Length: ' . strlen($jsonData)
));

$result = curl_exec($ch);
$err = curl_error($ch);
$result = json_decode($result, true, JSON_PRETTY_PRINT);
curl_close($ch);


if ($err) {
    echo "cURL Error #:" . $err;
} else {
    if (empty($result['errors'])) {
        if ($result['data']['code'] == 100) {
            header('Location: https://www.zarinpal.com/pg/StartPay/' . $result['data']["authority"]);
        }
    } else {
        echo '<p>' .
            $result['errors']['code'] . '<br>' .
            $result['errors']['message'] . '<br>';
        }
        echo '</p>';
    }
}

?>


پس از پرداخت

پس از پرداخت موفق - بازگشت به صفحه مشخص شده از سمت پذیرنده در callback_url انجام می شود که باید مانند مرحله بازگشت به سایت پذیرنده طی شود که اینجا نیز مجددا توضیح داده میشود

بعد از پايان عمليات درسمت زرين پال، زرين پال وظيفه دارد كاربر را به سايت پذيرنده كه از طريق callback_url مشخص شده است بازگرداند.

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

نکته

نكته: توجه داشته باشيد كه يك Status به صورت QueryString به سايت پذيرنده ارسال ميگردد كه دو مقدار ثابت دارد ”OK“ و”NOK“ ؛ در صورتي كه اين مقدار برابر ”NOK“ بود به اين معنا بوده كه تراكنش نا موفق بوده و يا توسط كاربر لغو شده است؛ پس در صورتي verify استفاده شود كه با QueryString مقدار Status برابر با ”OK“ باشد.

GET
http://www.yoursite.ir/?Authority=A00000000000000000000000000202690354&Status=OK

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

در غير اينصورت پذيرنده موظف اسـت كـه بـا توجه به كد خطايي كه توسط متد verify دريافت ميكند كاربر را از خطاي رخ داده مطلع سازد.

در این مرحله اگر مقدار پارامتر code برابر 100 بود به معنای موفق بودن تراکنش است و با پارامتر ref_id شماره تراکنش را به کاربر نمایش میدهید

POST
https://api.zarinpal.com/v4/payment/verify.json

پارامتر

نام نوع شرح
merchant_id String كد 36 كاراكتري اختصاصي پذيرنده
amount Integer مبلغ تراكنش به (ریال)
authority String كد يكتاي شناسه مرجع درخواست.

مقاديري كه توسط متد verify برگشت داده ميشود در تسویه اشتراکی به شرح زير ميباشد.

نام نوع شرح
code Integer عددي كه نشان دهنده موفق بودن يا عدم موفق بودن پرداخت ميباشد.
ref_id Integer در صورتي كه پرداخت موفق باشد؛ شماره تراكنش پرداخت انجام شده را بر ميگرداند.
wages Array مقادیری که در ارسال درخواست اشتراکی به سمت زرین پال فرستاده شدند جهت دیده شدن توسط شما برگردانده می شوند
card_pan شماره کارت به صورت Mask
card_hash هش کارت به صورت SHA256
fee_type String گروه کارمزدی
fee Integer کارمزد

نمونه کد وریفای

  • درخواست
  • پاسخ
<?php

$Authority = $_GET['Authority'];
$data = array('merchant_id' => '1344b5d4-0048-11e8-94db-005056a205be', 'authority' => $Authority, 'amount' => 10001);
$jsonData = json_encode($data);
$ch = curl_init('https://api.zarinpal.com/v4/payment/verify.json');
curl_setopt($ch, CURLOPT_USERAGENT, 'ZarinPal Rest Api v1');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json',
    'Content-Length: ' . strlen($jsonData)
));

$result = curl_exec($ch);
curl_close($ch);
$result = json_decode($result, true);


?>