/**
  * @param Hypercharge\IUrl $url
  * @param Hypercharge\IRequest $request
  * @return Hypercharge\IResponse
  * @throws Hypercharge\Error
  */
 public function call(IUrl $url, IRequest $request)
 {
     $curl = Config::getFactory()->createHttpsClient(Config::getUser(), Config::getPassword());
     $serializer = new XmlSerializer();
     $responseStr = $curl->xmlPost($url->get(), $serializer->toXml($request));
     $responseDom = new \SimpleXMLElement($responseStr);
     return $request->createResponse(XmlSerializer::dom2hash($responseDom));
 }
    function test_dom2hash_attributes_in_multiple_nodes()
    {
        $xml = '<?xml version="1.0" encoding="UTF-8"?>
<root>
	<one a="2.1 attribute">
		<two>2.1</two>
	</one>
	<one a="2.2 attribute">
		<two>2.2</two>
	</one>
</root>
';
        $dom = new \SimpleXMLElement($xml);
        $h = XmlSerializer::dom2hash($dom);
        $this->assertEqual($h, array('root' => array('one' => array(array('two' => '2.1', '__attributes' => array('a' => '2.1 attribute')), array('two' => '2.2', '__attributes' => array('a' => '2.2 attribute'))))), '%s' . print_r($h, true));
    }
 /**
  * @private
  * @param string $action
  * @param string $channelToken
  * @param string $unique_id
  * @return Hypercharge\Transaction
  */
 static function request($action, $channelToken, $unique_id)
 {
     $url = new TransactionUrl(Config::ENV_SANDBOX, $channelToken, $action);
     $url = $url->get() . '/' . $unique_id;
     $curl = new Curl(Config::getUser(), Config::getPassword());
     $responseStr = $curl->xmlPost($url, '');
     $responseDom = new \SimpleXMLElement($responseStr);
     // dummy
     $request = new TransactionRequest(array('transaction_type' => 'sale'));
     return $request->createResponse(XmlSerializer::dom2hash($responseDom));
 }
 function parseResponseFixture($xmlFile)
 {
     $dom = new \SimpleXMLElement($this->fixture($xmlFile));
     return XmlSerializer::dom2hash($dom);
 }