【问题标题】:Create Invoice Method is not working properly of Magento APIMagento API 的创建发票方法无法正常工作
【发布时间】:2012-07-14 23:45:27
【问题描述】:

我正在尝试使用 XMLRPC 在 Android 应用程序中使用 Magento API 创建销售订单发票。我正在使用方法“sales_order_invoice.create”创建发票。此方法在对magento wiki中提到的给定数量的响应。但问题是magento商店上的发票数量没有更新。其他事情是订单状态正在更改为正确的处理中,并且发票中也存在已创建发票的条目商店列表,但支付金额显示为 $0.0,这是不正确的。

不知道在调用sales_order_invoice.create之前需要调用其他方法还是方法有问题??
下面是我调用方法的部分代码:

import java.util.HashMap;
import org.xmlrpc.android.XMLRPCClient;
import org.xmlrpc.android.XMLRPCException;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class MagentoStore extends Activity {

private XMLRPCClient client;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);
            String sessionId = "";


client = new XMLRPCClient("http://www.mystore.com/index.php/api/xmlrpc");
        try {

            sessionId = (String)client.call("login", "tester", "tester");
            Log.d("MY_XMLRPC_SUCCESS_SESSION_ID", sessionId);
            }
         catch (XMLRPCException e) {

            Log.d("MY_XMLRPCException_MSG", e.getMessage());
        }

        Object salesorderInfo = null;
        Object[] methodParams = new Object[]{"100000028"};
        Object[] callParams = new Object[]{sessionId,"sales_order.info", methodParams};
        String salesorderinvoice= null;
        try {
             salesorderInfo = (Object)client.callEx("call",callParams);
             HashMap map = (HashMap)salesorderInfo;
             Object[]items=(Object[])map.get("items");
             for(Object item :items)
             {
                 HashMap itemlist=(HashMap)item;
                 String item_id=(String)itemlist.get("item_id");
                 int itemids=Integer.parseInt(item_id);
                 String base_price=(String)itemlist.get("base_price");
                 if(base_price.equals("0.0000"))
                 {
                  continue;  
                 }   
                 String name=(String)itemlist.get("name");
                 Double qty=1.0;
                 String qty_ordered =(String)itemlist.get("qty_ordered");
                 String qty_invoiced=(String)itemlist.get("qty_invoiced");
                 Object[] methodParams1 = new Object[]{"100000028",itemids,qty};
                 Object[] callParams1 = new Object[]{sessionId,"sales_order_invoice.create", methodParams1};
                 salesorderinvoice= (String)client.callEx("call",callParams1);

             } 
            } catch (Exception e) {
            Log.d("APP_INFO", "Exception: " + e.getMessage());
            }               
    }
}

有人有什么想法吗?? 提前致谢

【问题讨论】:

  • 您是否没有收到此错误:: 07-17 06:23:58.895: WARN/System.err(25812): java.net.UnknownHostException: Host is unresolved: cws16:80 07-17 06:23:58.916: WARN/System.err(25812): at java.net.Socket.connect(Socket.java:1037) 07-17 06:23:58.926: WARN/System.err(25812): at org .apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:117) 07-17 06:23:58.926: WARN/System.err(25812): at org.apache.http.impl.conn.DefaultClientConnectionOperator。 openConnection(DefaultClientConnectionOperator.java:129) 07-17 06:23:58.926: WARN/System.err(25812): at org.apache.
  • 我使用与您相同的代码,但出现此错误...请 Krushnakant 帮助我...Regargs。
  • 我正在使用我的本地服务器。我知道我只有 url 有问题...我使用 url 作为“cws24/magento/index.php/api/xmlrpc"...and 它给了我未知主机异常
  • @Androider:不,我没有收到任何错误。我得到了正确的响应,但没有在 magento 商店创建发票。我认为你的权利可能是你的 Url 有问题。您是将此代码用于 Java 应用还是 Android 应用??
  • 我正在 Magento 网站上创建一个 Android 应用

标签: android api magento xml-rpc invoice


【解决方案1】:

仅供参考

调用 API sales_order_invoice.create 时,必须分配数组指针名称。

String qty_ordered =(String)itemlist.get("qty_ordered");
                 String qty_invoiced=(String)itemlist.get("qty_invoiced");
                 Object[] methodParams1 = new Object[]{"100000028",itemids,qty};

尝试用 var_dump 方法Params1

methodParams1.toString();

必须与

相同
array(
      'orderIncrementId' => '200000008', 
      array(
            'order_item_id' => '11', 
            'qty' => '1'
      )
);

因为这是将参数放入 sales_order_invoice.create

的方式
$result = $client->call(
    $session,
    'sales_order_invoice.create',
    array('orderIncrementId' => '200000008', array('order_item_id' => '11', 'qty' => '1'))
);

【讨论】:

  • 它给你无效的参数错误,因为你的参数不正确。
  • 好的,但是如果我不按照你的建议使用 methodParams1.toString() 并且只使用 methodParams1 那么它会给我 Invoice Increment Id 作为响应,并且不会像我之前提到的那样给出任何错误.
  • @krushnakant 你在吗..我在创建订单发货时遇到问题..请帮助我
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-11
  • 2015-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多