電子書籍の厳選無料作品が豊富!

HTTPのメッセージボディについて質問です。
決済代行会社との接続で悩んでいます。
要求した決済の結果を、
「ヘッダに「content-type : text/plain;charset=Shift_JIS」、メッセージボディの1、2行目に以下の文字列を返します。」
とあり、

CHECK:OK SID=xxxxxx GOUKEI=nnnnnn

CHECK:NG SID=xxxxxxx
(2行目もある場合あり)

と仕様書に書いてあります。

どのようにしたら、この中から、CHECK: の結果がNGかOKか、や、SIDの番号や、GOUKEIの額を取り出すことが出来るのでしょうか?
mb_・・・・
と色々な関数があるかと思いますが、どのようにしたら、HTTPのメッセージボディの1行目を検索文字列「str」に代入することができるのでしょうか?

自分がHTTPについてあまり理解していなく、知識不足だと思いますが、どなたかご教授お願いします。

A 回答 (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);
?>
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/06/15 16:08

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

この回答への補足

ご回答、ありがとうございます。
仕様書には

「加盟店様サーバから以下のクレジット決済要求をPOSTまたはGET形式にてパラメータを付与して、弊社決済サーバにソケット通信で送信します。」

そして、その次に結果データの返りについて

「ヘッダに「content-type : text/plain;charset=Shift_JIS」、メッセージボディの1、2行目に以下の文字列を返します。」

POST.GETは理解出来るので要求については大丈夫なのですが、データの返りが分からないでいます。
よろしくお願いいたします。

補足日時:2010/06/15 07:55
    • good
    • 0

どこの代行システムか、わかりませんが、


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

この回答への補足

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

補足日時:2010/06/14 15:24
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!