0

私の人生の間、私はこの石鹸パケットのどのプロパティにもアクセスできない(またはそれらが何であるかさえ理解できない)理由を理解できません。マーキュリーから返ってきたものは何も使えません。私は運が悪かった他のいくつかの同様の質問を読み通しました。これは私の無知の産物に過ぎないと確信していますが、どんな助けでも大歓迎です。

$transactionInfo = new MercuryPaymentHandler($paymentID);
$returnValue = $transactionInfo->verifyPayment();
$xml = new SimpleXMLElement($returnValue);
var_dump(get_object_vars($xml));

戻り値:

array(0) { }

でも、これ:

$transactionInfo = new MercuryPaymentHandler($paymentID);
$returnValue = $transactionInfo->verifyPayment();
$xml = new SimpleXMLElement($returnValue);
echo $xml->asXML();

戻り値:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
    <VerifyPaymentResponse xmlns="http://www.mercurypay.com/">
        <VerifyPaymentResult>
            <ResponseCode>0</ResponseCode>
            <Status>Approved</Status>
            <StatusMessage>AP</StatusMessage>
            <DisplayMessage>Your transaction has been approved.</DisplayMessage>               
            <AvsResult/>
            <CvvResult>M</CvvResult>
            <AuthCode>000027</AuthCode>
            <Token>ItIu8ayb9ZyMcBjHUkyHS0krnFVf6esnfs6tULuAo2giERIQACMQAgyc</Token>
            <RefNo>0028</RefNo>
            <Invoice>48</Invoice>
            <AcqRefData>KbMCC2110080622 </AcqRefData>
            <CardType>M/C</CardType><MaskedAccount>xxxxxxxx6781</MaskedAccount>
            <Amount>7</Amount>
            <TaxAmount>0</TaxAmount>
            <TransPostTime>2012-06-22T21:10:08.65</TransPostTime>
            <CardholderName>Test-User</CardholderName>
            <AVSAddress/>
            <AVSZip/>
            <TranType>Sale</TranType>
            <PaymentIDExpired>true</PaymentIDExpired>
            <CustomerCode/>
            <Memo>Mighty Wash 2.0</Memo>
            <AuthAmount>7</AuthAmount>
            <VoiceAuthCode/>
            <ProcessData>|00|600550672000</ProcessData>
            <OperatorID/>
            <TerminalName/>
        </VerifyPaymentResult>
        </VerifyPaymentResponse>
    </soap:Body>
</soap:Envelope>

何が得られますか?

アップデート

PHPのネイティブクラスを使用してこれを理解したことはありませんが、CakePHPsのXMLクラスを使用すると非常に簡単でした。

4

2 に答える 2

1
  1. SimpleXMLElementをダンプすることはできません
  2. SimpleXMLElementの背後にある考え方は、各ノードに階層的にアクセスできる必要があるということです。つまり、基本的にはRootNode-> FirstChildNode->FirstChildNodeOfTheFirstChildNode->AndSoOnです。
  3. デフォルトでは、SimpleXMLElementを文字列または変数と連結すると、__ toString()メソッドが呼び出されます。
于 2012-06-23T02:31:43.817 に答える
1

問題は、内部的にSimpleXMLElementは些細なオブジェクトとして保存されないことです。基本的に、アクセスするプロパティを知っている必要があり、内部構造からその場で結果を構成します。あなたの場合、次のようなものを使用できます:http: //php.net/manual/en/simplexmlelement.xpath.php(例を参照)データを効率的に抽出します。また、あなたの質問に厳密に答えるために、ここにあなたが使うことができるものがあります:http ://www.php.net/manual/en/simplexmlelement.attributes.php

于 2012-06-23T02:32:12.020 に答える