Here is the situation:
I'm trying to build a custom report with the API for my client. I do not have SSH access, so I'm trying to load the SDK over FTP.
Initially I tried just loading the SDK files from github, but could not get that to work. Finally, I loaded composer on a different server, installed the SDK with composer, copied down the 'vendor' directory and loaded that into my project.
Now, I get this error:
Fatal error: Class 'Goetas\Xsd\XsdToPhp\Jms\Handler\BaseTypesHandler' not found in /path/to/project/vendor/authorizenet/authorizenet/lib/net/authorize/api/controller/base/ApiOperationBase.php on line 79
According to recordnotfound.com, there was an open issue for this exact problem but it has been closed. However, I can't find anything on how the issue was resolved.
EDIT: Found the closed ticket on github. LINK
Just for fun, here is the code I'm trying to run:
<?php error_reporting(-1); ini_set('display_errors', 'On'); date_default_timezone_set('America/Chicago'); require 'vendor/autoload.php'; use net\authorize\api\contract\v1 as AnetAPI; use net\authorize\api\controller as AnetController; $start_datetime = ""; $end_datetime = ""; $start = '2016-05-01 00:00:00'; $end = '2016-05-31 00:00:00'; function create_authnet_timestamp($userdate){ $stamp = strtotime($userdate); $date = date("Y-m-d", $stamp); $time = date("H:i:s", $stamp); $datetime = $date."T".$time."Z"; return $datetime; } if($start != '' && $start != NULL && is_real_date($start) ){ $start_datetime = create_authnet_timestamp($start); } if($end != '' && $end != NULL && is_real_date($end) ){ $end_datetime = create_authnet_timestamp($end); } function getSettledBatchList($startDate, $endDate) { $api_id = "MY_API_ID"; $account_key = "MY_TRANSACTION_ID"; $batch_array = array(); $start_dt = new DateTime($startDate); $end_dt = new DateTime($endDate); $merchAuth = new AnetAPI\MerchantAuthenticationType(); $merchAuth->setName($api_id); $merchAuth->setTransactionKey($account_key); $request = new AnetAPI\GetSettledBatchListRequest(); $request->setMerchantAuthentication($merchAuth); $request->setIncludeStatistics(true); $request->setFirstSettlementDate($start_dt); $request->setLastSettlementDate($end_dt); $controller = new AnetController\GetSettledBatchListController($request); $response = $controller->executeWithApiResponse( \net\authorize\api\constants\ANetEnvironment::SANDBOX); if(($response != null) && ($response->getMessages()->getResultCode() == "Ok")){ return $response; }else{ $errorMessages = $response->getMessages()->getMessage(); echo "Response : " . $errorMessages[0]->getCode() . " " .$errorMessages[0]->getText() . "\n"; return false; } } $api_response = getSettledBatchList($start_datetime, $end_datetime); var_dump($api_response); ?>
I'm starting to pull my hair out a little. Can anyone help?
Solved! Go to Solution.
05-22-2016 01:51 PM - edited 05-22-2016 02:00 PM
Hey Everybody, in case you missed it, there has been a patch to the composer.json released that solves this issue.
So update your composer.json with the new lines, run "composer update" and you're good to go.
05-29-2016 07:05 AM
Same for me. I followed the steps judiciously, use composer, update with no errors but then "PHP Fatal error: Class 'Goetas\Xsd\XsdToPhp\Jms\Handler\BaseTypesHandler' not found in /var/www/html... /lib/net/authorize/api/controller/base/ApiOperationBase.php on line 82 ", somebody have any clue how to address this.?
05-23-2016 01:10 PM
IF you look in the classmap
'Goetas\Xsd\XsdToPhp\Jms\Handler\BaseTypesHandler' => $vendorDir . '/goetas/xsd2php/lib/Jms/Handler/BaseTypesHandler.php', 39 'Goetas\Xsd\XsdToPhp\Jms\Handler\XmlSchemaDateHandler' => $vendorDir . '/goetas/xsd2php/lib/Jms/Handler/XmlSchemaDateHandler.php',
There's files missing from goetas/xsd2php package.
I tried googling the missing files and couldn't find it...
05-24-2016 07:52 AM
I've just begun work on converting to this API, and I am also stymied by this error.
05-26-2016 09:48 AM
Hey Everybody, in case you missed it, there has been a patch to the composer.json released that solves this issue.
So update your composer.json with the new lines, run "composer update" and you're good to go.
05-29-2016 07:05 AM
I followed these intstructions but it did not fix the problem for me. I also attempted to delete the goetas/xsd2php folder and re-run update and it did not pull in the needed files. Is there a special setting in composer that I need to have to get this to work? Or any other suggestions? This is pretty critical to a project I am working on. I hope the developers at Authorize.Net will fix this ASAP.
06-15-2016 06:36 AM
Hey BVB,
Can you post the contents of your composer.json file? I'm guessing that's where the issue is. That was where my problem was.
06-15-2016 06:40 AM
I was able to fix this. I made a mistake when trying to fix this I attempted to edit the authorizenet package's composer.json file. Part of the instructions for installing this package (https://github.com/AuthorizeNet/sdk-php) are to put that line in the composer.json file of your app. So, essentially that line is in two spots if you did it the way I did - in your own composer.json and the authorizenet package's composer.json. This worked for me after I updated the referenced line in both composer.json files.
06-15-2016 06:45 AM
Thanks for the quick response phpjayhawk! Also, in my post above that link does not work because it attempted to include the ) at the end of the URL. Here is a working link: https://github.com/AuthorizeNet/sdk-php
06-15-2016 06:48 AM
No problem at all. Glad you got it worked out!
06-15-2016 06:51 AM