私のAPIには2つの可能な回答があります。私は受信したテキスト応答からデータを取得する必要があり、変数としてそれらを格納する必要があります。PHPで可能な2つのAPIテキスト応答から1つの応答からデータを取得する方法は?
APIの呼び出し:プレーンテキストで
$url="http://91.101.61.111:99/SendRequest/?mobile=9999999999&id=11011&reqref=501";
$request_timeout = 60;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_TIMEOUT, $request_timeout);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $request_timeout);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
$curl_error = curl_errno($ch);
curl_close($ch);
可能なAPIレスポンス:第一の可能な応答の場合には
REQUEST ACCEPTED your ref=<myref> system_reference=<sysref>
Or,
REQUEST ERROR errorno=<error>;your ref=<myref>;system_reason=<sysreason>
、私は以下のようなデータを取得する必要があり:
$status = "REQUEST ACCEPTED";
$myref = "501";
$sysref = "BA01562";
2番目に可能な回答の場合、私は以下のようなデータを取得する必要があります:
$status = "REQUEST ERROR";
$error = "25";
$myref = "501";
$sysreason = "Duplicate request";
私が試してみました:
$response = preg_match('/([\w\s]+) ([\w]+)/', $output, $res);
$rstatus = $res[1];
if ($rstatus == "REQUEST ACCEPTED")
{
$raccepted = preg_match('/([\w\s]+) your ref=([\d]+) system_reference=([\w]+)/', $output, $matches);
$status = $matches[1];
$myref = $matches[2];
$sysref = $matches[3];
}
elseif ($rstatus == "REQUEST ERROR")
{
$rerror = preg_match('/([\w\s]+) errorno=([\d]+);your ref=([\d]+);system_reason=([\w\s]+)/', $output, $matches);
$status = $matches[1];
$error = $matches[2];
$myref = $matches[3];
$sysreason = $matches[4];
}
echo "Status is $status, My Ref ID is $myref";
を今、私はAPI呼び出しからの第一の可能な応答を得るとき、私は常に最後の行にエラーが発生します(エコー....)、以下のように:
(! )注意:未定義の変数:!状態
()注意:未定義の変数:myref
ステータスがあり、私は第二の応答を受信したときに、私のRef IDは
でも問題なくです。私が望むように、それは示しています
状況は私のRef IDが501
で、リクエストエラーです助けてください!
jsonのように、APIレスポンスをいくつかのより良いフォーマットにしてみませんか? XMLでも良いでしょう。そのような手動の解析が必要なカスタムレスポンスを持つのは不思議です。 –
'$ rStatus' = 'あなたの要求を受け入れました'ので一致しません。私はMagnus Erikssonに同意し、あなたのAPIからのより穏やかな応答を作成します。 – aynber
...さらに悪い...実際には、リクエストが受け入れられたかどうかに応じて_two different_、custom、formatsがあります。 –