Java 集成速卖通开发.

一、申请成为开发者

申请入口:http://isvhz.aliexpress.com/isv/index.htm

说明文档:http://activities.aliexpress.com/open/applyisv.phphttp://gw.api.alibaba.com/dev/doc/intl/sys_join.htm?ns=aliexpress.open

 

 

 二、获得店铺授权并获得临时code临牌(两分钟有效)

网址链接:http://gw.api.alibaba.com/dev/tools/app_signature.html

输入店铺信息后,速卖通就会返回给你临时Token

  三、用临时Token获取授权Token和refresh_token

参考网址:http://gw.api.alibaba.com/dev/doc/intl/sys_auth.htm?ns=aliexpress.open

备注 :临时令牌code只有两分钟的有效时间,access_token 有10个小时的有效时间,refresh_token 有半年的有效时间,所以呢,超过了两分钟,以上的接口就不能用了哦!那要怎么办呢?总不能我每次用的时候都走一遍授权吧?当然不用咯,可以用refresh_token去获取access_token (具体的接口内容就在以上文档的下面,可以自己去看哦,就不细讲了)。这里不禁还是要问:半年授权一次也很让人头疼啊!不要急。当 refresh_token  在30天内就要过期的时候,可以重新刷新时间呢(接口内容也在那个文档下面哦,至于refresh_token_timeout  到期时间接口里就有哦)

四、Java SDK 开发

说明:官网的SDK实在不想吐槽了,不知道是那个开发团队整的,根本没法使。我去Github上整了一套,自己搞了下、

这位哥们已经写的很详细了,大家仔细看下就行,最后附上我获得签名认证过程的代码,我是在hybris上开发的,所以可能有点不一样,不过核心内容都一样,主要是参考那个哥们的......

 AliExpressTypeModel aliExpressTypeModel = orderService.queryAliExpressTypeByCode("12345678");
        if (aliExpressTypeModel!=null) {
            String host = "gw.api.alibaba.com";
            String redirect_uri = "http://authhz.alibaba.com/auth/authCode.htm";

            Map<String, String> params1 = new HashMap<>();
            params1.put("client_id", aliExpressTypeModel.getAppKey());
            params1.put("redirect_uri", redirect_uri);
            params1.put("client_secret", aliExpressTypeModel.getAppSecret());
            params1.put("code", aliExpressTypeModel.getOneCode());

            String getTokenResult = AuthService.getToken(host, params1, true);
            if (getTokenResult == null) {
                LOG.info("临时令牌超过两分钟已失效......");
                //临时令牌已失效,用refresh_token去获取access_token
                params1.put("refresh_token", aliExpressTypeModel.getRefreshToken());
                String refreshTokenResult = AuthService.refreshToken(host, params1);
                if (refreshTokenResult == null) {
                    LOG.info("长时令牌超过半年已失效,请重新授权并执行脚本导入......");
                } else {
                    JSONObject refreshJsonObject = JSONObject.parseObject(refreshTokenResult);
                    LOG.info("获取到的授权令牌是:" + refreshJsonObject.get("access_token").toString());
                    aliExpressTypeModel.setAccessToken(refreshJsonObject.get("access_token").toString());
                    modelService.save(aliExpressTypeModel);

                    //如果refresh_token只有30天的有效期了,则刷新refresh_token、
                    String refreshokenimeout = aliExpressTypeModel.getRefreshokenimeout();
                    if (refreshokenimeout != null) {
                        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmssSSSZ");
                        TimeZone utcZone = TimeZone.getTimeZone("UTC");
                        simpleDateFormat.setTimeZone(utcZone);
                        try {
                            Date date = simpleDateFormat.parse(refreshokenimeout);
                            Date now = new Date();
                            int days = (int) ((date.getTime() - now.getTime()) / (1000 * 3600 * 24));
                            if (days < 30) {
                                params1.put("refresh_token", aliExpressTypeModel.getRefreshToken());
                                params1.put("access_token", aliExpressTypeModel.getAccessToken());
                                String postponeToken = AuthService.postponeToken(host, params1);
                                JSONObject postponeTokenObject = JSONObject.parseObject(postponeToken);
                                aliExpressTypeModel.setRefreshToken(postponeTokenObject.get("refresh_token").toString());
                                aliExpressTypeModel.setRefreshokenimeout(postponeTokenObject.get("refresh_token_timeout").toString());
                                modelService.save(aliExpressTypeModel);
                            }
                        } catch (ParseException e) {
                            e.printStackTrace();
                        }
                    }
                    return refreshJsonObject.get("access_token").toString();
                }
            } else {
                JSONObject codeJsonObject = JSON.parseObject(getTokenResult);
                LOG.info("获取到的授权令牌是:" + codeJsonObject.get("access_token").toString());
                aliExpressTypeModel.setRefreshToken(codeJsonObject.get("refresh_token").toString());
                aliExpressTypeModel.setAccessToken(codeJsonObject.get("access_token").toString());
                aliExpressTypeModel.setRefreshokenimeout(codeJsonObject.get("refresh_token_timeout").toString());
                modelService.save(aliExpressTypeModel);
                return codeJsonObject.get("access_token").toString();
            }
        }
        return null;

 

posted @ 2017-07-25 17:05  JMCui  阅读(1352)  评论(0编辑  收藏  举报