Authorize.net CIM - Почему имя пользователя API неверно или отсутствует

Я создал приложение, используя authorize.net CIM. При использовании приложения в тестовом режиме все работает нормально. Когда я переключаюсь из тестового режима в режим реального времени и вставляю правильный идентификатор пользователя и ключ транзакции, он говорит: Имя пользователя API неверно или отсутствует.

Это не имеет никакого смысла. Я на 100% уверен, что имя пользователя API и ключ транзакции верны.

Я использую библиотеку CIM codeigniter. Вот код, касающийся настройки и инициализации CIM...

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
/*
By: Spicer Matthews <spicer@cloudmanic.com>
Company: Cloudmanic Labs, LLC
Website: http://www.cloudmanic.com

Based On Work From: 
- John Conde <johnny@johnconde.net>
- http://www.communitymx.com/content/article.cfm?page=4&cid=FDB14
*/

class AuthorizeCimLib
{
    private $_CI; 
    private $_loginname;
    private $_loginkey;
    private $_response;
    private $_resultCode;
    private $_responseCode;
    private $_responseText;
    private $_success;
    private $_error;
    private $_url;
    private $_parsedresponse;
    private $_xml;
    private $_call;
    private $_responsecall;
    private $_directresponse;
    private $_items = array();
    private $_params = array();
    private $_validationmode = 'liveMode';
    private $_errormsg = '';
    private $_loginhost = 'api.authorize.net';
    private $_testhost = 'apitest.authorize.net';
    private $_loginpath = '/xml/v1/request.api';

    //
    // Construct..... 
    //
    function __construct()
    {
        $this->_CI =& get_instance();
        $this->_set_url();
        $this->_set_default_params();

        // If the config is setup properly use that to initialize
        $this->_CI->config->load('authorizenet');

        if($this->_CI->config->item('authorizenetname') && 
                $this->_CI->config->item('authorizenetkey') &&
                $this->_CI->config->item('authorizenettestmode'))
        {
            $this->initialize($this->_CI->config->item('authorizenetname'), $this->_CI->config->item('authorizenetkey'), $this->_CI->config->item('authorizenettestmode'));
        }

        log_message('debug', "AuthorizeCimLib Class Initialized");
    }

    //
    // Call this function to setup the library variables. Such as API keys.
    //
    public function initialize($name, $key, $testmode = FALSE)
    {
        // Are we in test mode??
        if($testmode)
        {
            $this->_set_testmode();
        }

        // Setup login names and keys.
        $this->_loginname = $name;
        $this->_loginkey = $key;
    }

    //
    // Set validation mode.
    //
    public function set_validationmode($mode)
    {
        $types = array('none', 'testMode', 'liveMode', 'oldLiveMode');

        if(in_array($mode, $types))
        {
            $this->_validationmode = $mode;
            return 1;
        } 
        else
        {
            log_message('debug', "AuthorizeCimLib Not A Valid Test Mode");
            return 0;
        }
    }

    //
    // Get validation mode.
    //
    public function get_validationmode()
    {
        return $this->_validationmode;
    }

    //
    // Set Parameters to send to Authorize.net
    //
    public function set_data($field, $value)
    {
        $this->_params[$field] = $value;
    }

    //
    // C;ear Parameters data
    //
    public function clear_data()
    {
        $this->_params = array();
        $this->_set_default_params();
    }

1 ответ

Я наконец понял это после нескольких часов, потянув за волосы!

В логике оператора if есть некоторые ошибки __construct из библиотеки класса. Что происходит, когда он проверяет параметры конфигурации, если ваш тестовый режим установлен на FALSE тогда он не будет инициализирован... потому что тогда вы передаете FALSE значение для оператора if (это происходит около строки 49 в моем файле). То, что вы можете сделать, чтобы это исправить, это просто убрать эту проверку "тестового режима" из оператора if.

Вот как это будет выглядеть:

if($this->_CI->config->item('authorizenetname') && $this->_CI->config->item('authorizenetkey'))
{
    $this->initialize($this->_CI->config->item('authorizenetname'), $this->_CI->config->item('authorizenetkey'), $this->_CI->config->item('authorizenettestmode'));
}

Я знаю, что этот ответ немного запоздал в игре, но надеюсь, что он поможет.

Другие вопросы по тегам