首先;这个问题类似于另一个尚未解决的问题:call to magento soap api expires immediately
我正在研究基于XMLRPC的客户端 - 服务器模块。基于Magento的服务器有几个API方法暴露给基于Java的客户端。我在我的客户端使用标准的Java XMLRPC Jars。
我有一个“登录”调用来检索会话。然后我传递这个来做不同的电话。我检查了这会返回(看起来像什么)一个有效的会话。
Object result1 = client.execute("login", ob1);
session = (String) result1;
我使用此会话进行的下一次调用失败了:
org.apache.xmlrpc.XmlRpcException: Session expired. Try to relogin.
我已验证的内容:
api_session
表中的会话哈希值
api_session表
select CURRENT_TIME
显着不同
以下是我看到的内容:
mysql> select * from api_session limit 50;
+---------+---------------------+----------------------------------+
| user_id | logdate | sessid |
+---------+---------------------+----------------------------------+
| 5 | 2013-02-01 16:01:49 | 9099b50
| 5 | 2013-02-01 16:02:10 | 7312c1a
| 5 | 2013-02-01 16:05:43 | a6ce30c
+---------+---------------------+----------------------------------+
11 rows in set (0.00 sec)
mysql> select CURRENT_TIME;
+--------------+
| CURRENT_TIME |
+--------------+
| 14:58:03 |
+--------------+
答案 0 :(得分:1)
在上述失败中,我的登录方法接受了本文的提示:Irretrievably destroying data in Java
就像那篇文章所说,我正在将一个char数组传递给login方法。这最终导致将空凭据传递给login
方法。
流向那些可能不熟悉的人是
Mage/Api/Model/Server/Handler/Abstract.php
Mage/Api/Model/Session.php
我回到使用我的常规,非安全的方法直接将字符串传递给方法。那很有效!
编辑:当然这有一个缺点,我回到使用字符串而不是char []数组。如果我弄清楚如何做到这一点,我会更新答案。