I am working with GoEmerchant's XML Gateway. The responses are returned as XML. 
A simple way to convert this into usable information is using 
simplexml_load_string() (part of the SimpleXML extension). This isn't working 
for me however since it returns each node with a numbered index and since 
GoEmerchant's responses are different depending on the type of transaction and 
whether it is successful or not, I cannot address the nodes by their order (or 
index) or might grab the wrong one.

So, I used the XML Parser extension and came up with this:

$p = xml_parser_create();
xml_parse_into_struct($p, $resp, $vals, $index);
xml_parser_free($p);

// extract the fields
foreach($index['FIELD'] as $field) {
        $fields[$vals[$field]['attributes']['KEY']] = $vals[$field]['value'];
}


…where $resp is the XML passed in and $fields are the nodes I want.


Here is an example of the XML:

<?xml version="1.0" encoding="utf-8"?>
<RESPONSE>
  <FIELDS>
    <FIELD KEY="status">1</FIELD>
    <FIELD KEY="auth_code">DEMO92</FIELD>
    <FIELD KEY="auth_response">APPROVED</FIELD>
    <FIELD KEY="avs_code">X</FIELD>
    <FIELD KEY="cvv2_code"> </FIELD>
    <FIELD KEY="order_id">2143317674</FIELD>
    <FIELD KEY="reference_number">29624</FIELD>
    <FIELD KEY="error" />
  </FIELDS>
</RESPONSE>


Here is the $fields array that I produce:

Array
(
    [status] => 1
    [auth_code] => DEMO92
    [auth_response] => APPROVED
    [avs_code] => X
    [cvv2_code] =>  
    [order_id] => 2143317674
    [reference_number] => 29624
    [error] => 
)


Any better ways to do this?

_______________________________________________

UPHPU mailing list
[email protected]
http://uphpu.org/mailman/listinfo/uphpu
IRC: #uphpu on irc.freenode.net

Reply via email to