Java 集成速卖通开发.
一、申请成为开发者
申请入口:http://isvhz.aliexpress.com/isv/index.htm
说明文档:http://activities.aliexpress.com/open/applyisv.php、http://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;