Java 集成 速卖通开发.

时间:2023-03-10 06:12:54
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

Java 集成 速卖通开发.

Java 集成 速卖通开发.

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

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

Java 集成 速卖通开发.

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

Java 集成 速卖通开发.

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

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

Java 集成 速卖通开发.

备注 :临时令牌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;