2011-08-10 16 views
0

私は、セキュアなサービス(支払いトランザクションゲートウェイ)に接続し、いくつかのフィールド($ postData)を渡し、応答($ returnValue)を受け取る次のコードブロックを持っています。curl_execコールからのPOSTデータの解析

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'https://secure.service.com/data'); 
curl_setopt($ch, CURLOPT_HEADER, true); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($ch, CURLOPT_FRESH_CONNECT, 1); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_FORBID_REUSE, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
curl_setopt($ch, CURLINFO_HEADER_OUT, true); 
if ($returnValue = curl_exec($ch)) 
{ 
    $error = curl_error($ch); 
} 

私は$のreturnValueの内容を表示すると、以下のように...彼らは示しています

HTTP/1.0 200 OK承認日:水曜日、2011年8月10日9時24分15秒GMT 接続:クローズコンテンツタイプ:application/x-www-form-urlencodedで のContent-Length:182 avs_code = X & cvv2_code = P & STATUS_CODE = 1つの&プロセッサ= TEST & auth_code = 999999 & settle_amount = 2000 & settle_通貨= USD & TRANS_ID = 120741127516 & auth_msg = TEST + APPROVED & auth_date = 2011-08-10 + 09:24:15

は、方法又はその構成部分に離れこの結果文字列を破壊CURLコールがあります?それとも自分が書くべきものなのでしょうか?私は、応答コード(200)、承認/拒否部分(承認済み)、およびクエリ文字列(avs_code ....)を取得する必要があります。私はcurl_getinfoを調べてみましたが、それはHTTP応答コードを取得するだけで、承認/拒否やクエリ文字列値を取得することはありません。

私はPHPの初心者ですので、明白なメソッド呼び出しやCURLパラメータがない場合は教えてください。

答えて

5
$ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_HEADER, 1); 
    curl_setopt($ch, CURLOPT_COOKIE, ""); 
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data); 
    $result = curl_exec($ch); 
    $header=substr($result,0,curl_getinfo($ch,CURLINFO_HEADER_SIZE)); 
    $body=substr($result,curl_getinfo($ch,CURLINFO_HEADER_SIZE)); 
    curl_close($ch); 

私はあなたがPECLのpecl_httpをインストールしたくない場合は、http://php.net/manual/en/function.http-parse-headers.phpマニュアルを見てお勧めpreg_match_all manual

+1

私はあなたがまだそのsubstrスプリットの後にそれらのvarsの1つのhttp応答仕様に従ってそれらを分離する\ r \ n \ r \ nを持っていると思います。このようにするときは、おそらくそれらを取り除きたいと思うでしょう。 –

1

を参照してくださいpreg_match_all("/Set-Cookie: (.*?)=(.*?);/i",$header,$res);

のようなものを使用したより - 便利なユーザーのコメントがあります。たとえば:

function http_parse_headers($header) { 
    $retVal = array(); 
    $fields = explode("\r\n", preg_replace('/\x0D\x0A[\x09\x20]+/', ' ', $header)); 
    foreach ($fields as $field) { 
     if (preg_match('/([^:]+): (.+)/m', $field, $match)) { 
      $match[1] = preg_replace('/(?<=^|[\x09\x20\x2D])./e', 'strtoupper("\0")', strtolower(trim($match[1]))); 
      if (isset($retVal[$match[1]])) { 
       $retVal[$match[1]] = array($retVal[$match[1]], $match[2]); 
      } else { 
       $retVal[$match[1]] = trim($match[2]); 
      } 
     } 
    } 
    return $retVal; 
} 

あなたはhttp://php.net/manual/ru/function.http-parse-cookie.php(またはコメント内の関数)とhttp://php.net/manual/en/function.parse-str.phpでクッキーとポスト値を解析することができます。 HTTPプロトコルはむしろ透過的です。

関連する問題