【メモ】PHPでWebAPIを自作する際にXMLで詰まった話

cUrl_header

どうも、ゴエです。

今回は「XMLかなんかでPOSTして処理するWebAPIを自作すればいいじゃん」っと
かるーい考えで作ろうとしたら詰まった話です。

ことの発端

最近「データを自動で別のサーバーに送れるようにする」ものをPHPで作る機会があり、「じゃぁ、データをXMLにしてcUrlでPOSTすればいいじゃんww」と
かる~い考えでいました。

元々、とあるシステムのAPIを使ってXMLデータをPOSTする処理とかを作った事があったので「受け口さえ作れば簡単じゃんw」と思って鼻歌交じりでコーディングしてたら思いの他詰まったw

簡易プログラムの作成~そして詰まる

cUrlで実行する用のWebAPIを元々自作したことが無かったので、とりあえず簡単にデータをdumpするだけのプログラムをコーディング。

ここでふっと疑問点が「POSTのキーって何になるだ?」
通常だったら「$_POST[hoge] = hogehoge」って形で
キーを設定するんだけど今回はcUrlのCURLOPT_POSTFIELDSオプションにそのままXMLを突っ込む予定なのでキーがどうなるかわからなかったw

とりあえず、キーを指定せず[var_dump($_POST);]で出すように作る事に。
●WebAPIコード

<?php
 var_dump($_POST);
?>

●実行プログラム

<?php
$oXml = <<<__EMD__
<?xml version="1.0" encoding="UTF-8"?>
<request>
 <user>hogehoge</user>
 <pass>12345</pass>
</request>
__EMD__;

$_cUrl = curl_init();
curl_setopt( $_cUrl, CURLOPT_URL, "WebAPIのURL" );
curl_setopt( $_cUrl, CURLOPT_HEADER , false);
curl_setopt( $_cUrl, CURLOPT_SSL_VERIFYPEER , false);
curl_setopt( $_cUrl, CURLOPT_RETURNTRANSFER , true);
curl_setopt( $_cUrl, CURLOPT_TIMEOUT,60);
//httpアクセスエラーオプションも追加
curl_setopt($_cUrl, CURLOPT_FAILONERROR, true);
curl_setopt( $_cUrl, CURLOPT_POST, 1 );
curl_setopt( $_cUrl, CURLOPT_POSTFIELDS, $oXml);
$result = curl_exec($_cUrl);
$errCode = curl_errno($_cUrl);
$errMsg = curl_error($_cUrl);
@curl_close($_cUrl);
var_dump($errCode);
var_dump($errMsg);
var_dump($result);
exit;
?>

そして、デバッグを兼ねて実行・・・・・

●結果

Array
(
    [<?xml_version] => &quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;

 hogehoge
 12345

)

・・・・・・何だこりゃ・・・・。
なんかこっちが想定していたデータの出方と違う・・・・・(´・ω・`)

無事解決

データの出方が違っていたので原因を調査。
そしてやっと見つけたw

XMLをPOSTで送る/受け取る|明日から本気出す

どうやら、今回の様なやり方でXMLをPOSTすると配列としてでは無く、$_POSTという変数としてデータが入ってくるようでした。
そのため、$_POSTでごにょごにょするのでは無く、以下のような「php://input」をfile_get_contentsを使って取る必要があるとの事。
なので早速プログラムを修正

<?php
 $oXml = file_get_contents('php://input');
 var_dump($oXml);
 exit;
?>

そして再度実行

<?xml version="1.0" encoding="UTF-8"?>
<request>
 <user>hogehoge</user>
 <pass>12345</pass>
</request>

(∩´∀`)∩ワーイ 出たー!

まとめ

今回受信側を初めて作るということもあってか思いの外手こずったw
ぐぐってもやっぱり送信側の方法しか見当たらなったので調べるのも大変だったww
次回も開発する機会があったら忘れないようにメモしておこうw

[amazonjs asin=”4798126128″ locale=”JP” title=”WordPressプラグイン & WebAPI 活用ガイドブック Version 3.x対応”]

書いた人
ゴエ

書いてくれた人:みお。さん(@61167)
時々お江戸(東京)に出没する熱血系作品が好きな人。
なんか47都道府県に居るらしい(友人談)。
PHPをちょくちょく弄る人。

ゴエをフォローする
PHP開発
スポンサーリンク
ゴエをフォローする
スポンサーリンク

コメント

Ads Blocker Image Powered by Code Help Pro

当サイトでの広告の表示を許可してください

ブラウザの広告ブロッカーの機能を無効にするか、当サイトのドメインをホワイトリストに追加し、「更新」をクリックして下さい。

このサイトでは広告を主な資金源としています。ご協力の程よろしくお願い致します。

タイトルとURLをコピーしました