1

cURL を使用して、次の XML を API に送信しています。

$xml = "<request type='auth' timestamp='$timestamp'>
                <merchantid>$merchantid</merchantid>
                <account>$account</account>
                <orderid>$orderid</orderid>
                <amount currency='$currency'>$amount</amount>
                <card> 
                    <number>$cardnumber</number>
                    <expdate>$expdate</expdate>
                    <type>$cardtype</type> 
                    <chname>$cardname</chname>

                </card> 
                <sha1hash>$sha1hash</sha1hash>
            </request>";

この XML のハードコーディングを避ける最善の方法は何ですか? XMLWriter を使用することを考えていましたが、変更されないので奇妙に思えます。

テンプレートを使用する必要がありますか? または、XMLWriter / Simple XML を使用して生成しますか?

4

2 に答える 2

0

テンプレートを使用する必要がありますか?

ここでは、実際に既にテンプレートを使用しています。

または、XMLWriter / Simple XML を使用して生成しますか?

XMLWriterSimpleXMLElementまた、XML を簡単に作成できるコンポーネントでもあります。あなたの特定のケースでは、最初に SimpleXML を使用します。

$xml = new SimpleXMLElement('<request type="auth"/>');
$xml['timestamp'] = $timestamp;

$xml->merchantid = $merchantid;
$xml->account    = $account;
$xml->orderid    = $orderid;
$xml->addChild('amount', $amount)['currency'] = $currency;

$card = $xml->addChild('card');
$card->number  = $cardnumber;
$card->expdate = $expdate;
$card->type    = $cardtype;
$card->chname  = $cardname;

$xml->sha1hash = $sha1hash;

XML がハードコーディングされていないことを確認してください。使用されているのは名前だけです。SimpleXML ライブラリは XML を作成します ( demo、ここでは読みやすくするために出力を美しくしています)。

<?xml version="1.0"?>
<request type="auth" timestamp="">
  <merchantid></merchantid>
  <account></account>
  <orderid></orderid>
  <amount currency=""/>
  <card>
    <number></number>
    <expdate></expdate>
    <type></type>
    <chname></chname>
  </card>
  <sha1hash></sha1hash>
</request>

ライブラリのおかげで、出力は常に有効な XML であり、ここで詳細を気にする必要はありません。さらにラップすることでさらに単純化できますが、ここにある非常に小さな XML では、これはあまり役に立たないと思います。

于 2013-10-22T21:48:05.373 に答える