Sfoglia il codice sorgente

/* 淘宝订单抓取测试 author by shenl 2020-07-13 */

sl 5 anni fa
parent
commit
ab42e5462c

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


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

@@ -0,0 +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;
+    }
+
+}

+ 1 - 1
src/main/java/com/uas/eis/service/QueryService.java

@@ -10,6 +10,6 @@ public interface QueryService {
 	
 	
 	public Object query(String code, String param);
 	public Object query(String code, String param);
 	
 	
-	public Object doAction(String code, String param);
+	public String doAction(String code, String param);
 
 
 }
 }

+ 72 - 10
src/main/java/com/uas/eis/serviceImpl/QueryServiceImpl.java

@@ -9,9 +9,12 @@ import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.regex.Pattern;
 
 
+import com.taobao.api.DefaultTaobaoClient;
+import com.taobao.api.TaobaoClient;
 import com.uas.eis.entity.ActionConfig;
 import com.uas.eis.entity.ActionConfig;
 import com.uas.eis.entity.ErrorMsg;
 import com.uas.eis.entity.ErrorMsg;
 import com.uas.eis.exception.SystemException;
 import com.uas.eis.exception.SystemException;
+import com.uas.eis.utils.DateUtil;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.cache.annotation.Cacheable;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
@@ -28,6 +31,8 @@ import com.uas.eis.utils.BaseUtil;
 
 
 import net.sf.json.JSONObject;
 import net.sf.json.JSONObject;
 
 
+
+
 @Service
 @Service
 public class QueryServiceImpl implements QueryService {
 public class QueryServiceImpl implements QueryService {
 
 
@@ -212,11 +217,74 @@ public class QueryServiceImpl implements QueryService {
 		}
 		}
 		
 		
 	}
 	}
-	
-	public Object doAction() {
-		return null;
+
+	@Override
+	public String doAction(String code, String param) {
+		try {
+			// 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    /* 待修改 */
+
+			TaobaoClient client = new DefaultTaobaoClient(serverUrl, appKey, appSecret);
+			TradesSoldGetRequest req = new TradesSoldGetRequest();
+			req.setFields("tid,type,status,payment,orders,rx_audit_status");
+
+
+			req.setStartCreated(StringUtils.parseDateTime("2000-01-01 00:00:00"));
+			req.setEndCreated(StringUtils.parseDateTime("2000-01-01 23:59:59"));
+			req.setStatus("ALL_WAIT_PAY");
+			req.setBuyerNick("zhangsan");
+			req.setType("game_equipment");
+			req.setExtType("service");
+			req.setRateStatus("RATE_UNBUYER");
+			req.setTag("time_card");
+			req.setPageNo(1L);
+			req.setPageSize(40L);
+			req.setUseHasNext(true);
+			req.setBuyerOpenId("AAHm5d-EAAeGwJedwSHpg8bT");
+			TradesSoldGetResponse rsp = client.execute(req, sessionKey);
+			System.out.println(rsp.getBody());
+			//这里解析返回的数据
+
+			String sysdate = toString(DateUtil.getCurrentDate(),"hh:mm:ss");
+            if(("23:59:59").equals(sysdate)){
+				com.alibaba.fastjson.JSONObject jsonObject = new com.alibaba.fastjson.JSONObject();
+				com.alibaba.fastjson.JSONObject jsonObject1 = com.alibaba.fastjson.JSONObject.parseObject(rsp.getBody());
+				Object trades = jsonObject1.get("trades");
+
+				Map<Object, Object> formMap = new HashMap<Object, Object>();
+				//formMap = BaseUtil.parseFormStoreToMap(formStore);
+				//List<Map<Object, Object>> gridMaps = BaseUtil.parseGridStoreToMaps(gridStore);
+				Map<Object, Object> map = new HashMap<Object, Object>();
+
+				Long said = baseDao.queryForObject("select sale_seq.nextval from dual", Long.class);
+
+				Long said = baseDao.queryForObject("select  from configs", Long.class);
+
+				String INSERTSALESql = "insert into sale(sa_id,sa_date,sa_custname,sa_currency,sa_rate,sa_apcustname,sa_shcustname,sa_toplace,sa_transport" +
+						",sa_seller,sa_updatedate,sa_enddate,sa_statuscode,sa_status,sa_fare,sa_total,sa_recamount,sa_plandelivery,sa_printstatuscode)" +
+						"values(said,start_created,receiver_name,'rmb','1',receiver_name,receiver_name,receiver_address,shipping_type" +
+						",o2o_guide_name,modified,end_time,'entering','在录入',post_fee,payment,total_fee,consign_time,'unprint')";
+
+				String INSERTSALEDETAILSql = "insert into saledetail(sd_said,sd_detno,sd_qty,sd_delivery,sd_price,sd_total,sd_taxrate,sd_costprice" +
+						",sd_taxtotal,sd_description,sd_statuscode,sd_status,sd_enddate,sd_senddate,sd_discount)"+
+						"values (sd_said,?,num,price,total_fee,?,price/(1+sd_taxrate/100)" +
+						",price/(1+total_fee/100),customization,'entering','在录入',end_time,consign_time,discount_fee )";
+				baseDao.execute(INSERTSALESql);
+				baseDao.execute(INSERTSALEDETAILSql);
+				return "插入每日销售明细成功";
+			}
+
+
+		}catch (Exception e){
+			return e.getMessage();
+		}
 	}
 	}
 	
 	
+
+	
 	/**
 	/**
 	 * 传入参数的合法性校验
 	 * 传入参数的合法性校验
 	 * @param code
 	 * @param code
@@ -250,11 +318,5 @@ public class QueryServiceImpl implements QueryService {
 		}
 		}
 	}
 	}
 
 
-	@Override
-	public Object doAction(String code, String param) {
-		return null;
-	}
-	
-	
-	
+
 }
 }