• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:HTTPのメッセージボディについて質問です。)

HTTPのメッセージボディの解析方法

このQ&Aのポイント
  • HTTPのメッセージボディには、決済結果や重要な情報が含まれることがあります。
  • メッセージボディ内の特定の情報を抽出するためには、検索文字列を使用することができます。
  • また、mb_で始まる関数を使用することで、HTTPのメッセージボディの解析が容易になります。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

投げる部分も作っていないように感じたので、file_get_contentsを使ってサンプル作ってみました。 手順としては ・決済代行会社に投げる値を作る ・投げる ・受け取る ・分解する という感じですね。 parseResponse()は適当に作ったので仕様書に従って書き換えてください。 >どのようにしたら、この中から、CHECK: の結果がNGかOKか、や、SIDの番号や、GOUKEIの額を取り出すことが出来るのでしょうか? $responseから取り出せます。 <?php /** * 返り値の分解用 */ function parseResponse($response) { $response = explode(' ', $response); $newResponse = array (); foreach ($response as $value) { $tempValue = explode('=', $value); if (preg_match('/^CHECK:(OK|NG)$/', $value, $maches)) { $newResponse['CHECK'] = $maches[1]; } elseif (count($tempValue) === 2) { $newResponse[$tempValue[0]] = $tempValue[1]; } else { $newResponse[] = $tempValue; } } return $newResponse; } //test //決済会社に投げるパラメーターです。 $contents = array ( 'dummy_id' => '001', 'dummy_total_price' => '105', ); //組み立てます。 $contents = http_build_query($contents, '', '&'); //ヘッダーを作ります。 $header = array ( 'Content-Type: application/x-www-form-urlencoded', 'Content-Length: '.strlen($contents) ); //リクエストを作ります。 $context = array ( 'http' => array ( 'method' => 'POST', 'header' => implode("\r\n", $header), 'content' => $contents ) ); //投げて受けます。 $response = file_get_contents('http://localhost/EC/2.php', false, stream_context_create($context)); //返り値のヘッダーは予約変数[$http_response_header]に入ってます。 $header = $http_response_header; //戻りを見てみます。 var_dump($response); //分解してみます。 $parsedResponse = parseResponse($response); //見てみます。 var_dump($parsedResponse); ?>

mitan3354
質問者

お礼

ソースを書いてくださり、本当にありがとうございます! 実際に実行してみて、完全には理解出来てはいないですが、こんな感じでデータを入れたり出したりするものなのだと、分かってきました。 記述の仕方も、普段私がソースコードを書くときよりずっとスマートでかっこいいです! ちゃんと全て理解しようと思っていますが、まったく訳が分からないでいたので、本当にありがとうございます<(_ _)>

すると、全ての回答が全文表示されます。

その他の回答 (2)

回答No.2

決済の要求はどのように出されていますか?fsockopenやfile_get_contentsをお使いでしょうか

mitan3354
質問者

補足

ご回答、ありがとうございます。 仕様書には 「加盟店様サーバから以下のクレジット決済要求をPOSTまたはGET形式にてパラメータを付与して、弊社決済サーバにソケット通信で送信します。」 そして、その次に結果データの返りについて 「ヘッダに「content-type : text/plain;charset=Shift_JIS」、メッセージボディの1、2行目に以下の文字列を返します。」 POST.GETは理解出来るので要求については大丈夫なのですが、データの返りが分からないでいます。 よろしくお願いいたします。

すると、全ての回答が全文表示されます。
  • hanmemomo
  • ベストアンサー率35% (205/580)
回答No.1

どこの代行システムか、わかりませんが、 サンプルというのがついてきたか、オーダーすればもらえるはずですので、 それを使った方が早いと思いますよ。 最初は。 動かせるようになったら、そこから発展させてみてくださいね

mitan3354
質問者

補足

ご回答ありがとうございます。 先日、担当の営業の方が丁寧に説明してくれたのですが、サンプルがあるとは言われず、「そんなに難しいことではないのですが。。。動かしてみて貰えればわかると思います。」とのことでした。ですが、その動かし方が分からず。。。もう一度、サンプル等があるのか聞いてみようと思います。

すると、全ての回答が全文表示されます。

関連するQ&A