I am getting this error
The 'AnetApi/xml/v1/schema/AnetApiSchema.xsd:amount' element is invalid - The value '' is invalid according to its datatype 'Decimal' - The string '' is not a valid Decimal value.
From this code:
<?xml version="1.0" encoding="utf-8"?>
<getHostedPaymentPageRequest xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd">
<merchantAuthentication><name>myName</name><transactionKey>myKey</transactionKey></merchantAuthentication>
<transactionRequest>
<transactionType>authCaptureTransaction</transactionType>
<amount>0.50</amount>
<order>
<invoiceNumber>INV-12345</invoiceNumber>
<description>Product Description</description>
</order>
<lineItems>
<lineItem>
<itemId>1</itemId>
<name>vase</name>
<description>Cannes logo </description>
<quantity>18</quantity>
<unitPrice>45.00</unitPrice>
</lineItem>
</lineItems>
<poNumber>456654</poNumber>
<customer>
<id>99999456654</id>
<email>my@email.com</email>
</customer>
<billTo>
<firstName>Ellen</firstName>
<lastName>Johnson</lastName>
<company>Souveniropolis</company>
<address>14 Main Street</address>
<city>Pecan Springs</city>
<state>TX</state>
<zip>44628</zip>
<country>USA</country>
<phoneNumber>1231231234</phoneNumber>
</billTo>
<customerIP>192.168.1.1</customerIP>
<userFields>
<userField>
<name>sessionID</name>
<value>ABC123</value>
</userField>
</userFields>
</transactionRequest>
</getHostedPaymentPageRequest>
It runs fine when I test it on http://developer.authorize.net/api/reference/index.html#payment-transactions-get-an-accept-payment-p... but every time I run the code it comes back with an error.
Everything was working yesterday and now nothing works.
Solved! Go to Solution.
09-14-2017 11:41 AM
In this case the response is XML, so it is even easier. Copy the source from the page at : https://nexwebhost.com/authorizenet/get-hosted.html, change the Ajax post url to your own PHP script, which I have already given you, as well as any other other domain specific variables. Done.
09-16-2017 08:54 AM
How are you populating and posting the XML? Based on the error, it looks like the amount is apparently not getting populated in your XML and is being posted as an empty string.
09-14-2017 12:48 PM - edited 09-14-2017 12:50 PM
The XML is static, right now I am just trying to get the test XML to generate a token. I am sending it exactly as it came from Github examples just with the name and transaction key replaced.
09-14-2017 12:58 PM
09-14-2017 01:04 PM
<?php
$xmlStr = <<<XML
<?xml version="1.0" encoding="utf-8"?>
<getHostedPaymentPageRequest xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd">
<merchantAuthentication></merchantAuthentication>
<transactionRequest>
<transactionType>authCaptureTransaction</transactionType>
<amount>0.50</amount>
<order>
<invoiceNumber>INV-12345</invoiceNumber>
<description>Product Description</description>
</order>
<lineItems>
<lineItem>
<itemId>1</itemId>
<name>vase</name>
<description>Cannes logo </description>
<quantity>18</quantity>
<unitPrice>45.00</unitPrice>
</lineItem>
</lineItems>
<poNumber>456654</poNumber>
<customer>
<id>99999456654</id>
<email>my@email.com</email>
</customer>
<billTo>
<firstName>Ellen</firstName>
<lastName>Johnson</lastName>
<company>Souveniropolis</company>
<address>14 Main Street</address>
<city>Pecan Springs</city>
<state>TX</state>
<zip>44628</zip>
<country>USA</country>
<phoneNumber>1231231234</phoneNumber>
</billTo>
<customerIP>192.168.1.1</customerIP>
<userFields>
<userField>
<name>sessionID</name>
<value>ABC123</value>
</userField>
</userFields>
</transactionRequest>
</getHostedPaymentPageRequest>
XML;
$xml = simplexml_load_string($xmlStr, 'SimpleXMLElement', LIBXML_NOWARNING);
// $xml = new SimpleXMLElement($xmlStr);
$xml->merchantAuthentication->addChild('name', 'myName');
$xml->merchantAuthentication->addChild('transactionKey', 'myTransaction');
$url = "https://apitest.authorize.net/xml/v1/request.api";
try { //setting the curl parameters.
$ch = curl_init();
if (false === $ch) {
throw new Exception('failed to initialize');
}
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/xml'));
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml->asXML());
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 300);
// The following two curl SSL options are set to "false" for ease of development/debug purposes only.
// Any code used in production should either remove these lines or set them to the appropriate
// values to properly use secure connections for PCI-DSS compliance.
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); //for production, set value to true or 1
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); //for production, set value to 2
curl_setopt($ch, CURLOPT_DNS_USE_GLOBAL_CACHE, false);
//curl_setopt($ch, CURLOPT_PROXY, 'userproxy.visa.com:80');
$content = curl_exec($ch);
$content = str_replace('xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd"', '', $content);
$hostedPaymentResponse = new SimpleXMLElement($content);
if (false === $content) {
throw new Exception(curl_error($ch), curl_errno($ch));
}
curl_close($ch);
} catch (Exception $e) {
trigger_error(sprintf('Curl failed with error #%d: %s', $e->getCode(), $e->getMessage()), E_USER_ERROR);
}
function thisPageURL()
{
$pageURL = 'http';
if ($_SERVER["HTTPS"] == "on") {
$pageURL .= "s";
}
$pageURL .= "://";
if ($_SERVER["SERVER_PORT"] != "80") {
$pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];
} else {
$pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];
}
$pageLocation = str_replace('index.php', '', $pageURL);
return $pageLocation;
}
09-14-2017 01:07 PM
I'm getting a successful response and a token, every time running that code.
<?xml version="1.0" encoding="utf-8"?><getHostedPaymentPageResponse xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" ><messages><resultCode>Ok</resultCode><message><code>I00001</code><text>Successful.</text></message></messages><token>xO+JtNrIpVtdaGEl+...</token></getHostedPaymentPageResponse>
Do you have another version, you may actually be running?
09-14-2017 01:36 PM
I am printing the XML to the screen so I can see the request so I am pretty sure that is what it is sending.
09-14-2017 01:48 PM
Try the following:
<?php $xmlContent = '<getHostedPaymentPageRequest xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd"> <merchantAuthentication> <name>YOUR_LOGIN</name> <transactionKey>YOUR_TRANSACTION_KEY</transactionKey> </merchantAuthentication> <transactionRequest> <transactionType>authCaptureTransaction</transactionType> <amount>0.50</amount> <order> <invoiceNumber>INV-12345</invoiceNumber> <description>Product Description</description> </order> <lineItems> <lineItem> <itemId>1</itemId> <name>vase</name> <description>Cannes logo </description> <quantity>18</quantity> <unitPrice>45.00</unitPrice> </lineItem> </lineItems> <poNumber>456654</poNumber> <customer> <id>99999456654</id> <email>my@email.com</email> </customer> <billTo> <firstName>Ellen</firstName> <lastName>Johnson</lastName> <company>Souveniropolis</company> <address>14 Main Street</address> <city>Pecan Springs</city> <state>TX</state> <zip>44628</zip> <country>USA</country> <phoneNumber>1231231234</phoneNumber> </billTo> <customerIP>192.168.1.1</customerIP> <userFields> <userField> <name>sessionID</name> <value>ABC123</value> </userField> </userFields> </transactionRequest> </getHostedPaymentPageRequest>'; $url = "https://apitest.authorize.net/xml/v1/request.api"; try { //setting the curl parameters. $ch = curl_init(); if (false === $ch) { throw new Exception('failed to initialize'); } curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/xml')); curl_setopt($ch, CURLOPT_POSTFIELDS, $xmlContent); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 300); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_DNS_USE_GLOBAL_CACHE, false); $content = curl_exec($ch); $content = str_replace('xmlns="AnetApi/xml/v1/schema/AnetApiSchema.xsd"', '', $content); $hostedPaymentResponse = new SimpleXMLElement($content); echo $content; if (false === $content) { throw new Exception(curl_error($ch), curl_errno($ch)); } curl_close($ch); } catch (Exception $e) { trigger_error(sprintf('Curl failed with error #%d: %s', $e->getCode(), $e->getMessage()), E_USER_ERROR); }
09-14-2017 02:33 PM
Ok, this is what was displayed when I used that code
OkI00001Successful./5Fg9pKUIZnb5Qnrvw3+DS0/HUwSDxvDNGOhJr+9jMBGPsVcxWsKiG5myspomGGPLBrENxuO/+ZP3PsKFiCkJJ7UJsXUQGUGYmJq47JarE2CJnnz5+bl8Cbt8v+t1/Hk2qiJ3c7IPFj9JnP3fShLQLL7mzyfXG9BW5+8cCRBiXHdHWNjUgZsnJWULASy7xLOmavkSjp5EVlTVmmfzVqf8DgKTEsxXzZfiFJZX90ahCJfZbA3U6/UPrQyCsTINdQm+4nt9UtFCSL22gVWgzyAEAIYwbTOUAU+lwqHkTmY+zJw6D+5HYdxrddjCuSZ7BBDE4+sBJMT/GC9OEkPQeFIrWOf2PHaXyUG/pdAC63UcGECpw4aQwOq+LKtE2Z5nyisuRoXjypZ8hDqOmdQTvAvVc4Fb1zivPf/4UnO3O/VxDiAfJXqazdhForDebn3R4GY49N1WoxTdc5OSuQOavMm9vMP9y0mWgTt/xqr9Sg6+G+YZJJy8jjwTIhbFMQCOG7EOjKEuAeMtaEret3rc3B+arjpjp4GgVfwD2DtamVeGYe0/DOOte6ABjiw3qtKD8090Vp8NnlgmosD6Dfh3guBUGzJOBE0i5Qx4b4wxGcyRi7yaNcjp5rnlHBeh0+MWYf/CWPDSGc6duUzp6F6uUHWmwly9/1sxbukC7jhSrcuVXm5xaTNgk9OViPVNj1iAq/xxCmjKe10eX/5fIxRme7AVtd6wxM96jfWBQq3ab/YgO77b8tFb0+L6l2JBkQLfexWp//W9l9mcumAJefSa38oXEvWlu02QbbuHy7R7a/N4Dx4rdte5BYQJbav6sHYedwKUK/GJxISRRf410/fiTK4VJQ0PcFFqoTHOG8briIYqcQC3IFEPoFMLL/zZ3kliGfNoM1T7Q0+N2UVke8e/u76f9RX7CFAksfnyF1rP0KwTOyuZtEFS13J1fiFMBte3brnZy1+hlDVkxMiIR3Vr7dtbfrddpTA6bVhqPwCqktBLrBGDhlII0U04apN59fSrv1oIrbFOEkYGx1iLegyUp26XycwIogUMIkAFItXgbsQZnQLHXH0qsx4/f0o9/5sz2QcDaI5HUwZ1hb3aYwbCuLACFN6E063AsUetPuZV4qsFQzw95l33UZ1En5LkjmROsDOqZbdhr6JtC6QZXU+7Iv4jC/n4vtE+jh47lIwYOb2plEIFIQ/Rqq6oI/OxD+WfHVy/aRkfu6vo5FG2WpxZl/lrdUmbsJFbE4X1ds5DTMj/1H/IAN3Z2GONuuT8oxbuYB7BdgMhg85hPJN0KKmTFf5+ET6M1pmvm7Npyc4PoZnYgFhbfwuzBBsRXERQe0NZs8fbZETPUxJnLLkJVEnyoFT1w==.6xSh8CL39
09-14-2017 02:38 PM
Great. It works, so maybe something to do with your PHP version or configuration related to asXML(). Because that is the only difference in your posted code and the one that works on your system.
09-14-2017 02:46 PM