签到领奖
查看: 3847|回复: 26

求助豆豆,我是ebay开发的新手,总感觉无从下手!

  [复制链接]
发表于 2013-5-9 16:48:45 | 显示全部楼层 |阅读模式
亲爱的豆豆,感谢你百忙中抽空解答。谢谢!
最近公司在准备着手整个对接ebay的订单处理系统,然而却落在了我等啥都不熟的人的身上。苦逼的程序猿,我想同类的你一定懂。唉!

开始弄了,却发现自己一个门外汉,看着无数的接口与方法,却无从下手。应该是跟经验有关吧,毕竟以前也没弄过类似的东西!此时一个引路人显得如此的重要,找遍了谷歌百度,总算是发现了ebay.cn上有一个豆豆。嘿嘿!在此先谢谢豆豆的抽空解答!

由于是新手,我的问题比较多。先声明,勿对我无语哦!

我想问下,比如我要获取某个时间段的订单数据,应该用哪个方法呢?是GetOrders还是GetSellerTransactions呢?然后还有这里面的订单合并什么的,这是个什么概念呢?



还有个傻逼问题,我的sandbox账号里没有一个订单能操作。找遍了developer网站,也没发现到底到哪里去生成订单!在此求教豆豆:该怎么去生成订单哇?



我知道这些问题好简单呐,但我作为新手真的好纠结这些问题。如果豆豆这有现成的引导教程,那记得帮我贴上来哦。再次谢谢了!

在论坛找了好久,一个个的帖子翻着,有许多的有用,但却让我更加迷糊了。因为根本无从下手!呜呜!
发表于 2013-5-10 11:58:31 | 显示全部楼层
先到www.x.com注册个开发帐号,5000次应该够你测试了.

取订单用 getorders ,不过,要判断好付款的状态,防止没有收钱就发货了.(建议可以下载Paypal的收款记录为准,再下载ebay的订单,这样最妥当)

如果只使用 getOrders, 对于合并的订单,
在transactionArray 中存在多个记录,for 循环一下就能处理. 每一条相当于一个Item(SKU).
发表于 2013-5-10 12:02:09 | 显示全部楼层
可以使用ebay的SDK来开发,效率会高很多.

也可以使用 xml 字符串 的方式 构建一个request 来调用

好像现在也可以用 NVP 的方式,组成一个request URL 来调用,

我也是新手,几个月前我也和你一样,什么也不懂...
可以加我Q-Q,相互交流 2964 7713
 楼主| 发表于 2013-5-10 15:09:55 | 显示全部楼层

回复 2# 龟蛇龙 的帖子

先谢谢您了,让我的迷惑少了一些,再次表示感谢。
貌似我大概明白了,不知道我的理解是否正确,您给看看。
是不是先用GetSellerTransactions获取到某个时间段所有的订单,然后检索状态获取Order ID,之后通过GetOrders去获取相应订单的详细信息呢?
 楼主| 发表于 2013-5-10 15:10:57 | 显示全部楼层

回复 3# 龟蛇龙 的帖子

我开发用的是Java的SDK,感觉快很多!
只是现在还不是很明白,唉!想在自己的sandbox账号里生成个订单,弄到现在还没个头绪!唉!
求支招,谢谢啦!
发表于 2013-5-10 21:52:37 | 显示全部楼层
如果是下载订单,一般用 GetOrder 就够 了,可用使用createdate,也可以使用 modifydate ,所有订单都能取得到.

生成订单方面 ,我没有用过,不过这个很少应用的.
 楼主| 发表于 2013-5-13 10:00:36 | 显示全部楼层

回复 6# 龟蛇龙 的帖子

GetOrders就够了么?
我刚用的时候提示GetOrders要有Order ID才能获取!
不知道神马情况。求指教..
发表于 2013-5-13 10:15:28 | 显示全部楼层
生成订单你可以在sandbox注册几个买家账号,购买几次就有订单了。
生成订单你不用API来测的,你应该不是做代购网站吧?
发表于 2013-5-13 10:15:43 | 显示全部楼层
原帖由 羽灵 于 2013-5-13 10:00 发表
GetOrders就够了么?
我刚用的时候提示GetOrders要有Order ID才能获取!
不知道神马情况。求指教..

你是不是没有设定modiTime或者createTime?
 楼主| 发表于 2013-5-13 11:52:19 | 显示全部楼层

回复 9# 功能豆 的帖子

啊?要这两个参数的哇?
好吧,这两个参数是范围还是什么哇?求链接...
谢谢啦!
我以为什么都不传,会直接获取所有的!@
 楼主| 发表于 2013-5-13 11:53:21 | 显示全部楼层

回复 8# 功能豆 的帖子

不是的,我没想过用程序生成订单!
只是我不知道该怎么去哪买,去哪里发布商品,然后用账号去买来生成订单!
唉!
测试环境下一个订单都没有,悲催啊!
发表于 2013-5-13 13:13:21 | 显示全部楼层
原帖由 羽灵 于 2013-5-13 11:53 发表
不是的,我没想过用程序生成订单!
只是我不知道该怎么去哪买,去哪里发布商品,然后用账号去买来生成订单!
唉!
测试环境下一个订单都没有,悲催啊! ...

你自己注册几个测试环境的账号,有些做卖家,有些做买家,自己买自己的东西就有订单了啊。
手工操作呀
发表于 2013-5-13 13:13:45 | 显示全部楼层
原帖由 羽灵 于 2013-5-13 11:52 发表
啊?要这两个参数的哇?
好吧,这两个参数是范围还是什么哇?求链接...
谢谢啦!
我以为什么都不传,会直接获取所有的!@

http://developer.ebay.com/DevZone/XML/docs/Reference/eBay/GetOrders.html
发表于 2013-5-13 13:29:29 | 显示全部楼层
每个API都有详细的文档说明, input/output 的参数要多看看. 有一些input参数是 必须的,有一些是可选的.

getOrders 一般使用订单修改时间范围,或者订单创建时间范围, 还要指定返回的每一页的订单数量.
订单多时,可以分页返回,这样就可循环取出指定范围的所有订单了...

评分

1

查看全部评分

发表于 2013-5-13 15:28:07 | 显示全部楼层
哇,功能豆 真是慷慨啊, 加豆币,还加威望.......
发表于 2013-5-13 15:29:49 | 显示全部楼层
那当然!
发表于 2013-5-13 16:12:26 | 显示全部楼层
即兴写了几行代码....  文本编辑器中,没有调试,可能有报错.....给新手参考一下吧


@Override
        public void run() {
                String sql = "select shopid,token,starttime,endtime from your_api_table ";//改为自己的sql
                Integer oCount = 0;//订单数量
                Integer pageNum = 1;// 页数
                **DateFormat dateFormat = new **DateFormat("yyyy-MM-dd HH:mm:ss");
                       
                try {
                        ArrayList<HashMap<String,Object>> shopList = getAPIShop(sql);//把数据集转为Map数组,具体自己写,或者直接用数据集也行

                        for (int y = 0; y < shopList.size(); y++) {
                                HashMap<String,Object> record = (HashMap<String,Object>) shopList.get(y);
                                String shopID = record.get("shopid").toString();
                                String token = record.get("token").toString();
                               
                                //Log.printLog("开始下载["+shopID+"]订单...");
                               
                                ApiContext apiContext = new ApiContext();//API内容
                                ApiCredential cred = apiContext.getApiCredential();
                                cred.seteBayToken(token);//设置token
                                apiContext.setApiServerUrl("https://api.ebay.com/wsapi");//正式环境的接入点

                                GetOrdersCall getCall = new GetOrdersCall(apiContext);//使用指定的API创建一个Call
                                Calendar mFromTime = Calendar.getInstance();
                                Calendar mToTime = Calendar.getInstance();
                               
                                mFromTime.setTime(dateFormat.parse(record.get("starttime").toString()));//开始时间,根据数据库实际取出的时间进行转换
                                mToTime.setTime(dateFormat.parse(record.get("endtime").toString()));//结束时间
                               
                                getCall.setModTimeFrom(mFromTime);//使用修改时间为条件
                                getCall.setModTimeTo(mToTime);
                                //getCall.setCreateTimeFrom(mFromTime); //使用订单创建时间
                                //getCall.setCreateTimeTo(mToTime);
                                //getCall.setNumberOfDays(30);//对应ModTime,指定取近N天的订单,API说明中说到会覆盖掉ModTime的时间范围                               
                               
                                DetailLevelCodeType[] dt = new DetailLevelCodeType[] { DetailLevelCodeType.RETURN_ALL };// RETURN_ALL
                                getCall.setDetailLevel(dt);
                                                               
                                OrderStatusCodeType oType = OrderStatusCodeType.ALL;//只取所有类型的,可自行调整
                                getCall.setOrderStatus(oType);                               
                                //getCall.setOrderRole(TradingRoleCodeType.SELLER);//只取卖家的订单,自已在别人店时买的不取,我的理解是这样                               
                                do {
                                        PaginationType pageType = new PaginationType();
                                        pageType.setEntriesPerPage(getPageSize());//每页N订单
                                        pageType.setPageNumber(pageNum);//取每pageNum页
                                        getCall.setPagination(pageType);                                       
                                        pageNum++;//准备下一页                                       
                                        OrderType[] oList = getCall.getOrders(); //调用API
                                        if(oList!=null){                                               
                                                for (int i = 0; i < oList.length; i++) {//解析返回订单                                                       
                                                        OrderType o = oList;//取出订单                                                       
                                                        //转换了自己定义的对象类型
                                                        EBayTrade eTrade =geteBayTrade(o);//订单
                                                        eTrade.setShopid(shopID);//此订单的内部系统店号
                                                        ArrayList<EBayTradedt> eTradedtList = geteBayTradedt(oList);//订单明细                                                       
                                                        EBayAddTrade.AddTrade2DB(eTrade, eTradedtList);//写入数据库
                                                        oCount ++;//记录订单数量
                                                       
                                                        o = null;                                                                                       
                                                        eTrade = null;
                                                        eTradedtList = null;
                                                }
                                        }
                                        pageType = null;
                                        oList = null;       

                                } while (getCall.getReturnedHasMoreOrders());//如果还有订单,继续循环取下一页
                                //释放变量
                                apiContext = null;
                                shopID = null;
                                cred = null;
                                token = null;
                                mFromTime = null;
                                mToTime = null;
                                dt = null;
                                oType = null;
                                getCall = null;
                                //updateLastSynTime(record);//更新下一次取订单的时间,具体自行写代码
                                record = null;                               
                                //Log.printLog("["+shopID+"]订单下载完毕,数量["+oCount+"]!");
                        }                       
                        //Log.printLog("本线程下载完毕!");
                } catch (Exception e) {
                        //Log.printLog("下载出错:"+e.getMessage());
                        e.printStackTrace();                       
                }finally{
                        //释放变量
                        shopSql = null;
                        oCount = null;
                        pageNum = null;
                        dateFormat = null;
                        //.....其它定义的变量也要处理....
                        //...
                }

        }


[ 本帖最后由 龟蛇龙 于 2013-5-13 16:18 编辑 ]
发表于 2013-5-13 16:16:19 | 显示全部楼层
想上传个代码附件..... 发现没这个功能,或者没这个权限 ....
发表于 2013-5-13 17:06:49 | 显示全部楼层
ls真的很热心!
 楼主| 发表于 2013-5-24 15:38:19 | 显示全部楼层

回复 17# 龟蛇龙 的帖子

感激不尽呐..
结合您的代码,总算是给调通了,这几天都忙着结合现有的系统弄了。现在总算是给弄完了!
再次表示感谢!
 楼主| 发表于 2013-5-24 15:40:03 | 显示全部楼层

回复 18# 龟蛇龙 的帖子

嘿嘿,通过你上面给的代码。已经大致弄通了!
HOHO,再次表示感谢了!

不过最近又碰到个问题,就是在取订单的时候,有些订单取不过来!
不知道是为什么?
我使用的是modTime进行限制的!
求帮解答,谢谢了!
 楼主| 发表于 2013-5-24 15:41:32 | 显示全部楼层

回复 19# 功能豆 的帖子

好像亲们都好热心哦...
所以一碰到问题立马跑这来求助了!
再次感谢热心帮助的亲们...
么么!
发表于 2013-5-25 13:00:43 | 显示全部楼层
订单取不到有很多原因,你得具体描述一下....
 楼主| 发表于 2013-6-26 15:44:30 | 显示全部楼层

回复 23# 龟蛇龙 的帖子

每次来看您的示例代码,都会有不同的感悟与体会!大神,感激不尽!
发表于 2013-8-30 15:25:04 | 显示全部楼层
楼主真是过奖了,大家多多交流.....
发表于 2013-9-1 16:15:51 | 显示全部楼层
搬个板凳,跟着学习。
发表于 2017-9-20 21:26:39 | 显示全部楼层
好多年前的事了...
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表