هدایت کاربر به بانک با متد POST

- 3 هفته پیش
توسط Alimotreb آپدیت شد
mehdi Hesami ( 1040 تجربه )
3 هفته پیش

سلام
دوستان من در پروژه ای از درگاه بانکی ایران کیش میخواماستفاده کنم که بعد از دریافت شماره قبض پرداخت یا همون توکن وقتی میخوام هدایت کنم کاربر رو صفحه پرداخت نیازه که با متد POST دو تا پارامتر به لینک بفرستم
در نمونه کدش خودشون اومدن یه فرمی گذاشتن و متد فرم رو post گذاشتن که باید دکمه پرداخت رو بزنی تا هدایت کنه به صفحه پرداخت ولی من میخوام بدون استفاد از فرم HTML اون دوتا پارامتر رو با متد POST به لینک پرداختش بفرستم و کاربر به بانک هدایت بشه
لینکش اینه :
https://ikc.shaparak.ir/TPayment/Payment/index
که باید دو تا پارامتر (token و merchantId) بهش با متد post بفرستیم که در زمان اجرای این لینک بصورت post خودش کاربر رو به صفحه پرداخت ریدایرکت میکنه ولی وقتی با CURL این لینک رو اجرا میکنم به هدایت نمیشه به صفحه پرداخت

لطفا یه کد عملی اگه بدید ممنون میشم
سپاس

محسن بستان ( 8020 تجربه )
3 هفته پیش

@hesami13
از Soap یا NuSoap استفاده کنید.

mehdi Hesami ( 1040 تجربه )
3 هفته پیش

کار نمیکنه
حتی با postman هم با متد post لینک رو اجرا میکنم میگه شما مجاز نیستید

Alimotreb ( 15557 تجربه )
3 هفته پیش

سلام
@hesami13
این یه نمونه کدی که با soap هست و استفاده میشه هنوز و کار میده
یه بررسی کنید جاهاییش که لازمه رو تغییر بدید و ...
امید وارم مشکل رو حل کنه

class irankish extends Bank
{
         public $merchantID = ''; // b45
         public $sha1= ''; // b45
    public function sendParams($transaction,$redirect=null)
    {

        $client = new SoapClient('https://ikc.shaparak.ir/XToken/Tokens.xml', array('soap_version'   => SOAP_1_1));
        if($redirect == null){  
        $redirect = 'http://'.$_SERVER['SERVER_NAME'].'/pay/check';
                }
                $merchantID = $this->merchantID;
        $params['amount'] =  $transaction->amount;
        $params['merchantId'] = $this->merchantID;
        $params['invoiceNo'] = time();
        $params['paymentId'] = time();
        $params['specialPaymentId'] = $transaction->res_num;
        $params['revertURL'] = $redirect;
        $params['description'] = "";
        $result = $client->__soapCall("MakeToken", array($params));
        $data['token'] = $result->MakeTokenResult->token;
        $data['merchantId'] = $merchantID;
        $transaction->order_id = $data['token'];
        $transaction->save(false);
/*print '<pre>';
print_r($result);*/
        $this->redirect_post('https://ikc.shaparak.ir/TPayment/Payment/index',$data);
    }

    function redirect_post($url, array $data)
    {

        echo '<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <title>درحال اتصال به درگاه ....</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <style type="text/css">
    #main {
        background-color: #F1F1F1;
        border: 1px solid #CACACA;
        height: 90px;
        left: 50%;
        margin-left: -265px;
        position: absolute;
        top: 200px;
        width: 530px;
    }
    #main p {
        color: #757575;
        direction: rtl;
        font-family: Arial;
        font-size: 16px;
        font-weight: bold;
        line-height: 27px;
        margin-top: 30px;
        padding-right: 60px;
        text-align: right;
    }
    </style>
        <script type="text/javascript">
            function closethisasap() {
                document.forms["redirectpost"].submit();
            }
        </script>
    </head>
    <body onload="closethisasap();">';
        echo '<form name="redirectpost" method="post" action="'.$url.'">';

        if ( !is_null($data) ) {
            foreach ($data as $k => $v) {
                echo '<input type="hidden" name="' . $k . '" value="' . $v . '"> ';
            }
        }

        echo' </form><div id="main">
<p>درحال اتصال به درگاه بانک</p></div>
    </body>
    </html>';

        exit;
    }
    public function verify($refNum,$transaction,$param)
    {
        if(  empty($_POST['resultCode']) || $transaction->status ==1 ){
            $transaction->status = 3;
            $transaction->save(false);
            die;
        }else {$client = new SoapClient('https://ikc.shaparak.ir/XVerify/Verify.xml', array('soap_version' => SOAP_1_1));
            $params['token'] = $transaction->order_id;
            $params['merchantId'] = Bank::find()->where(['name_id'=>'irankish'])->one()->terminalId;
            $params['referenceNumber'] = $refNum;
            $params['sha1Key'] = $this->sha1;
            $result = $client->__soapCall("KicccPaymentsVerification", array($params));
            $result = ($result->KicccPaymentsVerificationResult);
            if($_POST['resultCode'] == 100 && floatval($result) == $transaction->amount*10){
                $transaction->status = 1;
                $transaction->ref_num = $refNum;
                if( ! $transaction->save(FALSE)) {die;
                } else {
                }
            }else{}
        }

    }

}
برای ارسال پاسخ باید وارد سایت شوید