2013-07-19 2 views
1

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

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

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

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

Based On Work From: 
- John Conde <[email protected]> 
- 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(); 
    } 
+0

Вы когда-нибудь это выясняли? Я имею дело с тем же вопросом. – doitlikejustin

ответ

0

Я, наконец, понял это после того, как вытащил волосы!

В библиотеке __construct есть ошибки в логике оператора if. Случается, что когда он проверяет параметры конфигурации, если ваш тестовый режим установлен на 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')); 
} 

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

Смежные вопросы