The Authorize.net API currently requires the cardholder's first and last names to be sent separately.
As HTML forms commonly only request the cardholder name using a single text field, rather than divided into two fields for a separated first and last name, I would recommend providing an optional field for the combined cardholder name.
Until that time, or if this suggestion is declined, I would recommend adding some additional code to the API. If only the first name or last name is given, then take that variable and split it into two, such as shown in the code below, which is assuming that the form field "name_on_card" has both the first and last names. The code does not take a middle initial into consideration, nor a first name with a space (such as "Mary Jo").
<?php if($name_on_card>'') { $name_on_card = post('name_on_card'); $card_name_arr = explode(' ', trim($name_on_card)); $card_first_name = $card_name_arr[0]; $card_last_name = trim(str_replace($card_first_name, '', $name_on_card)); $billto->setFirstName($card_first_name); $billto->setLastName($card_last_name); } ?>