首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SimpleXML问题

SimpleXML问题
EN

Stack Overflow用户
提问于 2011-04-14 19:25:19
回答 1查看 962关注 0票数 0

也许有人可以帮助我解决我在SimpleXML对象方面遇到的问题。

我正在与authorize.net CIM管理器集成,并发送客户配置文件。当我发送它时,原始的xml响应被传递给一个解析器并转换成一个SimpleXML对象。

以下是用于提交请求的代码:

代码语言:javascript
复制
$content =
        "<?xml version=\"1.0\" encoding=\"utf-8\"?>".
        "<createCustomerProfileRequest xmlns=\"AnetApi/xml/v1/schema/AnetApiSchema.xsd\">".
        MerchantAuthenticationBlock().
        "<profile>".
        //"<merchantCustomerId>".$userInsertedId."</merchantCustomerId>". // Your own identifier for the customer.
        "<description>'New User Purchase'</description>".
        "<email>" . $_GET["email"] . "</email>".
        "<paymentProfiles>".
        "<billTo>".
         "<firstName>".$_GET["firstname"]."</firstName>".
         "<lastName>".$_GET["lastname"]."</lastName>".
         "<address>".$_GET["street"]."</address>".
         "<city>".$_GET["city"]."</city>".
         "<state>".$_GET["state"]."</state>".
         "<zip>".$_GET["zip"]."</zip>".
         "<country>".$_GET["country"]."</country>".
         "<phoneNumber>".$_GET["phone"]."</phoneNumber>".
        "</billTo>".
        "<payment>".
         "<creditCard>".
          "<cardNumber>".$_GET["number"]."</cardNumber>".
          "<expirationDate>".$_GET["year"]."-".$_GET["month"]."</expirationDate>". // required format for API is YYYY-MM
          "<cardCode>".$_GET["code"]."</cardCode>".
         "</creditCard>".
         "</payment>".
        "</paymentProfiles>".
        "</profile>".
        "<validationMode>testMode</validationMode>". 
        "</createCustomerProfileRequest>";

        $CCresponse = send_xml_request($content);

        //echo($CCresponse);

        $parsedresponse = parse_api_response($CCresponse);

   function parse_api_response($content)
        {
            $parsedresponse = simplexml_load_string($content, "SimpleXMLElement", LIBXML_NOWARNING);
            if ("Ok" != $parsedresponse->messages->resultCode) 
            {
                echo "The operation failed with the following errors:<br>";
                foreach ($parsedresponse->messages->message as $msg) 
                {
                    echo "[" . htmlspecialchars($msg->code) . "] " . htmlspecialchars($msg->text) . "<br>";
                }
                    echo "<br>";
            }
            return $parsedresponse;
        }

当我执行以下操作时:

代码语言:javascript
复制
$parsedresponse = parse_api_response($CCresponse);
print_r($parsedresponse);

我得到以下输出:

代码语言:javascript
复制
SimpleXMLElement Object
(
[messages] => SimpleXMLElement Object
    (
        [resultCode] => Ok
        [message] => SimpleXMLElement Object
            (
                [code] => I00001
                [text] => Successful.
            )
    )
[customerProfileId] => 15642446
[customerPaymentProfileIdList] => SimpleXMLElement Object
    (
        [numericString] => 13865552
    )
[customerShippingAddressIdList] => SimpleXMLElement Object
    (
    )
[validationDirectResponseList] => SimpleXMLElement Object
    (
        [string] => 1|1|1|(TESTMODE) This transaction has been approved.|000000|P|0|none|Test transaction for ValidateCustomerPaymentProfile.|1.00|CC|auth_only||*****|******||****|*******|******|******|USA|1234567890||email@email.com|none|none|none|none|none|none|none|none|0.00|0.00|0.00|FALSE|none|207BCBBF78E85CF174C87AE286B472D2|||||||||||||*******|*******||||||||||||||||
    )
)
 )
)

因此,从这看起来一切都在工作。但当我尝试钻取SimpleXML对象,并执行以下操作时:

代码语言:javascript
复制
echo $code = (string) $parsedresponse->messages->resultCode;

我得到了一个"OkOk“的输出,它似乎在它上面运行了两次。这简直要把我逼疯了,我不知道这到底是怎么回事。有人能帮我指出正确的方向吗?这样我才能让它工作起来。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-14 19:53:16

也许您可以尝试使用xpath方法来导航SimpleXMLElement,如下所示:

代码语言:javascript
复制
$code = (string) $parsedresponse->xpath('messages/resultCode');
echo $code;
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5662492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档