2012-11-05 32 views
3

我嘗試過很多種不同的方法,使用XMLRPC來調用「cart_paymant.methodAPIMagento,但始終失敗。如何在Android中使用XMLRPC調用magento的「cart_payment.method」API

下面是我用來稱之爲的代碼。

Map<String,String> map = new HashMap<String,String>(); 
map.put("method","checkmo"); 
//map.put("po_number",null); 
//map.put("cc_cid", null); 
//map.put("cc_owner",null); 
//map.put("cc_number",null); 
//map.put("cc_type",null); 
//map.put("cc_exp_year",null); 
//map.put("cc_exp_month",null); 


Object[] paymentMethod=new Object [] {map}; 
Object param1[]=new Object[]{shoppingCartId,paymentMethod}; 
Object param2[]=new Object[]{Utils.sessionId,"cart_payment.method",param1}; 

try 
{ 
    Boolean ans=(Boolean)client.callEx("call", param2); 
    Log.i("Payment Method Setting : ", ""+ans); 
} 
catch (XMLRPCException e) { 
    e.printStackTrace(); 
    return 0; 
} 

例外,我得到:

java.io.IOException: Cannot serialize null 
at org.cws.magentoAnd.xmlrpc.XMLRPCSerializer.serialize(XMLRPCSerializer.java:99) 
at org.cws.magentoAnd.xmlrpc.XMLRPCSerializer.serialize(XMLRPCSerializer.java:89) 
at org.cws.magentoAnd.xmlrpc.XMLRPCSerializer.serialize(XMLRPCSerializer.java:72) 
at org.cws.magentoAnd.xmlrpc.XMLRPCSerializer.serialize(XMLRPCSerializer.java:72) 
at org.cws.magentoAnd.xmlrpc.XMLRPCCommon.serializeParams(XMLRPCCommon.java:36) 
at org.cws.magentoAnd.xmlrpc.XMLRPCClient.methodCall(XMLRPCClient.java:253) 
at org.cws.magentoAnd.xmlrpc.XMLRPCClient.callEx(XMLRPCClient.java:174) 

僅供參考,我也張貼提供基於Web的PHP代碼,調用API。

$paymentMethod = array(
    「method」 => 「checkmo」 
); 

$resultPaymentMethod = $proxy->call(
    $sessionId, 
    「cart_payment.method」, 
    array(
     $shoppingCartId, 
     $paymentMethod 
    ) 
); 
+0

是shoppingCartId初始化的? –

+0

@BryanGlazer:是的,其實這是一個全局變量..我事先檢查過,沒有一個變量爲空。 –

回答

0

我得從登錄sessionId,但是當我調用一個方法(例如:catalog_category.info)它拋出異常:

XMLRPC故障:調用參數不匹配的簽名。

這裏是我的代碼:

new AsyncTask<Void, Void, Void>() { 
    @Override 
    protected Void doInBackground(Void... params) { 
     uri = URI.create("http://gameshay.net/magento/index.php/api/xmlrpc/"); 
     client = new XMLRPCClient(uri); 
     String sessionId = ""; 
     try { 
     sessionId = (String)client.call("login", "mdev", "socbay123"); 
     Log.d("MY_XMLRPC_SUCCESS_SESSION_ID", sessionId); 
     @SuppressWarnings("unchecked") 
     final Map<String, Object> category = (Map<String, Object>) client.call("call" Object[]{sessionId, "catalog_category.info","5"}); 
     } 
     catch (XMLRPCException e) { 
     Log.d("MY_XMLRPCException_MSG", e.getMessage()); 
     } 
     return null; 
    } 
}.execute(); 
+0

錯誤意味着您沒有以正確的方式傳遞參數,或者按正確的順序傳遞參數。 –