ره پی، خدمات امن و نوین پرداختهای خٌرد
  • جمعه, ۲۹ شهریور ۱۳۹۸

نمونه کد PHP برای انتقال به درگاه پرداخت ره پی

برای انتقال به درگاه ره پی لازم است یک فرم HTML با تگ فرم بصورت زیر توسعه داده شود. در کد زیر MERCHANT_ID و TERMINAL_ID با مقادیر متناظر که در ترمینال فروشگاه نمایش داده می شوند جایگزین کنید. در صورت نیاز به ارسال کد سفارش orderId را نیز با توجه به داده های دیتابیس خود مقدار دهی کنید. مقدار amount به ریال است و همان جمع ریالی فاکتور شماست.

            
<form action="https://rahpay.net/payment/start_transaction" method="post">
    <input type="hidden" name="amount" value="1100">
    <input type="hidden" name="orderId" value="223">
    <input type="hidden" name="merchantId" value="MERCHANT_ID">
    <input type="hidden" name="terminalId" value="TERMINAL_ID">
    <input type="hidden" name="description" value="توضیحات فاکتور">
    <button type="submit">پرداخت</button>
</form>
            
        

پس از redirect شدن به ره پی، کاربر شما مستقیما به درگاه پرداخت بانکی منتقل شده و وجه را از طریق کارت خود پرداخت می نماید. پس از آن ره پی، درخواست را به آدرس بازگشتی (callback) که در هنگام ثبت نام وارد کرده اید، ارجاع داده و داده های زیر را بصورت POST ارسال می نماید.

            
array:5 [
         "refNum" => "pxtg3TRD4AiwBXt16PlB7fknmhpYc0223jvBDA4MGaZymi2cy"
          "orderId" => "223"
          "amount" => "1100"
          "message" => "ﻋﻤﻠﻴﺎﺕ ﺑﺎ ﻣﻮﻓﻘﻴﺖ ﺍﻧﺠﺎﻡ ﮔﺮﺩﻳﺪﻩ ﺍﺳﺖ"
         "transactionStatusCode" => "100"
         "followUpNumber" => "14457910000"
         ]
            
        

در صورتی که transactionStatusCode برابر با مقدار ۱۰۰ باشد، ﻋﻤﻠﻴﺎﺕ ﺑﺎ ﻣﻮﻓﻘﻴﺖ ﺍﻧﺠﺎﻡ ﮔﺮﺩﻳﺪﻩ ﺍﺳﺖ و این بدان معناست که می بایست refNum برای تایید نهایی تراکنش از طریق وب سرویس verify_transaction به ره پی اطلاع داده شود. در کد زیر MERCHANT_ID و TERMINAL_ID با مقادیر متناظر که در ترمینال فروشگاه نمایش داده می شوند جایگزین کنید.

            

function send_by_curl($url, $parameters)
{
    $c = curl_init();
    $data = json_encode($parameters);

    curl_setopt($c, CURLOPT_URL, $url);
    curl_setopt($c, CURLOPT_POST, 1);
    curl_setopt($c, CURLOPT_POSTFIELDS, $data);
    curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($c, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
    $server_output = curl_exec($c);
    if ($server_output === false) {
        echo(curl_error($c));
    }
    curl_close($c);
    return $server_output;
}

 $ref_num = $_POST['refNum'];
 $order_id = $_POST['orderId'];
 $amount = $_POST['amount'];
 $merchant_id = 'MERCHANT_ID';
 $terminal_id = 'TERMINAL_ID';

 $parameters = ['refNum' => $ref_num, 'orderId' =>$order_id , 'amount' => $amount,
       'merchantId' =>$merchant_id, 'terminalId' => $terminal_id];

 $settle_transaction_url = 'https://rahpay.net/payment/verify_transaction';
 $returnee = send_by_curl($settle_transaction_url, $parameters);
 $returnee = json_decode($returnee);
 var_dump($returnee);
            
        

در صورتی که وب سرویس verify_transaction فراخوانده و موفقیت آمیز باشد خروجی زیر را در پاسخ دریافت خواهید کرد. همچنین قسمتی از شماره کارت را بصورت زیر در پاسخ دریافت خواهید کرد.

            
 // در صورت تایید تراکنش از سمت ره پی
 +"httpStatus": 200
 +"hasError": false
 +"transactionStatusCode": 100
 +"refNum": "pxtg3TRD4AiwBXt16PlB7fknmhpYc0223jvBDA4MGaZymi2cy"
 +"message": "ﻋﻤﻠﻴﺎﺕ ﺑﺎ ﻣﻮﻓﻘﻴﺖ ﺍﻧﺠﺎﻡ ﮔﺮﺩﻳﺪﻩ ﺍﺳﺖ"
 +"orderId": "223"
 +"card": "627412******6060"
            
        

چنانچه httpStatus برابر ۲۰۰ و transactionStatusCode برابر ۱۰۰ باشد، بدین معناست که تراکنش با موفقیت در سمت ره پی ثبت شده است و با توجه به نوع تسویه انتخابی شما، با شما تسویه خواهد شد.

            
 if ($returnee->httpStatus == 200 && $returnee->transactionStatusCode == 100) {
    // روال تراکنش موفقیت آمیز بوده و شما
    // می توانید بر اساس منطق برنامه خود دیتابیس خود را بروز رسانی کنید
 }
 else{
    // تراکنش به هر دلیلی تایید نشده است و چنانچه دوباره
    // verify_transaction
    // فراخوانی نشود، مبلغ واریزی به کارت واریز کننده برگشت داده می شود
    echo($returnee->message);
 }