3

Suddenly, all of our Magento stores stopped saving auth.net payments. The payment would go through and show up in auth.net, but never actually saved to Magento.

In the AJAX request which finishes the checkout and charges the card, there is this error:

Call to a member function setMessage() on null in app/code/core/Mage/Paygate/Model/Authorizenet.php on line 1449

Turning on debug mode revealed that Magento isn't parsing the response properly. All fields are empty:

[result] => Array
    (
        [response_code] => 1
        [response_subcode] => 0
        [response_reason_code] => 0
        [response_reason_text] => 
        [approval_code] => 
        [avs_result_code] => 
        [transaction_id] => 
        [invoice_number] => 
        [description] => 
        [amount] => 
        [method] => 
        [transaction_type] => 
        [customer_id] => 
        [md5_hash] => 
        [card_code_response_code] => 
        [c_av_vresponse_code] => 
        [split_tender_id] => 
        [acc_number] => 
        [card_type] => 
        [requested_amount] => 
        [balance_on_card] => 
    )
1

Authorize.net had security update around REST api that was excluding some characters from API responses. Looks like this update limits use of delimiter to onyl 1 character.

Modify Mage_Paygate_Model_Authorizenet class and set delimited to 1 character (usually you want to use non-common character)

e.g const RESPONSE_DELIM_CHAR = '^';

0

The issue appears to be that Authorize.net stopped supporting multi-character delimiters, and Magento 1 uses (~) as the delimiter (see source).

The quick fix is to modify the delimiter. I used backslash \ and Auth.net started working again.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.