JosnRpcClient

<?phpの

/ **
*シンプルJSON-RPCインターフェイス。
* /
名前空間の組織。

クラスJosnRpcClient
{
保護$ホスト;
$ポートを保護します。
$バージョンを保護されました。
$デバッグを保護。
保護されます$ id = 0;

/ **
*初始化数据
* @paramの$ホスト主机IP
* @paramの$ポート端口
* @paramの$デバッグデバッグ模式(真または偽)
* @paramの$バージョンJSONRPC版本号
* @paramブール値の$デバッグ
* /
パブリック関数を__construct ($ホスト、$ポート、$デバッグ=偽、$バージョン= "2.0")
{
の$ this - >ホスト= $ホスト。
の$ this - >ポート= $ポート。
this- $> = $版版;
の$ this - > = $デバッグデバッグ;
}

/ **
*リクエストコアメソッド
* @param $メソッドコールバックメソッド名
* @param $ paramsは配列パラメータ
* @return配列は、結果の配列を返します
* /
機能要求のパブリック(メソッドの$は、のparams =配列()$)
{
//検査依頼情報を
{IF(is_scalar(方法$)!)
スロー新しい新しい\( 'メソッド、スカラーNO名が値を持っている')\例外を考える;
}
(IF IS_ARRAY($のparams)){
$ array_valuesのparams =($のparams);
} {他に
スロー新しい新\() 'params配列として与えられなければならない' \例外を考える;
}

//リクエストデータパッケージ
$要求= json_encode(配列(
'JSONRPC' =>の$ this - >バージョン、
'メソッド' => $法、
'paramsは' => $ paramsは、
'ID' =>の$ this - > ID ++
))。

//是否是デバッグ模式
ます$ this->デバッグ&&ます$ this->デバッグ。= '*****要求*****'。 "\ n"は。$要求。 "\ n"は'*** **リクエストの終了*****」 "\ n個の\ nを"。;

//カール请求
$ CH = curl_init();
ますcurl_setopt($ chの、CURLOPT_URL、の$ this - >ホスト);
ますcurl_setopt($ chの、CURLOPT_PORT、の$ this - >ポート)。
ますcurl_setopt($ chを、CURLOPT_RETURNTRANSFER、真の);
ますcurl_setopt($ chを、CURLOPT_HTTPHEADER、配列(」コンテンツタイプ:アプリケーション/ JSON '));
ますcurl_setopt($ chを、CURLOPT_POST、真の);
ますcurl_setopt($ chを、CURLOPT_POSTFIELDS、$リクエスト)。

$ RET = curl_exec($ chを);

//输出调试信息
場合(の$ this - >デバッグ){
エコーnl2br((の$ this - >デバッグ));
}

($ retを== falseを!)場合は{
$応答= json_decode($ RETを);

もし(ISSET($対応- >エラー)){
//新しいRPCExceptionを投げる($ formatted->エラー- >メッセージ、$ formatted->エラー- >コード);
新しい\は\例外(「リクエストエラー:」$対応- >エラーを)考えて投げます。
}他{
リターン$応答;
}
}他{
新しい\は( "サーバーが応答しませんでした:" \例外をスローだと思います$ this->ホストを。。 ':'。
}
}
}

おすすめ

転載: www.cnblogs.com/wzjwffg/p/11277451.html