Web ストアに UPS 配送計算 API をインストールしていますが、価格が正しく表示されています。これはすばらしいことです。ただし、これらの価格を有用な形式にする方法が見つかりません。それらをphp変数として使用したい。
この例では、私のカートを cart.php と呼びます。
API は ups.php というファイルによって実行されています。
顧客がカートに商品を入れて郵便番号を入力すると、送信ボタンをクリックすると、ups.php スクリプトを実行してページにデータを表示する新しいカート ページに移動します (これは後で削除します)。そのため、バックグラウンドで実行できます)。これらのファイルのいずれかが .xml ファイルである場合、おそらく xml データを解析する方法や、php で simpleXML コマンドを使用する方法を学ぶことができます...しかし、それらは常に xml ファイルの場所を必要としているように見えますが、それは私が持っていません。私のPHPファイルの1つに含まれるXMLデータをPHP変数として使用できるようにする方法を知っている人はいますか?
ups.php のコードの一部を次に示します。
<?php
$ch = curl_init("https://www.ups.com/ups.app/xml/Rate");
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch,CURLOPT_POST,1);
curl_setopt($ch,CURLOPT_TIMEOUT, 60);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
$result=curl_exec ($ch);
echo ''. $result. '';
$data = strstr($result, '<?');
$xml_parser = xml_parser_create();
xml_parse_into_struct($xml_parser, $data, $vals, $index);
xml_parser_free($xml_parser);
$params = array();
$level = array();
foreach ($vals as $xml_elem) {
if ($xml_elem['type'] == 'open') {
if (array_key_exists('attributes',$xml_elem)) {
list($level[$xml_elem['level']],$extra) = array_values($xml_elem['attributes']);
} else {
$level[$xml_elem['level']] = $xml_elem['tag'];
}
}
if ($xml_elem['type'] == 'complete') {
$start_level = 1;
$php_stmt = '$params';
while($start_level < $xml_elem['level']) {
$php_stmt .= '[$level['.$start_level.']]';
$start_level++;
}
$php_stmt .= '[$xml_elem[\'tag\']] = $xml_elem[\'value\'];';
eval($php_stmt);
}
}
curl_close($ch);
return $params['RATINGSERVICESELECTIONRESPONSE']['RATEDSHIPMENT']['TOTALCHARGES']['MONETARYVALUE'];
}
?>
そして、この .php ファイルを実行したときのページでのテキスト出力は次のようになります。
HTTP/1.1 100 Continue HTTP/1.1 200 OK Date: Wed, 25 Jul 2012 20:27:46 GMT
Server: Apache X-Frame-Options: SAMEORIGIN Pragma: no-cache
Content-Length: 1589
X-Powered-By: Servlet/2.5 JSP/2.1
Vary: User-Agent Content-Type: application/xml Bare Bones Rate Request1.00011Success03Additional Handling has automatically been set on Package 1.Your invoice may vary from the displayed reference ratesLBS120.0USD65.56USD8.50USD74.06USD65.56USD8.50USD74.06120.0LBS120.0