サンプル
下記サンプルではサーバーAから別ドメインであるサーバーBにクロスドメイン通信する。
<?php
// Composerでインストールした各種ライブラリを読み込む(Guzzleもインストールされていること)
require_once 'vendor/autoload.php';
// サーバーBへのURL
$url = "http://example.com/server_side.php";
// サーバーBへ送信するPOSTデータ
$data = ['id'=>888,'name'=>'dog'];
$json = json_encode($data);
// サーバーBとクロスドメイン通信を行う。
$client = new GuzzleHttp\Client();
$res = $client->request('POST', $url,['form_params'=>['key1'=>$json]]);
// クロスドメイン通信のレスポンスを出力
echo $res->getStatusCode();
echo '<br>';
$body = $res->getBody();
$contents = $body->getContents();
var_dump($contents);
?>
<?php
// クロスドメイン通信を許可する(本来なら認証チェックや、アクセス元のオリジン【ドメイン+ポート】に制限をかけるべき)
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST');
// デフォルトデータにPOSTデータをマージする。マージしたデータはJSONに変換して出力。
$data = ['id'=>1,'name'=>'cat','status'=>2];
if(!empty($_POST['key1'])){
$json=$_POST['key1'];
$data2=json_decode($json,true);//JSONデコード
$data = array_merge($data, $data2);
}
$json = json_encode($data);//JSONエンコード
echo $json;
?>
string '{"id":888,"name":"dog","status":2}' (length=34)
サーバーA
// Composerでインストールしたライブラリ群をインクルードする(Guzzle3ライブラリも含まれる)
require_once '../vendor/autoload.php';
// 送信データ
$data = ['id'=>1200,'delete_flg'=>false, 'animal_name'=>'lion'];
$json = json_encode($data);
// クロスドメイン通信先URL(別ドメインのサイト)
$url = "http://amaraimusi.sakura.ne.jp/sample/php/guzzle3/cross_domain/test_serv_side.php";
// 通信先URLと送信データをセットして、クロスドメイン通信を開始する。
$client = new \Guzzle\Http\Client($url);
$request = $client->post($url,null,array('key1' => $json));
$res = $request->send();
// レスポンスをJSONとして受け取り出力する
$json = $res->json();
var_dump($json);
サーバーB
.
<?php
// クロスドメイン通信を許可する
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST');
$data = ['id'=>1,'animal_name'=>'cat','delete_flg'=>true];
if(!empty($_POST['key1'])){
$json=$_POST['key1'];
$data2=json_decode($json,true);//JSONデコード
$data = array_merge($data, $data2);
}
$json = json_encode($data);//JSONエンコード
echo $json;
?>
出力
array (size=3) 'id' => int 1200 'animal_name' => string 'lion' (length=4) 'delete_flg' => boolean false