zoukankan      html  css  js  c++  java
  • 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;
  • 相关阅读:
    mybatis mapper配置
    python 练习题
    python 函数
    python 文件处理
    python3 编码解码
    messagebox
    Python 基础
    PyMongo
    tkinter Text
    python tkinter entry
  • 原文地址:https://www.cnblogs.com/jmcui/p/7235204.html
Copyright © 2011-2022 走看看