[PHP]別のURLにJSON形式のデータを送信して受信側で処理後のステータスを返す

別のURLに対してJSON形式のデータを送信する。
受信側でデータベースに登録や検索に使ったり目的に沿った処理を実装する。
処理後に正常か異常かを返す。
リクエスト後の戻り値は登録や検索結果のデータ、メッセージを返したりする。
receive.phpから処理が帰ってきたらjson_decodeで配列の形にデコードする。

・サンプルコード

send.php

<?php
$data = array(
	array(
		'area' => '東北',
		'pref' => '青森県',
		'kana' => 'あおもりけん',
	),
	array(
		'area' => '関東',
		'pref' => '千葉県',
		'kana' => 'ちばけん',
	),
	array(
		'area' => '中部',
		'pref' => '愛知県',
		'kana' => 'あいちけん',
	),
);

$send_url = 'http://sample.homestead.test/receive.php';

echo '送信先URL:'.$send_url;
echo '<br>';
echo '<pre>■送信するデータ';
print_r($data);
echo '</pre>';

// receive.phpにJSON形式でデータを投げる
$json = json_encode($data, JSON_PRETTY_PRINT);
$ch = curl_init();

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, $send_url);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 1);

$result = curl_exec($ch);
$result = json_decode($result, true);

curl_close($ch);

echo '<pre>■送信結果';
print_r($result);
echo '</pre>';

?>

receive.php

<?php

/**
 * JSONで受け取ったデータを配列にして返す
 **/
function get_request() {
    $content_type = explode(';', trim(strtolower($_SERVER['CONTENT_TYPE'])));
    $media_type = $content_type[0];

    if ($_SERVER['REQUEST_METHOD'] == 'POST' && $media_type == 'application/json')
    {
        // 送信データを取得
        $request = json_decode(file_get_contents('php://input'), true);
    }
    else
    {
        $request = false;
    }

    return $request;
}

$requests = get_request();

if($requests != false)
{
    foreach($requests as $request) {
        // 何らかの処理
    }

    $result = array(
        'status' => 1,
        'message' => 'データの処理に成功しました。',
    );
}
else
{
    $result = array(
        'status' => 0,
        'message' => 'データの処理に失敗しました。',
    );    
}

header("Content-type: application/json; charset=UTF-8");
$json = json_encode($result);
echo $json;

?>

・実行結果

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です