他社の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 'エラー'; }
適切な情報を見つけられたので、必要なコードが短時間で書けました。