2016-07-29 164 views
0

使用payfort付款api https://testfort.payfort.com/api/?#merchant-page 執行tokinization之後,我在使用JSON的REST POST請求中遇到問題。我的代碼是使用JSON的Payfort REST POST請求

$requestParams=json_encode($requestParams); 
$service_url = 'https://sbpaymentservices.payfort.com/FortAPI/paymentApi'; 
$curl = curl_init($service_url); 
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST"); 
curl_setopt($curl, CURLOPT_POSTFIELDS, $requestParams); 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json','Content-Length: ' . strlen($requestParams))); 
$curl_response = curl_exec($curl); 

$ curl_response總是假

enter image description here

+0

代替使用原始API,檢查是否沒有Payfort的包裝:) – Vuldo

+0

搜索了很多,如果你發現然後分享鏈接:) – saad

+0

在github上檢查'payfort/start-php' – Vuldo

回答

0

這一個給結果

 $requestParams['signature'] = $signature; 
     $requestParams=json_encode($requestParams); 

     $result = file_get_contents('https://sbpaymentservices.payfort.com/FortAPI/paymentApi', null, stream_context_create(array(
       'http' => array(
       'method' => 'POST', 
       'header' => 'Content-Type: application/json' . "\r\n" 
       . 'Content-Length: ' . strlen($requestParams) . "\r\n", 
       'content' => $requestParams, 
       ), 
      ) 
     )); 

     $result=json_decode($result); 
0

我沒有關於payfort的具體信息,但是,你在一個錯誤的方式(也許)發送JSON數據。

$requestParams = json_encode($requestParams); 
/*other codes*/ 
curl_setopt($ch, CURLOPT_POSTFIELDS, 'json='.urlencode($requestParams)); 

您應該嘗試添加「json =」前綴並使用urlencode過濾/編碼一些特殊字符。

+0

仍然是錯誤的,在你身邊測試它會給出迴應(即使在錯誤中)如果curl成功 – saad

+0

你可以添加if(curl_error($ ch))echo curl_error($ ch);'line to the end of code並分享結果? –

+0

共享圖片 $ info = curl_getinfo($ curl); var_export($ info) – saad

0

我面臨同樣的問題。 您可以使用下面的代碼。 其工作正常。

$merchant_reference = str_random(30); 
    $redirectUrl = 'https://sbpaymentservices.payfort.com/FortAPI/paymentApi'; 
    $return_url = 'enter_your_return_url_here'; 

    $requestParams = array(
     'command' => 'PURCHASE', 
     'access_code' => 'enter_your_acccess_code_here', 
     'merchant_identifier' => 'enter_your_merchant_identifier_here', 
     'merchant_reference' => enter_your_merchant_reference_here, 
     'amount' => enter_your_amount_here, 
     'currency' => 'AED', 
     'language' => enter_your_language_here, 
     'customer_email' => '[email protected]', 
     'token_name' => enter_your_token_name_here, 
     'return_url' => return_url, 
     'card_security_code' => enter_your_cvv_here, 
    ); 

    // calculating signature 
    $shaString = ''; 
    ksort($arrData); 
    $SHARequestPhrase = 'GLAM'; 
    $SHAResponsePhrase = 'GLAM'; 
    $SHAType  = 'sha256'; 
    foreach ($arrData as $k => $v) { 
     $shaString .= "$k=$v"; 
    } 

    if ($signType == 'request') 
     $shaString = $SHARequestPhrase . $shaString . $SHARequestPhrase; 
    else 
     $shaString = $SHAResponsePhrase . $shaString . $SHAResponsePhrase; 

    $signature = hash($SHAType, $shaString); 

    $requestParams['signature'] = hash($SHAType, $shaString); 

    // calling payfort api using curl 
    //open connection 
    $ch = curl_init(); 

    //set the url, number of POST vars, POST data 
    $useragent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:20.0) Gecko/20100101 Firefox/20.0"; 
    curl_setopt($ch, CURLOPT_USERAGENT, $useragent); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
     'Content-Type: application/json;charset=UTF-8', 
      //'Accept: application/json, application/*+json', 
      //'Connection:keep-alive' 
    )); 
    curl_setopt($ch, CURLOPT_URL, $redirectUrl); 
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_FAILONERROR, 1); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // allow redirects  
    //curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // return into a variable 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 0); // The number of seconds to wait while trying to connect 
    //curl_setopt($ch, CURLOPT_TIMEOUT, Yii::app()->params['apiCallTimeout']); // timeout in seconds 
    curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($requestParams)); 

    $response = curl_exec($ch); 

    curl_close($ch); 

    return $response; 

這是返回您完整的payfort響應。