There's a bug in AuthorizeNetCIM::_setPostString() method. On my PHP installation, the empty extraOptions tag is being rendered as
<extraOptions/>
That doesn't match the str_replace call. Since both versions are valid XML, here's a patch that uses the DOM API to add the CDATA section:
diff --git lib/AuthorizeNetCIM.php lib/AuthorizeNetCIM.php index 653e731..379ec02 100644 --- lib/AuthorizeNetCIM.php +++ lib/AuthorizeNetCIM.php @@ -339,8 +339,10 @@ class AuthorizeNetCIM extends AuthorizeNetRequest // Add extraOptions CDATA if ($this->_extraOptions) { - $this->_xml->addChild("extraOptions"); - $this->_post_string = str_replace("",'' . $this->_extraOptions . '', $this->_xml->asXML()); + $dom = dom_import_simplexml($this->_xml); + $extraOptions = $dom->appendChild($dom->ownerDocument->createElement("extraOptions")); + $extraOptions->appendChild($dom->ownerDocument->createCDATASection($this->_extraOptions)); + $this->_post_string = $this->_xml->asXML(); } }I don't see a public bug tracker anywhere, but if there is please point me to it and I'll file an issue.
02-21-2011 11:23 AM
diff --git lib/AuthorizeNetCIM.php lib/AuthorizeNetCIM.php index 653e731..379ec02 100644 --- lib/AuthorizeNetCIM.php +++ lib/AuthorizeNetCIM.php @@ -339,8 +339,10 @@ class AuthorizeNetCIM extends AuthorizeNetRequest // Add extraOptions CDATA if ($this->_extraOptions) { - $this->_xml->addChild("extraOptions"); - $this->_post_string = str_replace("<extraOptions></extraOptions>",'<extraOptions><![CDATA[' . $this->_extraOptions . ']]></extraOptions>', $this->_xml->asXML()); + $dom = dom_import_simplexml($this->_xml); + $extraOptions = $dom->appendChild($dom->ownerDocument->createElement("extraOptions")); + $extraOptions->appendChild($dom->ownerDocument->createCDATASection($this->_extraOptions)); + $this->_post_string = $this->_xml->asXML(); } }
02-21-2011 11:40 AM
I can confirm this.
There is a bug.
The simplier way to fix it is to change:
$this->_xml->addChild("extraOptions");
to
$this->_xml->addChild("extraOptions", '');
Weird thing that Authorize.net still didn't do anything about it.
05-19-2012 11:47 AM