Browse Source

/* 淘宝订单抓取 优化
1.新建 订单插入 mvc类
2.日志记录
1.服务挂掉
2.确实没有录入订单
3.新增单号字段, 录入日期记录当天 ,淘宝订单ID,修改了订单表 alter table sale add sa_tradeid number;
4.增加定时任务 每隔10分钟自动执行一次
author by shenl 2020-07-28 */

sl 5 years ago
parent
commit
f5902e85c6

BIN
lib/taobao-sdk-java-auto_1455552377940-20180326.jar


BIN
lib/taobao-sdk-java-auto_1599984691101-20201105-source.jar


BIN
lib/taobao-sdk-java-auto_1599984691101-20201105.jar


+ 276 - 276
src/main/java/com/uas/eis/core/support/ApiConfig.java

@@ -1,276 +1,276 @@
-package com.uas.eis.core.support;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.io.Reader;
-import java.net.HttpURLConnection;
-import java.net.URL;
-import java.net.URLEncoder;
-import java.security.GeneralSecurityException;
-import java.security.MessageDigest;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
-import java.util.Arrays;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
-import java.util.zip.GZIPInputStream;
-
-import javax.crypto.Mac;
-import javax.crypto.SecretKey;
-import javax.crypto.spec.SecretKeySpec;
-public class ApiConfig {
-    private static final String SIGN_METHOD_MD5 = "md5";
-    private static final String SIGN_METHOD_HMAC = "hmac";
-    private static final String CHARSET_UTF8 = "utf-8";
-    private static final String CONTENT_ENCODING_GZIP = "gzip";
-
-    // TOP服务地址,正式环境需要设置为http://gw.api.taobao.com/router/rest
-    private static final String serverUrl = "http://gw.api.tbsandbox.com/router/rest";
-    private static final String appKey = "test"; // 可替换为您的沙箱环境应用的appKey         /* 待修改 */
-    private static final String appSecret = "test"; // 可替换为您的沙箱环境应用的appSecret   /* 待修改 */
-    private static final String sessionKey = "test"; // 必须替换为沙箱账号授权得到的真实有效sessionKey    /* 待修改 */
-
-    public static void main(String[] args) throws Exception {
-        System.out.println(getSellerItem());
-    }
-
-    private static String getSellerItem() throws IOException {
-        Map<String, String> params = new HashMap<String, String>();
-        // 公共参数
-        params.put("method", "taobao.item.seller.get");
-        params.put("app_key", appKey);
-        params.put("session", sessionKey);
-        DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-        params.put("timestamp", df.format(new Date()));
-        params.put("format", "json");
-        params.put("v", "2.0");
-        params.put("sign_method", "hmac");
-        // 业务参数
-        params.put("fields", "num_iid,title,nick,price,num");
-        params.put("num_iid", "123456789");
-        // 签名参数
-        params.put("sign", signTopRequest(params, appSecret, SIGN_METHOD_HMAC));
-        // 请用API
-        return callApi(new URL(serverUrl), params);
-    }
-
-    /**
-     * 对TOP请求进行签名。
-     */
-    private static String signTopRequest(Map<String, String> params, String secret, String signMethod) throws IOException {
-        // 第一步:检查参数是否已经排序
-        String[] keys = params.keySet().toArray(new String[0]);
-        Arrays.sort(keys);
-
-        // 第二步:把所有参数名和参数值串在一起
-        StringBuilder query = new StringBuilder();
-        if (SIGN_METHOD_MD5.equals(signMethod)) {
-            query.append(secret);
-        }
-        for (String key : keys) {
-            String value = params.get(key);
-            if (isNotEmpty(key) && isNotEmpty(value)) {
-                query.append(key).append(value);
-            }
-        }
-
-        // 第三步:使用MD5/HMAC加密
-        byte[] bytes;
-        if (SIGN_METHOD_HMAC.equals(signMethod)) {
-            bytes = encryptHMAC(query.toString(), secret);
-        } else {
-            query.append(secret);
-            bytes = encryptMD5(query.toString());
-        }
-
-        // 第四步:把二进制转化为大写的十六进制
-        return byte2hex(bytes);
-    }
-
-    /**
-     * 对字节流进行HMAC_MD5摘要。
-     */
-    private static byte[] encryptHMAC(String data, String secret) throws IOException {
-        byte[] bytes = null;
-        try {
-            SecretKey secretKey = new SecretKeySpec(secret.getBytes(CHARSET_UTF8), "HmacMD5");
-            Mac mac = Mac.getInstance(secretKey.getAlgorithm());
-            mac.init(secretKey);
-            bytes = mac.doFinal(data.getBytes(CHARSET_UTF8));
-        } catch (GeneralSecurityException gse) {
-            throw new IOException(gse.toString());
-        }
-        return bytes;
-    }
-
-    /**
-     * 对字符串采用UTF-8编码后,用MD5进行摘要。
-     */
-    private static byte[] encryptMD5(String data) throws IOException {
-        return encryptMD5(data.getBytes(CHARSET_UTF8));
-    }
-
-    /**
-     * 对字节流进行MD5摘要。
-     */
-    private static byte[] encryptMD5(byte[] data) throws IOException {
-        byte[] bytes = null;
-        try {
-            MessageDigest md = MessageDigest.getInstance("MD5");
-            bytes = md.digest(data);
-        } catch (GeneralSecurityException gse) {
-            throw new IOException(gse.toString());
-        }
-        return bytes;
-    }
-
-    /**
-     * 把字节流转换为十六进制表示方式。
-     */
-    private static String byte2hex(byte[] bytes) {
-        StringBuilder sign = new StringBuilder();
-        for (int i = 0; i < bytes.length; i++) {
-            String hex = Integer.toHexString(bytes[i] & 0xFF);
-            if (hex.length() == 1) {
-                sign.append("0");
-            }
-            sign.append(hex.toUpperCase());
-        }
-        return sign.toString();
-    }
-
-    private static String callApi(URL url, Map<String, String> params) throws IOException {
-        String query = buildQuery(params, CHARSET_UTF8);
-        byte[] content = {};
-        if (query != null) {
-            content = query.getBytes(CHARSET_UTF8);
-        }
-
-        HttpURLConnection conn = null;
-        OutputStream out = null;
-        String rsp = null;
-        try {
-            conn = (HttpURLConnection) url.openConnection();
-            conn.setRequestMethod("POST");
-            conn.setDoInput(true);
-            conn.setDoOutput(true);
-            conn.setRequestProperty("Host", url.getHost());
-            conn.setRequestProperty("Accept", "text/xml,text/javascript");
-            conn.setRequestProperty("User-Agent", "top-sdk-java");
-            conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=" + CHARSET_UTF8);
-            out = conn.getOutputStream();
-            out.write(content);
-            rsp = getResponseAsString(conn);
-        } finally {
-            if (out != null) {
-                out.close();
-            }
-            if (conn != null) {
-                conn.disconnect();
-            }
-        }
-
-        return rsp;
-    }
-
-    private static String buildQuery(Map<String, String> params, String charset) throws IOException {
-        if (params == null || params.isEmpty()) {
-            return null;
-        }
-
-        StringBuilder query = new StringBuilder();
-        Set<Entry<String, String>> entries = params.entrySet();
-        boolean hasParam = false;
-
-        for (Entry<String, String> entry : entries) {
-            String name = entry.getKey();
-            String value = entry.getValue();
-            // 忽略参数名或参数值为空的参数
-            if (isNotEmpty(name) && isNotEmpty(value)) {
-                if (hasParam) {
-                    query.append("&");
-                } else {
-                    hasParam = true;
-                }
-
-                query.append(name).append("=").append(URLEncoder.encode(value, charset));
-            }
-        }
-
-        return query.toString();
-    }
-
-    private static String getResponseAsString(HttpURLConnection conn) throws IOException {
-        String charset = getResponseCharset(conn.getContentType());
-        if (conn.getResponseCode() < 400) {
-            String contentEncoding = conn.getContentEncoding();
-            if (CONTENT_ENCODING_GZIP.equalsIgnoreCase(contentEncoding)) {
-                return getStreamAsString(new GZIPInputStream(conn.getInputStream()), charset);
-            } else {
-                return getStreamAsString(conn.getInputStream(), charset);
-            }
-        } else {// Client Error 4xx and Server Error 5xx
-            throw new IOException(conn.getResponseCode() + " " + conn.getResponseMessage());
-        }
-    }
-
-    private static String getStreamAsString(InputStream stream, String charset) throws IOException {
-        try {
-            Reader reader = new InputStreamReader(stream, charset);
-            StringBuilder response = new StringBuilder();
-
-            final char[] buff = new char[1024];
-            int read = 0;
-            while ((read = reader.read(buff)) > 0) {
-                response.append(buff, 0, read);
-            }
-
-            return response.toString();
-        } finally {
-            if (stream != null) {
-                stream.close();
-            }
-        }
-    }
-
-    private static String getResponseCharset(String ctype) {
-        String charset = CHARSET_UTF8;
-
-        if (isNotEmpty(ctype)) {
-            String[] params = ctype.split(";");
-            for (String param : params) {
-                param = param.trim();
-                if (param.startsWith("charset")) {
-                    String[] pair = param.split("=", 2);
-                    if (pair.length == 2) {
-                        if (isNotEmpty(pair[1])) {
-                            charset = pair[1].trim();
-                        }
-                    }
-                    break;
-                }
-            }
-        }
-
-        return charset;
-    }
-
-    private static boolean isNotEmpty(String value) {
-        int strLen;
-        if (value == null || (strLen = value.length()) == 0) {
-            return false;
-        }
-        for (int i = 0; i < strLen; i++) {
-            if ((Character.isWhitespace(value.charAt(i)) == false)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-}
+//package com.uas.eis.core.support;
+//
+//import java.io.IOException;
+//import java.io.InputStream;
+//import java.io.InputStreamReader;
+//import java.io.OutputStream;
+//import java.io.Reader;
+//import java.net.HttpURLConnection;
+//import java.net.URL;
+//import java.net.URLEncoder;
+//import java.security.GeneralSecurityException;
+//import java.security.MessageDigest;
+//import java.text.DateFormat;
+//import java.text.SimpleDateFormat;
+//import java.util.Arrays;
+//import java.util.Date;
+//import java.util.HashMap;
+//import java.util.Map;
+//import java.util.Map.Entry;
+//import java.util.Set;
+//import java.util.zip.GZIPInputStream;
+//
+//import javax.crypto.Mac;
+//import javax.crypto.SecretKey;
+//import javax.crypto.spec.SecretKeySpec;
+//public class ApiConfig {
+//    private static final String SIGN_METHOD_MD5 = "md5";
+//    private static final String SIGN_METHOD_HMAC = "hmac";
+//    private static final String CHARSET_UTF8 = "utf-8";
+//    private static final String CONTENT_ENCODING_GZIP = "gzip";
+//
+//    // TOP服务地址,正式环境需要设置为http://gw.api.taobao.com/router/rest
+//    private static final String serverUrl = "http://gw.api.tbsandbox.com/router/rest";
+//    private static final String appKey = "test"; // 可替换为您的沙箱环境应用的appKey         /* 待修改 */
+//    private static final String appSecret = "test"; // 可替换为您的沙箱环境应用的appSecret   /* 待修改 */
+//    private static final String sessionKey = "test"; // 必须替换为沙箱账号授权得到的真实有效sessionKey    /* 待修改 */
+//
+//    public static void main(String[] args) throws Exception {
+//        System.out.println(getSellerItem());
+//    }
+//
+//    private static String getSellerItem() throws IOException {
+//        Map<String, String> params = new HashMap<String, String>();
+//        // 公共参数
+//        params.put("method", "taobao.item.seller.get");
+//        params.put("app_key", appKey);
+//        params.put("session", sessionKey);
+//        DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+//        params.put("timestamp", df.format(new Date()));
+//        params.put("format", "json");
+//        params.put("v", "2.0");
+//        params.put("sign_method", "hmac");
+//        // 业务参数
+//        params.put("fields", "num_iid,title,nick,price,num");
+//        params.put("num_iid", "123456789");
+//        // 签名参数
+//        params.put("sign", signTopRequest(params, appSecret, SIGN_METHOD_HMAC));
+//        // 请用API
+//        return callApi(new URL(serverUrl), params);
+//    }
+//
+//    /**
+//     * 对TOP请求进行签名。
+//     */
+//    private static String signTopRequest(Map<String, String> params, String secret, String signMethod) throws IOException {
+//        // 第一步:检查参数是否已经排序
+//        String[] keys = params.keySet().toArray(new String[0]);
+//        Arrays.sort(keys);
+//
+//        // 第二步:把所有参数名和参数值串在一起
+//        StringBuilder query = new StringBuilder();
+//        if (SIGN_METHOD_MD5.equals(signMethod)) {
+//            query.append(secret);
+//        }
+//        for (String key : keys) {
+//            String value = params.get(key);
+//            if (isNotEmpty(key) && isNotEmpty(value)) {
+//                query.append(key).append(value);
+//            }
+//        }
+//
+//        // 第三步:使用MD5/HMAC加密
+//        byte[] bytes;
+//        if (SIGN_METHOD_HMAC.equals(signMethod)) {
+//            bytes = encryptHMAC(query.toString(), secret);
+//        } else {
+//            query.append(secret);
+//            bytes = encryptMD5(query.toString());
+//        }
+//
+//        // 第四步:把二进制转化为大写的十六进制
+//        return byte2hex(bytes);
+//    }
+//
+//    /**
+//     * 对字节流进行HMAC_MD5摘要。
+//     */
+//    private static byte[] encryptHMAC(String data, String secret) throws IOException {
+//        byte[] bytes = null;
+//        try {
+//            SecretKey secretKey = new SecretKeySpec(secret.getBytes(CHARSET_UTF8), "HmacMD5");
+//            Mac mac = Mac.getInstance(secretKey.getAlgorithm());
+//            mac.init(secretKey);
+//            bytes = mac.doFinal(data.getBytes(CHARSET_UTF8));
+//        } catch (GeneralSecurityException gse) {
+//            throw new IOException(gse.toString());
+//        }
+//        return bytes;
+//    }
+//
+//    /**
+//     * 对字符串采用UTF-8编码后,用MD5进行摘要。
+//     */
+//    private static byte[] encryptMD5(String data) throws IOException {
+//        return encryptMD5(data.getBytes(CHARSET_UTF8));
+//    }
+//
+//    /**
+//     * 对字节流进行MD5摘要。
+//     */
+//    private static byte[] encryptMD5(byte[] data) throws IOException {
+//        byte[] bytes = null;
+//        try {
+//            MessageDigest md = MessageDigest.getInstance("MD5");
+//            bytes = md.digest(data);
+//        } catch (GeneralSecurityException gse) {
+//            throw new IOException(gse.toString());
+//        }
+//        return bytes;
+//    }
+//
+//    /**
+//     * 把字节流转换为十六进制表示方式。
+//     */
+//    private static String byte2hex(byte[] bytes) {
+//        StringBuilder sign = new StringBuilder();
+//        for (int i = 0; i < bytes.length; i++) {
+//            String hex = Integer.toHexString(bytes[i] & 0xFF);
+//            if (hex.length() == 1) {
+//                sign.append("0");
+//            }
+//            sign.append(hex.toUpperCase());
+//        }
+//        return sign.toString();
+//    }
+//
+//    private static String callApi(URL url, Map<String, String> params) throws IOException {
+//        String query = buildQuery(params, CHARSET_UTF8);
+//        byte[] content = {};
+//        if (query != null) {
+//            content = query.getBytes(CHARSET_UTF8);
+//        }
+//
+//        HttpURLConnection conn = null;
+//        OutputStream out = null;
+//        String rsp = null;
+//        try {
+//            conn = (HttpURLConnection) url.openConnection();
+//            conn.setRequestMethod("POST");
+//            conn.setDoInput(true);
+//            conn.setDoOutput(true);
+//            conn.setRequestProperty("Host", url.getHost());
+//            conn.setRequestProperty("Accept", "text/xml,text/javascript");
+//            conn.setRequestProperty("User-Agent", "top-sdk-java");
+//            conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=" + CHARSET_UTF8);
+//            out = conn.getOutputStream();
+//            out.write(content);
+//            rsp = getResponseAsString(conn);
+//        } finally {
+//            if (out != null) {
+//                out.close();
+//            }
+//            if (conn != null) {
+//                conn.disconnect();
+//            }
+//        }
+//
+//        return rsp;
+//    }
+//
+//    private static String buildQuery(Map<String, String> params, String charset) throws IOException {
+//        if (params == null || params.isEmpty()) {
+//            return null;
+//        }
+//
+//        StringBuilder query = new StringBuilder();
+//        Set<Entry<String, String>> entries = params.entrySet();
+//        boolean hasParam = false;
+//
+//        for (Entry<String, String> entry : entries) {
+//            String name = entry.getKey();
+//            String value = entry.getValue();
+//            // 忽略参数名或参数值为空的参数
+//            if (isNotEmpty(name) && isNotEmpty(value)) {
+//                if (hasParam) {
+//                    query.append("&");
+//                } else {
+//                    hasParam = true;
+//                }
+//
+//                query.append(name).append("=").append(URLEncoder.encode(value, charset));
+//            }
+//        }
+//
+//        return query.toString();
+//    }
+//
+//    private static String getResponseAsString(HttpURLConnection conn) throws IOException {
+//        String charset = getResponseCharset(conn.getContentType());
+//        if (conn.getResponseCode() < 400) {
+//            String contentEncoding = conn.getContentEncoding();
+//            if (CONTENT_ENCODING_GZIP.equalsIgnoreCase(contentEncoding)) {
+//                return getStreamAsString(new GZIPInputStream(conn.getInputStream()), charset);
+//            } else {
+//                return getStreamAsString(conn.getInputStream(), charset);
+//            }
+//        } else {// Client Error 4xx and Server Error 5xx
+//            throw new IOException(conn.getResponseCode() + " " + conn.getResponseMessage());
+//        }
+//    }
+//
+//    private static String getStreamAsString(InputStream stream, String charset) throws IOException {
+//        try {
+//            Reader reader = new InputStreamReader(stream, charset);
+//            StringBuilder response = new StringBuilder();
+//
+//            final char[] buff = new char[1024];
+//            int read = 0;
+//            while ((read = reader.read(buff)) > 0) {
+//                response.append(buff, 0, read);
+//            }
+//
+//            return response.toString();
+//        } finally {
+//            if (stream != null) {
+//                stream.close();
+//            }
+//        }
+//    }
+//
+//    private static String getResponseCharset(String ctype) {
+//        String charset = CHARSET_UTF8;
+//
+//        if (isNotEmpty(ctype)) {
+//            String[] params = ctype.split(";");
+//            for (String param : params) {
+//                param = param.trim();
+//                if (param.startsWith("charset")) {
+//                    String[] pair = param.split("=", 2);
+//                    if (pair.length == 2) {
+//                        if (isNotEmpty(pair[1])) {
+//                            charset = pair[1].trim();
+//                        }
+//                    }
+//                    break;
+//                }
+//            }
+//        }
+//
+//        return charset;
+//    }
+//
+//    private static boolean isNotEmpty(String value) {
+//        int strLen;
+//        if (value == null || (strLen = value.length()) == 0) {
+//            return false;
+//        }
+//        for (int i = 0; i < strLen; i++) {
+//            if ((Character.isWhitespace(value.charAt(i)) == false)) {
+//                return true;
+//            }
+//        }
+//        return false;
+//    }
+//
+//}

+ 35 - 12
src/main/java/com/uas/eis/serviceImpl/InsertServiceImpl.java

@@ -1,44 +1,54 @@
 package com.uas.eis.serviceImpl;
 
+
 import com.taobao.api.DefaultTaobaoClient;
 import com.taobao.api.TaobaoClient;
 import com.uas.eis.dao.BaseDao;
+import com.uas.eis.service.InsertService;
 import net.sf.json.JSONArray;
 import net.sf.json.JSONObject;
+import org.apache.log4j.Logger;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
-import com.uas.eis.service.InsertService;
-import org.apache.log4j.Logger;
+
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Timer;
 import java.util.TimerTask;
 
+import com.taobao.api.request.TradesSoldGetRequest;
+import com.taobao.api.response.TradesSoldGetResponse;
+
+
+
 @Service
 public class InsertServiceImpl implements InsertService {
     // TOP服务地址,正式环境需要设置为http://gw.api.taobao.com/router/rest
-    private static final String serverUrl = "http://gw.api.tbsandbox.com/router/rest";
-    private static final String appKey = "test"; // 可替换为您的沙箱环境应用的appKey         /* 待修改 */
-    private static final String appSecret = "test"; // 可替换为您的沙箱环境应用的appSecret   /* 待修改 */
+    private static final String serverUrl = "gw.api.taobao.com/router/rest";
+    // private static final String serverUrl = "http://gw.api.tbsandbox.com/router/rest";
+    private static final String appKey = "31921866"; // 可替换为您的沙箱环境应用的appKey         /* 待修改 */
+    private static final String appSecret = "7121c52d4c9970ba08bf09e2f525acd0"; // 可替换为您的沙箱环境应用的appSecret   /* 待修改 */
     private static final String sessionKey = "test"; // 必须替换为沙箱账号授权得到的真实有效sessionKey    /* 待修改 */
     private static Logger logger = Logger.getLogger(InsertServiceImpl.class);
 
     @Autowired
     private BaseDao baseDao;
+
     @Override
     public String Insert(String code, String param) {
 
         try {
 
-            Timer timer=new Timer();//实例化Timer类
-            timer.schedule(new TimerTask(){
+            Timer timer = new Timer();//实例化Timer类
+            timer.schedule(new TimerTask() {
                 public void run() {
 
 
                     TaobaoClient client = new DefaultTaobaoClient(serverUrl, appKey, appSecret);
 
                     //  查询卖家已卖出的交易数据
-                    OpenTradesSoldGetRequest req = new OpenTradesSoldGetRequest();
+                    TradesSoldGetRequest req = new TradesSoldGetRequest();
+//                    OpenTradesSoldGetRequest req = new OpenTradesSoldGetRequest();
                     req.setFields("tid,type,status,payment,orders,rx_audit_status");
 
                     //String sysdate = DateUtil.getCurrentDate();
@@ -56,12 +66,20 @@ public class InsertServiceImpl implements InsertService {
 //            req.setPageSize(40L);
                     req.setUseHasNext(true);
                     req.setBuyerOpenId("AAHm5d-EAAeGwJedwSHpg8bT");
-                    OpenTradesSoldGetResponse rsp = client.execute(req, sessionKey);
+//                    OpenTradesSoldGetResponse rsp = client.execute(req, sessionKey);
+
+                    try {
+                        TradesSoldGetResponse rsp = client.execute(req, sessionKey);
+
                     System.out.println(rsp.getBody());
                     List<String> insertSqlsList = new ArrayList<String>();
                     //这里解析返回的数据
-                    //解析第一层---对象
-                    JSONObject jObject1 = new JSONObject(rsp.getBody());
+
+                        rsp.getTrades();
+
+
+//                    //解析第一层---对象
+//                    JSONObject jObject1 = new JSONObject(rsp.getBody());
                     //解析第二层----数组
                     JSONArray jsonArray2 = jObject1.getJSONArray("trades");
                     //遍历数组获取元素----对象
@@ -101,8 +119,13 @@ public class InsertServiceImpl implements InsertService {
                         baseDao.execute(insertSqlsList);
                         logger.info(this.getClass() + "插入销售明细成功");
                     }
+
+                    }catch (Exception e) {
+                        logger.info(this.getClass() + "淘宝未响应并返回订单数据");
+                        return ;
+                    }
                 }
-            },600000);//10分钟
+            }, 600000);//10分钟
         } catch (Exception e) {
             logger.info(this.getClass() + "服务挂掉");
             return e.getMessage();