PHP:curlでPOSTして、結果のXMLを処理
他社のAPIで認証を行わなければならなくなりました。
仕様を確認すると、POST形式でidとパスワードを送信し、結果をXML形式で返してきます。
curlを使って、idとパスワードを送信
curlでPOSTする方法の参考にしたのは以下の記事です。
qiita.com
ほぼ記事通りのコードとなりました。
$POST_DATA = array(
'id' => '10001',
'password' => '1234567890',
);
$curl = curl_init("https://www.example.com/api");
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($POST_DATA));
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_COOKIEJAR, 'cookie');
curl_setopt($curl, CURLOPT_COOKIEFILE, 'tmp');
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
$output = curl_exec($curl);

UnsplashのDanial Igderyが撮影した写真
応答のXMLをsimplexml_load_string()で変換
応答のXMLは以下の形式です。
エラーの場合は、codeが空になります。
<?xml version="1.0" encoding="UTF-8"?> <response> <code>200</code> </response>
XMLの処理方法の参考にしたのは以下の記事です。
qiita.com
liginc.co.jp
blog.dododori.com
simplexml_load_string()で応答をオブジェクトに変換して、文字列型に変換すれば良さそうとわかりました。
結果、以下のようなコードになり、空だった場合は、エラーと判定できました。
$xmlObject = simplexml_load_string($output); $response= (string)$xmlObject->response; if (empty($response)) { echo 'エラー'; }
適切な情報を見つけられたので、必要なコードが短時間で書けました。