2017-06-08 6 views
2

私はカール使用してMagentoののSOAPのWebサービスへの呼び出しを行う場合には、セッションIDを返します。PHP Magentoの石鹸ログイン呼び出しが戻る空のセッションID

コール:

curl -vkS --data-binary @login.xml https://environment.dev/index.php/api/v2_soap/index 

マイlogin.xml:

<?xml version="1.0" encoding="utf-8"?> 
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <soap:Body> 
     <loginParam xmlns="urn:Magento"> 
      <username xmlns="">test</username> 
      <apiKey xmlns="">123456</apiKey> 
     </loginParam> 
    </soap:Body> 
</soap:Envelope> 

結果:

<?xml version="1.0" encoding="UTF-8"?> 
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:Magento"> 
    <SOAP-ENV:Body> 
     <ns1:loginResponseParam> 
      <result>da8a07fb2b28edfdcfd1e6436aba6a8a</result> 
     </ns1:loginResponseParam> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

の結果の文字列はセッションIDです。今

、私はプログラム的にセッションIDを取得しようとした場合:

$login = Mage::getModel('api/user')->login('test', '123456'); 

そして結果var_dump($login)NULLあるsessid以外満たさすべてのデータを持っている

protected $_data => array(13) { 
    'user_id' => 
    string(1) "3" 
    'firstname' => 
    string(4) "test" 
    'lastname' => 
    string(4) "test" 
    'email' => 
    string(17) "[email protected]" 
    'username' => 
    string(4) "test" 
    'api_key' => 
    string(65) "54a919b24f9bbaba5aa6b93c22705b7c:l53rKBtY57W42aCMbXfUi9SPNNIiLf4G" 
    'created' => 
    string(19) "2017-06-06 13:08:36" 
    'modified' => 
    string(19) "2017-06-06 13:10:53" 
    'lognum' => 
    string(2) "16" 
    'reload_acl_flag' => 
    string(1) "0" 
    'is_active' => 
    string(1) "1" 
    'sessid' => 
    NULL 
    'logdate' => 
    string(19) "2017-06-08 14:25:15" 

なぜカールで動作するのですが、マゼンタのメソッド呼び出しでは動作しないというヒント?

答えて

1

免責事項:私はMagentoが嫌い!あなたがしたいこと(テストを書こうとしていますか?)をするのは簡単ではありません。あなたの問題のための最善の解決策、IMHOは、あなたのアプリケーションに別のものを使用することです。

あなたの状況を変更することはできませんが、ここでは解決策になります。

間違ったモデルからセッションIDを取得しようとしています。セッションIDはapi/userモデル(Mage_Api_Model_User)ではなく、api/sessionモデル(Mage_Api_Model_Session)によって生成され、このモデルでは有効なセッションを保持するための準備が必要です。

$session = Mage::getSingleton('api/session'); 
$session->init('api', 'api'); 
$session->login('test', '123456'); 
$sessionId = $session->getSessionId(); 

お知らせ$session->init('api', 'api'):ここ

では、有効なセッションID(もちろん、すでにアプリをブートストラップと仮定)を得ることができる方法です。これは新しいセッションIDを生成する行ですが、正しい資格情報がログインに渡されるまで有効になりません($session->login('username', 'password'))。

+0

いいね!ありがとう! =) – deChristo

関連する問題