- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
Accepted Solutions
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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.
Certified Authorize.net developers
09-16-2017 08:54 AM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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.
Certified Authorize.net developers
09-14-2017 12:48 PM - edited 09-14-2017 12:50 PM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Certified Authorize.net developers
09-14-2017 01:04 PM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
<?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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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?
Certified Authorize.net developers
09-14-2017 01:36 PM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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); }
Certified Authorize.net developers
09-14-2017 02:33 PM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
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.
Certified Authorize.net developers
09-14-2017 02:46 PM