0

simplexml を使用して ResponseCode、ResponseDescription、Amount、および CardNumber を取得しようとしましたが、空の文字列が返され続けます。

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Body>
    <GetTransactionDataResponse xmlns="http://services.interswitchng.com/">
    <GetTransactionDataResult xmlns:a="http://schemas.datacontract.org/2004/07/WebPAY.Core.ServiceFramework.Contract" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
    <ResponseCode xmlns="http://schemas.datacontract.org/2004/07/TechQuest.Framework.ServiceFramework.Contract">61</ResponseCode><ResponseDescription xmlns="http://schemas.datacontract.org/2004/07/TechQuest.Framework.ServiceFramework.Contract">Exceeds Withdrawal Limit</ResponseDescription>
    <a:Amount>10000000</a:Amount>
    <a:CardNumber>3386</a:CardNumber>
    <a:LeadBankCbnCode i:nil="true"/><a:LeadBankName i:nil="true"/>
    <a:MerchantReference i:nil="true"/><a:PaymentReference i:nil="true"/>
    <a:RetrievalReferenceNumber i:nil="true"/><a:SplitAccounts/>
    <a:TransactionDate>0001-01-01T00:00:00</a:TransactionDate>
    </GetTransactionDataResult>
    </GetTransactionDataResponse>
    </s:Body>
    </s:Envelope>
4

2 に答える 2

0

Interswitch支払いシステムを使用している場合は、これを取得する必要があります。代わりにSoapClientを使用しますが、これを解析する必要がある場合は、次のようにします。

$sxe = new SimpleXmlElement($xml);
$sxe->registerXPathNamespace('s', 'http://schemas.xmlsoap.org/soap/envelope/');
$sxe->registerXPathNamespace('a', 'http://schemas.datacontract.org/2004/07/WebPAY.Core.ServiceFramework.Contract');
$sxe->registerXPathNamespace('i', 'http://www.w3.org/2001/XMLSchema-instance');

$list = array();
$list['code'] = (string) $sxe->children("s", true)->Body->children()->GetTransactionDataResponse->GetTransactionDataResult->ResponseCode;
$list['desciption'] = (string)  $sxe->children("s", true)->Body->children()->GetTransactionDataResponse->GetTransactionDataResult->ResponseDescription;
$list['amount']  = (string)  $sxe->xpath('//a:Amount');
$list['amount'] = (string)  $list['amount'][0];
$list['card']  = $sxe->xpath('//a:CardNumber');
$list['card'] = (string) $list['card'][0];

echo "<pre>";
print_r($list);

出力

Array
(
    [code] => 61
    [desciption] => Exceeds Withdrawal Limit
    [amount] => A
    [card] => 3386
)

ライブデモを見る

于 2012-10-07T17:08:04.737 に答える
0

SOAP応答について言及している場合は、Nusoapを参照してください。これは、xml との間のすべての変換を処理する PHP 用の Web サービス ライブラリであり、Web サービスを非常に簡単に使用できます。

私はそれを自分でたくさん使ってきました。

于 2012-10-07T15:25:34.373 に答える