Front End Entry Form - Proper Syntax for Custom Fields
The second parameter of the input function is the name attribute, which you currently have as contactName. Assigning it in the options like you have does not override the initial supplied parameter. Try this:
{{ input('text', 'fields[contactName]', entry.contactName, {
    id: 'contactName'
}) }}